1
0

initial commit

This commit is contained in:
2026-07-26 01:01:08 +02:00
commit 787cefefd5
86 changed files with 3195 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8
+2
View File
@@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
+21
View File
@@ -0,0 +1,21 @@
# Godot 4.2+ specific ignores
~*.dll
# Godot 4+ specific ignores
.godot/
.nomedia
/android/
# Godot-specific ignores
.import/
export.cfg
export_credentials.cfg
*.tmp
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ds15hhsmjp3wc"
path="res://.godot/imported/stopwatch.png-b73c158978363763d92060f75a79b335.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/collectables/stopwatch.png"
dest_files=["res://.godot/imported/stopwatch.png-b73c158978363763d92060f75a79b335.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
+8
View File
@@ -0,0 +1,8 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="8" y="10" width="16" height="16" rx="8" stroke="black" stroke-width="2"/>
<rect x="13" y="5" width="6" height="2" rx="1" fill="black"/>
<rect x="15" y="7" width="2" height="3" fill="black" fill-opacity="0.5"/>
<rect x="15" y="12" width="2" height="7" rx="1" fill="black"/>
<path d="M25.5 6C26.0523 6 26.5 6.44772 26.5 7V8.5H28C28.5523 8.5 29 8.94772 29 9.5C29 10.0523 28.5523 10.5 28 10.5H26.5V12C26.5 12.5523 26.0523 13 25.5 13C24.9477 13 24.5 12.5523 24.5 12V10.5H23C22.4477 10.5 22 10.0523 22 9.5C22 8.94772 22.4477 8.5 23 8.5H24.5V7C24.5 6.44772 24.9477 6 25.5 6Z" fill="black" fill-opacity="0.5"/>
<rect x="18.9623" y="15.135" width="2" height="4.99976" rx="1" transform="rotate(60 18.9623 15.135)" fill="black" fill-opacity="0.5"/>
</svg>

After

Width:  |  Height:  |  Size: 850 B

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://desgj7lpexej7"
path="res://.godot/imported/stopwatch.svg-d39e3bbf3360b8ba0da7f6682c867797.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/collectables/stopwatch.svg"
dest_files=["res://.godot/imported/stopwatch.svg-d39e3bbf3360b8ba0da7f6682c867797.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
+11
View File
@@ -0,0 +1,11 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_16_2)">
<path d="M0 0L24 24L0 48V0Z" fill="white"/>
<path d="M24 0L48 24L24 48V0Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_16_2">
<rect width="48" height="48" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 329 B

+43
View File
@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://jscv4dmprutv"
path="res://.godot/imported/fastforward.svg-776e438727ff9eb49cd6794099a316cc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/fastforward.svg"
dest_files=["res://.godot/imported/fastforward.svg-776e438727ff9eb49cd6794099a316cc.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dbhwfxaqgogb3"
path="res://.godot/imported/gmtk-big.png-e7f9d1fe32a9dff7a88ad795779254e5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/gmtk-big.png"
dest_files=["res://.godot/imported/gmtk-big.png-e7f9d1fe32a9dff7a88ad795779254e5.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: 33 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bt1fcckct5jax"
path="res://.godot/imported/gmtk.png-4143279bc1d6229b2e928421b7571d76.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/gmtk.png"
dest_files=["res://.godot/imported/gmtk.png-4143279bc1d6229b2e928421b7571d76.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: 12 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cs35h4es4e6p"
path="res://.godot/imported/gun1.png-bcc67654ab25c4fcc7aa1feec09a7a23.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/gun1.png"
dest_files=["res://.godot/imported/gun1.png-bcc67654ab25c4fcc7aa1feec09a7a23.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: 177 B

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c3o7a2w3qyl4o"
path="res://.godot/imported/tile.png-4df97e3230f905e3df311a6634fd05fa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/tile.png"
dest_files=["res://.godot/imported/tile.png-4df97e3230f905e3df311a6634fd05fa.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: 296 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://chofj1gn6jmyo"
path="res://.godot/imported/dashMachine.png-4142366c59d759e31ffe1366516e3ec0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/dashMachine.png"
dest_files=["res://.godot/imported/dashMachine.png-4142366c59d759e31ffe1366516e3ec0.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: 1.0 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bigxhnmrmsg45"
path="res://.godot/imported/dumbbell.png-98fb91e608348a61cf93c5a7ae31c0f9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/dumbbell.png"
dest_files=["res://.godot/imported/dumbbell.png-98fb91e608348a61cf93c5a7ae31c0f9.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: 570 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cos44i12og7um"
path="res://.godot/imported/fasterFaster.png-298b6d01ba61ae4d886203968f54bd8f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/fasterFaster.png"
dest_files=["res://.godot/imported/fasterFaster.png-298b6d01ba61ae4d886203968f54bd8f.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: 249 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dtagaj8hyg6jd"
path="res://.godot/imported/firstAidKit.png-86f212f827658f2a63efa6133d4fd802.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/firstAidKit.png"
dest_files=["res://.godot/imported/firstAidKit.png-86f212f827658f2a63efa6133d4fd802.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: 369 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c3ltcwyo4wyml"
path="res://.godot/imported/rollback.png-fdeb88a75bb46b60d2a7e4f7908d1408.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/rollback.png"
dest_files=["res://.godot/imported/rollback.png-fdeb88a75bb46b60d2a7e4f7908d1408.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: 1.2 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://pb14cjjw7aa8"
path="res://.godot/imported/shotgun.png-576d03dc02854eb9a3e096114794bd2d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/shotgun.png"
dest_files=["res://.godot/imported/shotgun.png-576d03dc02854eb9a3e096114794bd2d.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: 784 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bo1pub5cp7i6"
path="res://.godot/imported/speedMayhem.png-f15c5bd3653d92af6a0b24ee98d2a75e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/speedMayhem.png"
dest_files=["res://.godot/imported/speedMayhem.png-f15c5bd3653d92af6a0b24ee98d2a75e.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: 285 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dx77bwsgen5o3"
path="res://.godot/imported/thoseWereTheDays.png-d1a0fcf468b867a6098b247d6eb71447.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/images/upgrades/thoseWereTheDays.png"
dest_files=["res://.godot/imported/thoseWereTheDays.png-d1a0fcf468b867a6098b247d6eb71447.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
+33
View File
@@ -0,0 +1,33 @@
[gd_scene format=3 uid="uid://d1ta1nxbedqad"]
[ext_resource type="Script" uid="uid://ca8an62xpl0e4" path="res://assets/scripts/disposableParticles.gd" id="1_16fqk"]
[sub_resource type="Curve" id="Curve_xyegg"]
_data = [Vector2(0.49822062, 0.99999994), 0.0, 0.0, 0, 0, Vector2(0.99644125, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="Gradient" id="Gradient_pymst"]
offsets = PackedFloat32Array(0, 0.68235296, 0.9882353)
colors = PackedColorArray(1, 1, 1, 1, 0.6, 0.6, 0.6, 1, 1, 1, 1, 0)
[node name="Blood" type="CPUParticles2D" unique_id=1387158673]
z_index = -1
emitting = false
amount = 10
lifetime = 5.0
one_shot = true
explosiveness = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 20.0
initial_velocity_max = 50.0
linear_accel_min = -50.0
linear_accel_max = -20.0
angle_min = -180.0
angle_max = 180.0
scale_amount_min = 4.0
scale_amount_max = 6.0
scale_amount_curve = SubResource("Curve_xyegg")
color = Color(0.89, 0, 0, 1)
color_ramp = SubResource("Gradient_pymst")
script = ExtResource("1_16fqk")
+56
View File
@@ -0,0 +1,56 @@
[gd_scene format=3 uid="uid://crv0gs7xtegi4"]
[ext_resource type="Script" uid="uid://iwxi6s8i6j81" path="res://assets/scripts/enemy.gd" id="1_5q6ol"]
[sub_resource type="Animation" id="Animation_kvq5h"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Polygon2D:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_kbpvo"]
resource_name = "shoot"
length = 0.4
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Polygon2D:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(0.13869622, 2, 0.73204285),
"update": 0,
"values": [Vector2(1, 1), Vector2(0.5, 1.2), Vector2(1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_55kjn"]
_data = {
&"RESET": SubResource("Animation_kvq5h"),
&"shoot": SubResource("Animation_kbpvo")
}
[node name="Enemy" type="CharacterBody2D" unique_id=1421049985]
script = ExtResource("1_5q6ol")
[node name="Polygon2D" type="Polygon2D" parent="." unique_id=274914633]
position = Vector2(-13, 0)
rotation = 1.5707964
color = Color(0, 0.3333335, 1, 1)
polygon = PackedVector2Array(-15, 0, 15, 0, 0, -30)
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="." unique_id=1346650607]
visible = false
polygon = PackedVector2Array(-16, 15, -16, -15, 14, 0)
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1072188506]
libraries/ = SubResource("AnimationLibrary_55kjn")
+30
View File
@@ -0,0 +1,30 @@
[gd_scene format=3 uid="uid://etjisg8welsn"]
[ext_resource type="Script" uid="uid://bemc80xgvtkd4" path="res://assets/scripts/enemy_bullet.gd" id="1_ptxui"]
[sub_resource type="SphereMesh" id="SphereMesh_xyegg"]
radius = 5.0
height = 10.0
[sub_resource type="CircleShape2D" id="CircleShape2D_c3msa"]
radius = 5.0
[node name="EnemyBullet" type="CharacterBody2D" unique_id=822797430]
z_index = 1
collision_layer = 2
collision_mask = 2
script = ExtResource("1_ptxui")
[node name="MeshInstance2D" type="MeshInstance2D" parent="." unique_id=903508644]
modulate = Color(0.6156863, 0, 1, 1)
mesh = SubResource("SphereMesh_xyegg")
[node name="hitme" type="Area2D" parent="." unique_id=194049910]
collision_layer = 2
collision_mask = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="hitme" unique_id=711740605]
shape = SubResource("CircleShape2D_c3msa")
[connection signal="area_entered" from="hitme" to="." method="_on_area_entered"]
[connection signal="body_entered" from="hitme" to="." method="_on_body_entered"]
+9
View File
@@ -0,0 +1,9 @@
[gd_scene format=3 uid="uid://bjrqlhik55h8o"]
[ext_resource type="AudioStream" uid="uid://b7gupw3d7sfho" path="res://assets/sounds/explosion.wav" id="1_7lrd8"]
[ext_resource type="Script" uid="uid://ctjyxuafayafk" path="res://assets/scripts/explosionsfx.gd" id="2_458cp"]
[node name="ExplosionSFX" type="AudioStreamPlayer2D" unique_id=427221510]
stream = ExtResource("1_7lrd8")
autoplay = true
script = ExtResource("2_458cp")
+39
View File
@@ -0,0 +1,39 @@
[gd_scene format=3 uid="uid://dfwhpkgf77e5y"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xyegg"]
size = Vector2(30, 30)
[sub_resource type="BoxMesh" id="BoxMesh_xyegg"]
size = Vector3(24, 24, 1)
[sub_resource type="Curve" id="Curve_xyegg"]
_data = [Vector2(0.41992885, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.038095236), 0.0, 0.0, 0, 0]
point_count = 2
[node name="Pickupable" type="Area2D" unique_id=448556835]
collision_layer = 2
collision_mask = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2069397373]
shape = SubResource("RectangleShape2D_xyegg")
[node name="mainmesh" type="MeshInstance2D" parent="." unique_id=1578928066]
modulate = Color(4.415934, 4.415934, 4.415934, 1)
mesh = SubResource("BoxMesh_xyegg")
[node name="particles" type="CPUParticles2D" parent="." unique_id=871258801]
z_index = -1
emitting = false
amount = 30
lifetime = 10.0
one_shot = true
explosiveness = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 50.0
initial_velocity_max = 100.0
linear_accel_min = -100.0
linear_accel_max = -100.0
scale_amount_min = 3.0
scale_amount_max = 6.0
scale_amount_curve = SubResource("Curve_xyegg")
+22
View File
@@ -0,0 +1,22 @@
[gd_scene format=3 uid="uid://bqla58648mj8x"]
[ext_resource type="PackedScene" uid="uid://dfwhpkgf77e5y" path="res://assets/scenes/pickupable.tscn" id="1_paivl"]
[ext_resource type="Texture2D" uid="uid://ds15hhsmjp3wc" path="res://assets/images/collectables/stopwatch.png" id="2_g8182"]
[ext_resource type="Texture2D" uid="uid://desgj7lpexej7" path="res://assets/images/collectables/stopwatch.svg" id="3_fb1sx"]
[node name="Pickupable" unique_id=448556835 instance=ExtResource("1_paivl")]
metadata/pickup = 1
[node name="mainmesh" parent="." index="1" unique_id=1578928066]
modulate = Color(0.53800005, 1, 0.16000003, 1)
[node name="Stopwatch" type="Sprite2D" parent="." index="2" unique_id=1633947504]
visible = false
texture = ExtResource("2_g8182")
[node name="particles" parent="." index="3" unique_id=871258801]
color = Color(0.5372549, 1, 0.16078432, 1)
[node name="Stopwatch2" type="Sprite2D" parent="." index="4" unique_id=2549464]
scale = Vector2(0.75, 0.75)
texture = ExtResource("3_fb1sx")
+175
View File
@@ -0,0 +1,175 @@
[gd_scene format=3 uid="uid://bwlwbahelcq52"]
[ext_resource type="Script" uid="uid://dbofvk7fso8po" path="res://assets/scripts/player.gd" id="1_rwm0n"]
[ext_resource type="Texture2D" uid="uid://cs35h4es4e6p" path="res://assets/images/gun1.png" id="2_s027a"]
[ext_resource type="Texture2D" uid="uid://c3o7a2w3qyl4o" path="res://assets/images/tile.png" id="3_14505"]
[ext_resource type="AudioStream" uid="uid://de4sr2qpjr1w2" path="res://assets/sounds/shoot.wav" id="4_4wcc8"]
[ext_resource type="AudioStream" uid="uid://5b7eonllfufp" path="res://assets/sounds/hitHurt.wav" id="5_8sknh"]
[ext_resource type="Script" uid="uid://ca8an62xpl0e4" path="res://assets/scripts/disposableParticles.gd" id="6_0gfpk"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_0gfpk"]
light_mode = 1
[sub_resource type="BoxMesh" id="BoxMesh_xyegg"]
size = Vector3(31, 31, 1)
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_14505"]
light_mode = 1
[sub_resource type="Animation" id="Animation_s027a"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("gun:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_14505"]
resource_name = "shoot"
length = 0.4
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("gun:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(0.13869628, 2.0000021, 0.7320437),
"update": 0,
"values": [Vector2(1, 1), Vector2(1.2, 0.5), Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_4wcc8"]
resource_name = "shoot_flip"
length = 0.4
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("gun:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(0.13869628, 2.0000021, 0.7320437),
"update": 0,
"values": [Vector2(1, -1), Vector2(1.2, -0.5), Vector2(1, -1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_4wcc8"]
_data = {
&"RESET": SubResource("Animation_s027a"),
&"shoot": SubResource("Animation_14505"),
&"shoot_flip": SubResource("Animation_4wcc8")
}
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xyegg"]
size = Vector2(31, 31)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pymst"]
size = Vector2(24, 24)
[sub_resource type="Curve" id="Curve_14505"]
_data = [Vector2(0.66548043, 0.9809523), 0.0, 0.0, 0, 0, Vector2(1, 0.009523869), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="Gradient" id="Gradient_4wcc8"]
offsets = PackedFloat32Array(0.8745098, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
[node name="Player" type="CharacterBody2D" unique_id=1190467346]
script = ExtResource("1_rwm0n")
[node name="ColorRect" type="ColorRect" parent="." unique_id=1343075480]
visible = false
offset_left = -16.0
offset_top = -16.0
offset_right = 15.0
offset_bottom = 15.0
color = Color(1, 0, 0, 1)
[node name="Polygon2D" type="Polygon2D" parent="." unique_id=982630085]
material = SubResource("CanvasItemMaterial_0gfpk")
position = Vector2(-0.5, -0.5)
color = Color(1, 0, 0, 1)
polygon = PackedVector2Array(-15, -15, 16, -15, 16, 16, -15, 16)
[node name="MeshInstance2D" type="MeshInstance2D" parent="." unique_id=1817854395]
modulate = Color(0, 0, 0, 0.2509804)
mesh = SubResource("BoxMesh_xyegg")
[node name="Camera2D" type="Camera2D" parent="." unique_id=641690279]
position_smoothing_enabled = true
[node name="gun" type="Node2D" parent="." unique_id=1991256638]
[node name="sprite" type="Sprite2D" parent="gun" unique_id=404962107]
material = SubResource("CanvasItemMaterial_14505")
scale = Vector2(2, 2)
texture = ExtResource("2_s027a")
region_enabled = true
region_rect = Rect2(0, 112, 16, 16)
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=993544515]
libraries/ = SubResource("AnimationLibrary_4wcc8")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=266552910]
visible = false
shape = SubResource("RectangleShape2D_xyegg")
[node name="hitbox" type="Area2D" parent="." unique_id=1769955622 groups=["playerHitbox"]]
visible = false
collision_layer = 2
collision_mask = 2
metadata/playerHitbox = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="hitbox" unique_id=929455950]
shape = SubResource("RectangleShape2D_pymst")
debug_color = Color(0.37601954, 0.6145431, 0, 0.41960785)
[node name="PointLight2D" type="PointLight2D" parent="." unique_id=1388686543]
scale = Vector2(50, 50)
shadow_enabled = true
shadow_color = Color(0, 0, 0, 1)
texture = ExtResource("3_14505")
[node name="Timer" type="Timer" parent="." unique_id=1120887048]
wait_time = 0.05
autostart = true
ignore_time_scale = true
[node name="explode" type="CPUParticles2D" parent="." unique_id=1217002006]
z_index = -3
emitting = false
amount = 20
lifetime = 10.0
one_shot = true
explosiveness = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 20.0
initial_velocity_max = 50.0
linear_accel_min = -25.0
linear_accel_max = -25.0
scale_amount_min = 8.0
scale_amount_max = 16.0
scale_amount_curve = SubResource("Curve_14505")
color = Color(1, 0, 0, 1)
color_ramp = SubResource("Gradient_4wcc8")
script = ExtResource("6_0gfpk")
[node name="shootsfx" type="AudioStreamPlayer2D" parent="." unique_id=853884099]
stream = ExtResource("4_4wcc8")
[node name="hitsfx" type="AudioStreamPlayer2D" parent="." unique_id=640571283]
stream = ExtResource("5_8sknh")
[connection signal="area_entered" from="hitbox" to="." method="_on_hitbox_area_entered"]
[connection signal="timeout" from="Timer" to="." method="_on_framesave_timeout"]
+16
View File
@@ -0,0 +1,16 @@
[gd_scene format=3 uid="uid://7d67o6b6fcut"]
[ext_resource type="PackedScene" uid="uid://etjisg8welsn" path="res://assets/scenes/enemyBullet.tscn" id="1_3t5k8"]
[ext_resource type="Script" uid="uid://dnxmn06yejksk" path="res://assets/scripts/player_bullet.gd" id="2_qweep"]
[node name="EnemyBullet" unique_id=822797430 instance=ExtResource("1_3t5k8")]
z_index = 1
script = ExtResource("2_qweep")
[node name="MeshInstance2D" parent="." index="0" unique_id=903508644]
modulate = Color(1, 0, 0, 1)
[node name="hitme" parent="." index="1" unique_id=194049910]
z_index = 1
collision_layer = 16
collision_mask = 16
+213
View File
@@ -0,0 +1,213 @@
[gd_scene format=3 uid="uid://bjptrvvfk00r"]
[ext_resource type="Script" uid="uid://iwxi6s8i6j81" path="res://assets/scripts/enemy.gd" id="1_kvq5h"]
[ext_resource type="Script" uid="uid://ca8an62xpl0e4" path="res://assets/scripts/disposableParticles.gd" id="2_7yqym"]
[ext_resource type="AudioStream" uid="uid://5b7eonllfufp" path="res://assets/sounds/hitHurt.wav" id="2_ag6wx"]
[ext_resource type="AudioStream" uid="uid://d3ok8rhcq4kmr" path="res://assets/sounds/shootEnemy.wav" id="3_yw082"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xyegg"]
size = Vector2(30, 30)
[sub_resource type="Animation" id="Animation_kvq5h"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Polygon2D:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Polygon2D:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.5707964]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Polygon2D:color")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.6166668, 0, 1, 1)]
}
[sub_resource type="Animation" id="Animation_ag6wx"]
resource_name = "flash"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = false
tracks/0/path = NodePath("Polygon2D:color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.06666667, 0.16666667, 0.3),
"transitions": PackedFloat32Array(3.605001, 3.732124, 1),
"update": 0,
"values": [Color(0.6166668, 0, 1, 1), Color(1, 1, 1, 1), Color(0.6156863, 0, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Polygon2D:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.13333334, 0.5),
"transitions": PackedFloat32Array(4.1410594, 0.34151012, 1),
"update": 0,
"values": [Vector2(1, 1), Vector2(0.3, 0.3), Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_kbpvo"]
resource_name = "shoot"
length = 0.4
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Polygon2D:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4),
"transitions": PackedFloat32Array(0.13869622, 2, 0.73204285),
"update": 0,
"values": [Vector2(1, 1), Vector2(1.2, 0.5), Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_fg8cn"]
resource_name = "spawn"
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Polygon2D:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.33333334, 0.8),
"transitions": PackedFloat32Array(0.36602157, 1.0352651, 3.1383355),
"update": 0,
"values": [Vector2(0, 0), Vector2(1.25, 1.25), Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Polygon2D:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.6),
"transitions": PackedFloat32Array(1.8025008, 1),
"update": 0,
"values": [0.0, 1.5707963267948966]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_55kjn"]
_data = {
&"RESET": SubResource("Animation_kvq5h"),
&"flash": SubResource("Animation_ag6wx"),
&"shoot": SubResource("Animation_kbpvo"),
&"spawn": SubResource("Animation_fg8cn")
}
[sub_resource type="Curve" id="Curve_xyegg"]
_data = [Vector2(0.66548043, 0.9809523), 0.0, 0.0, 0, 0, Vector2(1, 0.009523869), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="Gradient" id="Gradient_pymst"]
offsets = PackedFloat32Array(0, 0.69411767, 0.69803923, 0.8745098, 1)
colors = PackedColorArray(1, 1, 1, 1, 0.48555556, 0.48555556, 0.48555556, 1, 0.46, 0.46, 0.46, 1, 0.51, 0.51, 0.51, 1, 1, 1, 1, 0)
[node name="Enemy" type="CharacterBody2D" unique_id=1421049985]
collision_layer = 16
collision_mask = 16
script = ExtResource("1_kvq5h")
metadata/enemy = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1723115153]
visible = false
shape = SubResource("RectangleShape2D_xyegg")
[node name="Polygon2D" type="Polygon2D" parent="." unique_id=274914633]
rotation = 1.5707964
color = Color(0.6166668, 0, 1, 1)
polygon = PackedVector2Array(-14.999999, 15.000001, -14.999999, 15.000001, -15.000001, -14.999999, 14.999999, -15.000001, 15.000001, 14.999999)
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1072188506]
libraries/ = SubResource("AnimationLibrary_55kjn")
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="." unique_id=1305506168]
[node name="Timer" type="Timer" parent="." unique_id=437715343]
wait_time = 0.1
autostart = true
[node name="RayCast2D" type="RayCast2D" parent="." unique_id=957428599]
target_position = Vector2(400, 0)
collision_mask = 512
[node name="explode" type="CPUParticles2D" parent="." unique_id=1638487851]
z_index = -3
emitting = false
amount = 20
lifetime = 10.0
one_shot = true
explosiveness = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 20.0
initial_velocity_max = 50.0
linear_accel_min = -25.0
linear_accel_max = -25.0
scale_amount_min = 8.0
scale_amount_max = 16.0
scale_amount_curve = SubResource("Curve_xyegg")
color = Color(0.45342964, 0.0022321118, 0.7445152, 1)
color_ramp = SubResource("Gradient_pymst")
script = ExtResource("2_7yqym")
[node name="ColorRect" type="ColorRect" parent="." unique_id=1205892242]
offset_left = -15.0
offset_top = -21.0
offset_right = 15.0
offset_bottom = -18.0
color = Color(1, 1, 1, 0.2509804)
[node name="health" type="ColorRect" parent="." unique_id=1962272317]
offset_left = -15.0
offset_top = -21.0
offset_right = 15.0
offset_bottom = -18.0
color = Color(0.8124417, 0, 0.111754455, 1)
[node name="hitsfx" type="AudioStreamPlayer2D" parent="." unique_id=2128530763]
stream = ExtResource("2_ag6wx")
[node name="shootsfx" type="AudioStreamPlayer2D" parent="." unique_id=408136521]
stream = ExtResource("3_yw082")
volume_db = -10.0
[node name="snappie" type="Timer" parent="." unique_id=807725500]
wait_time = 0.05
autostart = true
ignore_time_scale = true
[connection signal="timeout" from="Timer" to="." method="_on_new_path"]
[connection signal="timeout" from="snappie" to="." method="_on_snappie_timeout"]
+72
View File
@@ -0,0 +1,72 @@
[gd_scene format=3 uid="uid://dixc62oses4hl"]
[ext_resource type="Texture2D" uid="uid://chofj1gn6jmyo" path="res://assets/images/upgrades/dashMachine.png" id="1_efxjv"]
[ext_resource type="Script" uid="uid://b3rft2lmj60k0" path="res://assets/scripts/upgrade_ui.gd" id="1_v2t1u"]
[ext_resource type="AudioStream" uid="uid://dt154t2aall5d" path="res://assets/sounds/break.wav" id="3_64vnu"]
[sub_resource type="LabelSettings" id="LabelSettings_xyegg"]
[sub_resource type="Curve" id="Curve_xyegg"]
_data = [Vector2(0.5017794, 0.99047613), 0.0, 0.0, 0, 0, Vector2(1, 0.019047618), 0.0, 0.0, 0, 0]
point_count = 2
[node name="Control2" type="Control" unique_id=1424148917]
layout_mode = 3
anchors_preset = 0
offset_right = 48.0
offset_bottom = 48.0
script = ExtResource("1_v2t1u")
[node name="goldrect" type="ColorRect" parent="." unique_id=140383699]
visible = false
layout_mode = 0
offset_right = 48.0
offset_bottom = 48.0
color = Color(0.8, 0.6, 0, 1)
[node name="texture" type="TextureRect" parent="." unique_id=1844486601]
modulate = Color(1, 1, 1, 0)
layout_mode = 0
offset_right = 48.0
offset_bottom = 48.0
scale = Vector2(0.3, 0.3)
pivot_offset_ratio = Vector2(0.5, 0.5)
texture = ExtResource("1_efxjv")
[node name="progress" type="ColorRect" parent="." unique_id=1719328911]
layout_mode = 0
offset_left = 48.0
offset_right = 48.0
offset_bottom = 48.0
pivot_offset_ratio = Vector2(1, 0)
color = Color(0, 0, 0, 0.2509804)
[node name="Label" type="Label" parent="." unique_id=568341339]
layout_mode = 1
offset_top = 25.0
offset_right = 48.0
offset_bottom = 48.0
pivot_offset_ratio = Vector2(1, 0)
text = "x1"
label_settings = SubResource("LabelSettings_xyegg")
horizontal_alignment = 2
[node name="particles" type="CPUParticles2D" parent="." unique_id=1967275328]
position = Vector2(24, 24)
emitting = false
one_shot = true
explosiveness = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 300.0
initial_velocity_max = 500.0
linear_accel_min = -500.0
linear_accel_max = -300.0
scale_amount_min = 4.0
scale_amount_max = 8.0
scale_amount_curve = SubResource("Curve_xyegg")
color = Color(1, 1, 1, 0.5019608)
[node name="breaksfx" type="AudioStreamPlayer2D" parent="." unique_id=1024345853]
stream = ExtResource("3_64vnu")
volume_db = -10.0
+7
View File
@@ -0,0 +1,7 @@
extends CPUParticles2D
var unlock := false
func _process(delta: float) -> void:
if unlock and not emitting:
queue_free()
@@ -0,0 +1 @@
uid://ca8an62xpl0e4
+176
View File
@@ -0,0 +1,176 @@
extends CharacterBody2D
@onready var bullet = preload("res://assets/scenes/enemyBullet.tscn")
@onready var explosionSFX = preload("res://assets/scenes/explosionsfx.tscn")
@onready var player = $"../../Player"
@onready var poly = $"Polygon2D"
@onready var animations = $AnimationPlayer
@onready var healthBar = $health
@onready var healthBg = $ColorRect
@onready var nav_agent: NavigationAgent2D = $NavigationAgent2D
@onready var ray:= $RayCast2D
@onready var hitsfx = $hitsfx
@onready var shootsfx = $shootsfx
const RANGE = 400.0
var curShootVal := 1.0
var lock := true
@export var shootDelay := 1.0
var health := 100.0
var maxHealth := 100.0
var wave := 1
var flash := 0.0
var knockback := Vector2.ZERO
var frameData = {}
var transitioning := false
var transitionState = [false, false, false]
var targetState = []
var ticks = 0
var tickToDel = 0
func moveback(seconds):
if ticks < 5: return
print("lets go")
targetState = frameData[max(tickToDel, ticks - (int(floor(seconds)) * 20))]
transitioning = true
func _ready():
animations.play("spawn")
await get_tree().create_timer(0.7).timeout
lock = false
call_deferred("actor_setup")
func actor_setup() -> void:
await get_tree().physics_frame
if player:
nav_agent.target_position = player.global_position
func _process(delta: float) -> void:
healthBar.size.x += ((health / maxHealth) * healthBg.size.x - healthBar.size.x) * 5 * delta
if health < 0:
if player:
if Globals.unlockedUpgrades.get("firstAidKit", 0) > 0:
player.heal(randf_range(3,5))
else:
player.heal(randf_range(2,3))
get_node("explode").emitting = true
get_node("explode").unlock = true
get_node("explode").reparent(get_parent().get_parent())
var exlopsion = explosionSFX.instantiate()
get_parent().get_parent().add_child(exlopsion)
queue_free()
func _physics_process(delta: float) -> void:
if lock:
return
if transitioning:
position += (targetState[0] - position) * 5 * delta / Engine.time_scale
rotation += (targetState[1] - rotation) * 5 * delta / Engine.time_scale
velocity += (targetState[2] - velocity) * 5 * delta / Engine.time_scale
#
#position = position.round()
#rotation = round(rotation)
#velocity = velocity.round()
#print((position - targetState[0]).length(), " ", abs(rotation - targetState[1]), " ", (velocity - targetState[2]).length())
if (position - targetState[0]).length() < 2:
position = targetState[0]
transitionState[0] = true
if abs(rotation - targetState[1]) < 0.05:
rotation = targetState[1]
transitionState[1] = true
if (velocity - targetState[2]).length() < 2:
velocity = targetState[2]
transitionState[2] = true
if transitionState.count(true) == len(transitionState):
transitioning = false
transitionState = [false, false, false]
targetState = []
return
var nextpos := nav_agent.get_next_path_position()
ray.rotation += ray.get_angle_to(player.global_position)
var distance = global_position.distance_to(player.global_position)
ray.target_position.x = min(distance, 400)
if distance > RANGE and not ray.is_colliding():
poly.rotation += poly.get_angle_to(player.global_position) * 5 * delta
velocity.x += (cos(poly.rotation) * 200 - velocity.x) * 5 * delta
velocity.y += (sin(poly.rotation) * 200 - velocity.y) * 5 * delta
elif ray.is_colliding():
var newvel := (nextpos - global_position).normalized() * 200
poly.rotation += poly.get_angle_to(nextpos) * 5 * delta
velocity = newvel
#velocity += (newvel - velocity) * 5 * delta
#velocity.x += (cos(rotation) * 200 - velocity.x) * 5 * delta
#velocity.y += (sin(rotation) * 200 - velocity.y) * 5 * delta
else:
poly.rotation += poly.get_angle_to(player.global_position) * 5 * delta
#ray.rotation += ray.get_angle_to(player.global_position) * 5 * delta
curShootVal -= delta
if curShootVal <= 0:
var instantiated = bullet.instantiate()
instantiated.global_position = global_position
instantiated.rotation = poly.rotation
instantiated.velocity.x = cos(poly.rotation) * 500
instantiated.velocity.y = sin(poly.rotation) * 500
instantiated.dealtScale = 1.5 * pow(wave, 0.2)
get_parent().get_parent().add_child(instantiated)
animations.play("shoot")
shootsfx.play()
curShootVal = shootDelay
#velocity.x += (-cos(rotation) * 50 - velocity.x) / 5 * delta
#velocity.y += (-sin(rotation) * 50 - velocity.y) / 5 * delta
velocity.x += (-velocity.x) * 2 * delta
velocity.y += (-velocity.y) * 2 * delta
knockback += -knockback * 5 * delta
move_and_collide((velocity + knockback) * delta)
func _on_new_path() -> void:
if player:
nav_agent.target_position = player.global_position - Vector2(16, 16)
func _on_snappie_timeout() -> void:
frameData[ticks] = [position, rotation, velocity]
ticks += 1
if ticks > 240:
frameData.erase(tickToDel)
tickToDel += 1
+1
View File
@@ -0,0 +1 @@
uid://iwxi6s8i6j81
+32
View File
@@ -0,0 +1,32 @@
extends CharacterBody2D
@onready var playerP = $"../Player"
var max_collisions = 0
var dealtScale := 1.5
func _ready() -> void:
pass # Replace with function body.
func _physics_process(delta: float) -> void:
if playerP.transitioning: return
move_and_collide(velocity * delta)
func _on_area_entered(area: Area2D) -> void:
if area.get_meta("playerHitbox", 0) != 0:
var player = area.get_parent()
player.speedScale = dealtScale * pow(0.8, Globals.unlockedUpgrades.get("rollback", 0))
player.speedUp = 0.5
player.damageScale += dealtScale * pow(0.8, Globals.unlockedUpgrades.get("rollback", 0))
player.knockback = Vector2(sin(rotation) * 500 * [0.5, -0.5].pick_random(), cos(rotation) * 500 * [0.5, -0.5].pick_random())
player.hitsfx.play()
queue_free()
func _on_body_entered(body: Node2D) -> void:
queue_free()
+1
View File
@@ -0,0 +1 @@
uid://bemc80xgvtkd4
+6
View File
@@ -0,0 +1,6 @@
extends AudioStreamPlayer2D
func _process(delta: float) -> void:
if not playing:
queue_free()
+1
View File
@@ -0,0 +1 @@
uid://ctjyxuafayafk
+30
View File
@@ -0,0 +1,30 @@
extends Node
var availableUpgrades := ["dumbbell","firstAidKit", "rollback", "fasterFaster", "speedMayhem", "thoseWereTheDays", "dashMachine", "shotgun"]
var upgradeDescriptions := {
"firstAidKit": "+50% time back",
"dumbbell": "+20% damage",
"rollback": "-20% speed up when taking damage",
"fasterFaster": "+15% speed",
"speedMayhem": "deal more damage with more speed",
"thoseWereTheDays": "every rollback, gain +10% damage",
"dashMachine": "just a better dash.",
"shotgun": "a shotgun. literally just a fricking shotgun."
}
var goldUpgradeDescriptionOverrides := {
"shotgun": "still a shotgun, but now shiny ooo",
"dashMachine": "dash everywhere, go wild.",
"stopwatch": "countdowns are 50% slower. its cool isn't it?",
"adrenaline": "when 5 seconds left on the health countdown, recieve a 75% buff on EVERYTHING.",
"threeWaves": "something is coming in three waves."
}
var unlockedUpgrades = {}
var DASH_WAIT := 3.0
var DASH_LENGTH := 1000.0
var UPGRADE_ORIG := 30.0
var UPGRADE_TIMERSTART := 30.0
+1
View File
@@ -0,0 +1 @@
uid://ce6cecb4wunfi
+199
View File
@@ -0,0 +1,199 @@
extends CharacterBody2D
const SPEED := 300.0
var health := 30.0 # represented in seconds
var newHealth := -1.0
@onready var bullet = preload("res://assets/scenes/playerBullet.tscn")
@onready var gun = $gun
@onready var gunSprite = $gun/sprite
@onready var animations = $AnimationPlayer
@onready var shootsfx = $shootsfx
@onready var hitsfx = $hitsfx
@onready var dashRect = $MeshInstance2D
@onready var poly = $Polygon2D
signal transitionStart(seconds)
var speedUp := 0.0
var speedScale := 2.0
var damageScale := 1.0
var minDamageScale := 1.0
var dashTimer := 0.0
var dashVel := Vector2.ZERO
var knockback := Vector2.ZERO
var flip := false
var ticks = 0
var tickToDel = 0
var frameData = {} # keep position, rotation and velocity for now
var amountTransition := 0.0
var transitioning := false
var transitionState = [false, false, false]
var targetState = []
var dead := false
func heal(seconds):
newHealth = health + seconds
transitionStart.emit(seconds)
#print(frameData)
targetState = frameData[max(tickToDel, ticks - (int(floor(seconds)) * 20))]
transitioning = true
func healNoMove(seconds):
newHealth = health + seconds
func _process(delta: float) -> void:
if damageScale > minDamageScale: damageScale -= delta
damageScale = max(damageScale, minDamageScale)
#ticks += 1
dashRect.position.y = 31 * dashTimer / Globals.DASH_WAIT / 2 - 31.0 / 2
dashRect.scale.y = dashTimer / Globals.DASH_WAIT
if health < 10:
poly.position = Vector2(randi_range(-(10 - health) / 5,(10 - health) / 5), randi_range(-(10 - health) / 5,(10 - health) / 5))
if health <= 0 and not dead:
$explode.emitting = true
$explode.unlock = true
$explode.reparent(get_parent())
$PointLight2D.reparent(get_parent())
dead = true
hide()
var grayscaleVal := 1.0
func _physics_process(delta: float) -> void:
if dead: return
if newHealth != -1:
health += (newHealth - health) * 3 * delta
if abs(health - newHealth) < 1:
health = newHealth
newHealth = -1
if transitioning:
grayscaleVal += - grayscaleVal * 10 * delta
position += (targetState[0] - position) * 5 * delta / Engine.time_scale
rotation += (targetState[1] - rotation) * 5 * delta / Engine.time_scale
velocity += (targetState[2] - velocity) * 5 * delta / Engine.time_scale
Engine.time_scale += (0.5 - Engine.time_scale) * 5 * delta / Engine.time_scale
#
#position = position.round()
#rotation = round(rotation)
#velocity = velocity.round()
#print((position - targetState[0]).length(), " ", abs(rotation - targetState[1]), " ", (velocity - targetState[2]).length())
if (position - targetState[0]).length() < 2:
position = targetState[0]
transitionState[0] = true
if abs(rotation - targetState[1]) < 0.05:
rotation = targetState[1]
transitionState[1] = true
if (velocity - targetState[2]).length() < 2:
velocity = targetState[2]
transitionState[2] = true
if transitionState.count(true) == len(transitionState):
transitioning = false
transitionState = [false, false, false]
targetState = []
health = ceil(health)
amountTransition = 0
return
grayscaleVal += (1-grayscaleVal) * 2 * delta
var direction := Input.get_vector("moveLeft", "moveRight", "moveUp", "moveDown")
velocity = direction * SPEED
if Globals.unlockedUpgrades.get("fasterFaster", 0) > 0:
velocity *= pow(1.15, Globals.unlockedUpgrades["fasterFaster"])
gun.rotation += gun.get_angle_to(get_global_mouse_position()) * 7 * delta
#print(fposmod(gun.rotation + PI, PI * 2) - PI)
var truerot = fposmod(gun.rotation + PI, PI * 2) - PI
if truerot < -PI / 2 or truerot > PI / 2:
gun.scale.y += (-1 - gun.scale.y) * 10 * delta
flip = true
else:
gun.scale.y += (1 - gun.scale.y) * 10 * delta
flip = false
var ang = gun.rotation + gun.get_angle_to(get_global_mouse_position())
if Input.is_action_just_pressed("dash") and dashTimer == 0:
dashVel = Vector2(cos(ang), sin(ang)) * Globals.DASH_LENGTH
dashTimer = Globals.DASH_WAIT
if dashTimer > 0: dashTimer -= delta
else: dashTimer = 0
if Input.is_action_just_pressed("shoot"):
if not animations.is_playing():
#var ang = gun.rotation + gun.get_angle_to(get_global_mouse_position())
var instantiated = bullet.instantiate()
instantiated.global_position = global_position
instantiated.velocity.x = cos(ang) * 700
instantiated.velocity.y = sin(ang) * 700
get_parent().add_child(instantiated)
shootsfx.play()
if flip: animations.play("shoot_flip")
else: animations.play("shoot")
#if Input.is_action_just_pressed("debugKey"):
#targetState = frameData[ticks - 40]
#transitioning = true
if speedUp > 0:
Engine.time_scale += (speedScale - Engine.time_scale) * delta / Engine.time_scale
speedUp -= delta / speedScale
else:
speedScale = 1
Engine.time_scale += (1 - Engine.time_scale) * 2 * delta / Engine.time_scale
velocity += knockback
velocity += dashVel
knockback += -knockback * 5 * delta
dashVel += -dashVel * 5 * delta
move_and_slide()
func _on_framesave_timeout() -> void:
frameData[ticks] = [position, rotation, velocity]
ticks += 1
if ticks > 240:
frameData.erase(tickToDel)
tickToDel += 1
func _on_hitbox_area_entered(area: Area2D) -> void:
var themeta = area.get_meta("pickup", 0)
#print("floyd")
#
if themeta != 0:
area.get_node("particles").emitting = true
area.get_node("particles").reparent(get_parent())
healNoMove(3)
area.queue_free()
$"../hud/AnimationPlayer2".play("global/popItUp")
+1
View File
@@ -0,0 +1 @@
uid://dbofvk7fso8po
+50
View File
@@ -0,0 +1,50 @@
extends CharacterBody2D
@onready var player = $"../Player"
@onready var bloodParticles = preload("res://assets/scenes/blood.tscn")
var dmgtotal := float(randi_range(20,40))
func _ready() -> void:
print(dmgtotal)
if Globals.unlockedUpgrades.get("dumbbell", 0) > 0:
dmgtotal *= pow(1.5, Globals.unlockedUpgrades["dumbbell"])
if Globals.unlockedUpgrades.get("speedMayhem", 0) > 0:
dmgtotal *= pow(1 + (player.velocity.length() + player.dashVel.length()) / 400, Globals.unlockedUpgrades["speedMayhem"])
print(dmgtotal)
func _physics_process(delta: float) -> void:
if player.transitioning: return
move_and_collide(velocity * delta)
func _on_area_entered(area: Area2D) -> void:
print("yes")
queue_free()
func _on_body_entered(body: Node2D) -> void:
if body.get_meta("enemy", 0) == 1:
#body.get_node("explode").emitting = true
#body.get_node("explode").reparent(body.geat_parent())
body.health -= dmgtotal
body.knockback = Vector2(velocity.x * 0.5, velocity.y * 0.5)
body.hitsfx.play()
#AnimationPlayer.new().stop()
body.get_node("AnimationPlayer").stop()
body.get_node("AnimationPlayer").play("flash")
var bloodInsta = bloodParticles.instantiate()
bloodInsta.emitting = true
bloodInsta.unlock = true
bloodInsta.global_position = body.global_position
get_parent().add_child(bloodInsta)
#player.heal(randi_range(3,5))
#body.queue_free()
queue_free()
+1
View File
@@ -0,0 +1 @@
uid://dnxmn06yejksk
+39
View File
@@ -0,0 +1,39 @@
extends Control
@onready var texture = $texture
@onready var amountLabel = $Label
@onready var progressRect = $progress
@export var imDead := false
var upgradeID := ""
#var amount := 1
var timer := Globals.UPGRADE_TIMERSTART
func _process(delta: float) -> void:
if imDead and not $particles.emitting:
queue_free()
timer -= delta * Engine.time_scale
texture.scale += (Vector2(1, 1) - texture.scale) * 7 * delta
texture.modulate.a += (1 - texture.modulate.a) * 7 * delta
progressRect.position.x += (timer / Globals.UPGRADE_TIMERSTART * 48 - progressRect.position.x) * 5 * delta
progressRect.size.x += (48 - timer / Globals.UPGRADE_TIMERSTART * 48 - progressRect.size.x) * 5 * delta
amountLabel.text = str("x", Globals.unlockedUpgrades.get(upgradeID, -1))
if timer < 0 and not imDead:
Globals.unlockedUpgrades[upgradeID] -= 1
timer = Globals.UPGRADE_TIMERSTART
if Globals.unlockedUpgrades[upgradeID] == 0:
Globals.unlockedUpgrades.erase(upgradeID)
imDead = true
$texture.hide()
$progress.hide()
$Label.hide()
$goldrect.hide()
$breaksfx.play()
$particles.emitting = true
+1
View File
@@ -0,0 +1 @@
uid://b3rft2lmj60k0
+30
View File
@@ -0,0 +1,30 @@
shader_type canvas_item;
uniform sampler2D t0 : hint_screen_texture;
uniform float bloom_spread = 1;
uniform float bloom_intensity = 2;
void fragment() {
ivec2 size = textureSize(t0, 0);
float uv_x = SCREEN_UV.x * float(size.x);
float uv_y = SCREEN_UV.y * float(size.y);
vec4 sum = vec4(0.0);
for (int n = 0; n < 9; ++n) {
uv_y = (SCREEN_UV.y * float(size.y)) + float(bloom_spread * float(n - 4));
vec4 h_sum = vec4(0.0);
h_sum += texelFetch(t0, ivec2(int(uv_x) - int(4.0 * bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) - int(3.0 * bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) - int(2.0 * bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) - int(bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) + int(bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) + int(2.0 * bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) + int(3.0 * bloom_spread), int(uv_y)), 0);
h_sum += texelFetch(t0, ivec2(int(uv_x) + int(4.0 * bloom_spread), int(uv_y)), 0);
sum += h_sum / 9.0;
}
COLOR = texture(t0, SCREEN_UV) + ((sum / 9.0) * bloom_intensity);
}
+1
View File
@@ -0,0 +1 @@
uid://c8ew170obieqd
+11
View File
@@ -0,0 +1,11 @@
shader_type canvas_item;
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable;
uniform float saturation : hint_range(0.0, 1.0) = 1.0; // 0 = grayscale, 1 = full color
void fragment() {
vec4 tex = texture(screen_texture, SCREEN_UV);
float gray = dot(tex.rgb, vec3(0.299, 0.587, 0.114)); // luminance weights
vec3 result = mix(vec3(gray), tex.rgb, saturation);
COLOR = vec4(result, tex.a);
}
+1
View File
@@ -0,0 +1 @@
uid://iv65e2k0fx0e
+168
View File
@@ -0,0 +1,168 @@
shader_type canvas_item;
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
uniform bool overlay = false;
uniform float scanlines_opacity : hint_range(0.0, 1.0) = 0.4;
uniform float scanlines_width : hint_range(0.0, 0.5) = 0.25;
uniform float grille_opacity : hint_range(0.0, 1.0) = 0.3;
uniform vec2 resolution = vec2(640.0, 480.0);
uniform bool pixelate = true;
uniform bool roll = true;
uniform float roll_speed = 8.0;
uniform float roll_size : hint_range(0.0, 100.0) = 15.0;
uniform float roll_variation : hint_range(0.1, 5.0) = 1.8;
uniform float distort_intensity : hint_range(0.0, 0.2) = 0.05;
uniform float noise_opacity : hint_range(0.0, 1.0) = 0.4;
uniform float noise_speed = 5.0;
uniform float static_noise_intensity : hint_range(0.0, 1.0) = 0.06;
uniform float aberration : hint_range(-1.0, 1.0) = 0.03;
uniform float brightness = 1.4;
uniform bool discolor = true;
uniform float warp_amount : hint_range(0.0, 5.0) = 1.0;
uniform bool clip_warp = false;
uniform float vignette_intensity = 0.4;
uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5;
vec2 random(vec2 uv){
uv = vec2(dot(uv, vec2(127.1,311.7)), dot(uv, vec2(269.5,183.3)));
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
}
float noise(vec2 uv) {
vec2 uv_index = floor(uv);
vec2 uv_fract = fract(uv);
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
return mix(
mix(dot(random(uv_index + vec2(0.0,0.0)), uv_fract - vec2(0.0,0.0)),
dot(random(uv_index + vec2(1.0,0.0)), uv_fract - vec2(1.0,0.0)), blur.x),
mix(dot(random(uv_index + vec2(0.0,1.0)), uv_fract - vec2(0.0,1.0)),
dot(random(uv_index + vec2(1.0,1.0)), uv_fract - vec2(1.0,1.0)), blur.x),
blur.y
) * 0.5 + 0.5;
}
vec2 warp(vec2 uv){
vec2 delta = uv - 0.5;
float delta2 = dot(delta.xy, delta.xy);
float delta4 = delta2 * delta2;
float delta_offset = delta4 * warp_amount;
return uv + delta * delta_offset;
}
float border (vec2 uv){
float radius = min(warp_amount, 0.08);
radius = max(min(min(abs(radius * 2.0), abs(1.0)), abs(1.0)), 1e-5);
vec2 abs_uv = abs(uv * 2.0 - 1.0) - vec2(1.0, 1.0) + radius;
float dist = length(max(vec2(0.0), abs_uv)) / radius;
float square = smoothstep(0.96, 1.0, dist);
return clamp(1.0 - square, 0.0, 1.0);
}
float vignette(vec2 uv){
uv *= 1.0 - uv.xy;
float vignette = uv.x * uv.y * 15.0;
return pow(vignette, vignette_intensity * vignette_opacity);
}
void fragment()
{
vec2 uv = overlay ? warp(SCREEN_UV) : warp(UV);
vec2 text_uv = uv;
vec2 roll_uv = vec2(0.0);
float time = roll ? TIME : 0.0;
if (pixelate){
text_uv = ceil(uv * resolution) / resolution;
}
float roll_line = 0.0;
if (roll || noise_opacity > 0.0){
roll_line = smoothstep(0.3, 0.9, sin(uv.y * roll_size - (time * roll_speed)));
roll_line *= roll_line * smoothstep(0.3, 0.9, sin(uv.y * roll_size * roll_variation - (time * roll_speed * roll_variation)));
roll_uv = vec2((roll_line * distort_intensity * (1.-UV.x)), 0.0);
}
vec4 text;
if (roll){
text.r = texture(SCREEN_TEXTURE, text_uv + roll_uv * 0.8 + vec2(aberration, 0.0) * .1).r;
text.g = texture(SCREEN_TEXTURE, text_uv + roll_uv * 1.2 - vec2(aberration, 0.0) * .1).g;
text.b = texture(SCREEN_TEXTURE, text_uv + roll_uv).b;
text.a = 1.0;
} else {
text.r = texture(SCREEN_TEXTURE, text_uv + vec2(aberration, 0.0) * .1).r;
text.g = texture(SCREEN_TEXTURE, text_uv - vec2(aberration, 0.0) * .1).g;
text.b = texture(SCREEN_TEXTURE, text_uv).b;
text.a = 1.0;
}
float r = text.r;
float g = text.g;
float b = text.b;
uv = warp(UV);
if (grille_opacity > 0.0){
float g_r = smoothstep(0.85, 0.95, abs(sin(uv.x * (resolution.x * 3.14159265))));
r = mix(r, r * g_r, grille_opacity);
float g_g = smoothstep(0.85, 0.95, abs(sin(1.05 + uv.x * (resolution.x * 3.14159265))));
g = mix(g, g * g_g, grille_opacity);
float b_b = smoothstep(0.85, 0.95, abs(sin(2.1 + uv.x * (resolution.x * 3.14159265))));
b = mix(b, b * b_b, grille_opacity);
}
text.r = clamp(r * brightness, 0.0, 1.0);
text.g = clamp(g * brightness, 0.0, 1.0);
text.b = clamp(b * brightness, 0.0, 1.0);
float scanlines = 0.5;
if (scanlines_opacity > 0.0){
scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265))));
text.rgb = mix(text.rgb, text.rgb * vec3(scanlines), scanlines_opacity);
}
if (noise_opacity > 0.0){
float n = smoothstep(0.4, 0.5, noise(uv * vec2(2.0, 200.0) + vec2(10.0, (TIME * (noise_speed)))));
roll_line *= n * scanlines * clamp(random((ceil(uv * resolution) / resolution) + vec2(TIME * 0.8, 0.0)).x + 0.8, 0.0, 1.0);
text.rgb = clamp(mix(text.rgb, text.rgb + roll_line, noise_opacity), vec3(0.0), vec3(1.0));
}
if (static_noise_intensity > 0.0){
text.rgb += clamp(random((ceil(uv * resolution) / resolution) + fract(TIME)).x, 0.0, 1.0) * static_noise_intensity;
}
text.rgb *= border(uv);
text.rgb *= vignette(uv);
if (clip_warp){
text.a = border(uv);
}
if (discolor){
float saturation = 0.5;
float contrast = 1.2;
vec3 greyscale = vec3(text.r + text.g + text.b) / 3.;
text.rgb = mix(text.rgb, greyscale, saturation);
float midpoint = pow(0.5, 2.2);
text.rgb = (text.rgb - vec3(midpoint)) * contrast + midpoint;
}
COLOR = text;
}
+1
View File
@@ -0,0 +1 @@
uid://mbnolbvkgv2e
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://c74t2je247tit"
path="res://.godot/imported/blipSelect.wav-de258546cfca554e7f4e9bacf8531c7c.sample"
[deps]
source_file="res://assets/sounds/blipSelect.wav"
dest_files=["res://.godot/imported/blipSelect.wav-de258546cfca554e7f4e9bacf8531c7c.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://dt154t2aall5d"
path="res://.godot/imported/break.wav-db0dc963ca187eba995ad2567e0eabb2.sample"
[deps]
source_file="res://assets/sounds/break.wav"
dest_files=["res://.godot/imported/break.wav-db0dc963ca187eba995ad2567e0eabb2.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://b7gupw3d7sfho"
path="res://.godot/imported/explosion.wav-52e05e8d4b6600106c8dde082c90f915.sample"
[deps]
source_file="res://assets/sounds/explosion.wav"
dest_files=["res://.godot/imported/explosion.wav-52e05e8d4b6600106c8dde082c90f915.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://5b7eonllfufp"
path="res://.godot/imported/hitHurt.wav-f5c862522ab53cfcebe43a49f03467c5.sample"
[deps]
source_file="res://assets/sounds/hitHurt.wav"
dest_files=["res://.godot/imported/hitHurt.wav-f5c862522ab53cfcebe43a49f03467c5.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://cxub0psx0jhru"
path="res://.godot/imported/powerUp.wav-c3616ba4a45e0da0d67ac257bc645e97.sample"
[deps]
source_file="res://assets/sounds/powerUp.wav"
dest_files=["res://.godot/imported/powerUp.wav-c3616ba4a45e0da0d67ac257bc645e97.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://de4sr2qpjr1w2"
path="res://.godot/imported/shoot.wav-05f65b79fd05091fd1b8b7ddc844694a.sample"
[deps]
source_file="res://assets/sounds/shoot.wav"
dest_files=["res://.godot/imported/shoot.wav-05f65b79fd05091fd1b8b7ddc844694a.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://d3ok8rhcq4kmr"
path="res://.godot/imported/shootEnemy.wav-3f5ba9a06b9c4c7d11d05380df3970ab.sample"
[deps]
source_file="res://assets/sounds/shootEnemy.wav"
dest_files=["res://.godot/imported/shootEnemy.wav-3f5ba9a06b9c4c7d11d05380df3970ab.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
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>

After

Width:  |  Height:  |  Size: 995 B

+43
View File
@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c73c85sx637up"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
+77
View File
@@ -0,0 +1,77 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="countdown mayhem"
run/main_scene="uid://beviqs1f22d1c"
config/features=PackedStringArray("4.7", "Forward Plus")
boot_splash/bg_color=Color(0, 0, 0, 1)
boot_splash/stretch_mode=0
boot_splash/image="uid://dbhwfxaqgogb3"
config/icon="res://icon.svg"
[autoload]
Globals="*uid://ce6cecb4wunfi"
[display]
window/size/viewport_width=1200
window/size/viewport_height=800
window/stretch/mode="canvas_items"
[global_group]
playerHitbox=""
[input]
moveLeft={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
moveRight={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
]
}
moveUp={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
]
}
moveDown={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
shoot={
"deadzone": 0.2,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(165, 19),"global_position":Vector2(174, 67),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}
dash={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
]
}
[physics]
3d/physics_engine="Jolt Physics"
common/physics_interpolation=true
[rendering]
textures/canvas_textures/default_texture_filter=0
rendering_device/driver.windows="d3d12"
2d/snap/snap_2d_vertices_to_pixel=true
+201
View File
@@ -0,0 +1,201 @@
extends Node2D
@onready var spawntimer = $spawntimer
@onready var player = $Player
@onready var healthBar = $hud/healthbar
@onready var healthWhite = $hud/healthwhite
@onready var healthBg = $hud/healthbg
@onready var healthLabel = $hud/healthlabel
@onready var slowdown = $hud/slowdown
@onready var upgradesHUD = $hud/upgrades
@onready var ff = $hud/ff
@onready var beep = $hud/beep
@onready var beep2 = $hud/beep2
@onready var waveBg = $hud/wavebg
@onready var waveBar = $hud/wavebar
@onready var waveLabel = $hud/wavetimerlabel
@onready var waveCountLabel = $hud/wavelabel
@onready var tilemap = $navigation/TileMapLayer
#func _ready() -> void:
#
@onready var shooter = preload("res://assets/scenes/shooter.tscn")
@onready var upgradeUI = preload("res://assets/scenes/upgradeUI.tscn")
var healthLast = 0
var baked := false
var rooms = []
var ticks := 0
var tickToDel := 0
var currentWave := 1
var waveTimer := 15.0
var untilNewWave := 15.0
var upgradeUnlocksPerTick = {0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}
# up, down, left, right
#var roomRules := [
#[
#[0, 1, 2, 3, 4, 5, 6, 7, 10], [], [1, 2, 3, 5, 6, 7], [1, 2, 3, 4, 5, 6]
#],
#[
#
#],
#[
#
#],
#[
#
#]
#]
@onready var patterns: Array[TileMapPattern] = []
func wfc():
pass
func appendUpgrade(upgradeID : String):
print(upgradeUnlocksPerTick)
Globals.unlockedUpgrades[upgradeID] = Globals.unlockedUpgrades.get(upgradeID, 0) + 1
upgradeUnlocksPerTick[ticks].append(upgradeID)
#TextureRect.new().texture.resource_path
var modified := false
for icon in upgradesHUD.get_children():
if icon.upgradeID == upgradeID:
#icon.amount += 1
modified = true
break
if not modified:
var instantiated = upgradeUI.instantiate()
instantiated.get_node("texture").texture = load(str("res://assets/images/upgrades/", upgradeID, ".png"))
instantiated.timer = Globals.UPGRADE_TIMERSTART
instantiated.upgradeID = upgradeID
#instantiated.get_node("animations").play("init")
upgradesHUD.add_child(instantiated)
$newupgrade/title.text = upgradeID.capitalize().to_lower()
$newupgrade/icon.texture = load(str("res://assets/images/upgrades/", upgradeID, ".png"))
$newupgrade/text.text = Globals.upgradeDescriptions[upgradeID]
$newupgrade/animations.stop()
$newupgrade/animations.play("newUpgrade")
func _ready():
#appendUpgrade("rollback")
for i in range(11):
patterns.append(tilemap.tile_set.get_pattern(i))
for y in range(-10,10):
for x in range(-10,10):
if randi_range(1, 100) < 50:
tilemap.set_pattern(Vector2i(x * 5, y * 5), patterns[randi_range(0, 7)])
else:
tilemap.set_pattern(Vector2i(x * 5, y * 5), patterns[8])
#tilemap.set_pattern(Vector2i(-12, -12), patterns[9])
#tilemap.set_pattern(Vector2i(4, -12), patterns[9])
#tilemap.set_pattern(Vector2i(-12, 4), patterns[9])
#tilemap.set_pattern(Vector2i(4, 4), patterns[9])
$navigation.bake_navigation_polygon()
var timer := 0.0
func _process(delta: float) -> void:
waveTimer -= delta
if not baked:
timer += delta
$bakewait/Label.text = "baking collisions"
for i in range(int(timer)):
$bakewait/Label.text += "."
if timer >= 4: timer = 0
return
$bg.global_position = player.global_position - $bg.size / 2
timer += delta / player.speedScale
if player.transitioning:
beep.pitch_scale = 1
elif player.health < 15:
beep.pitch_scale = 1 + 2 - (player.health / 15) * 2
else:
beep.pitch_scale = 1
if player.newHealth == -1 and not player.transitioning:
player.health -= delta * player.speedScale * player.damageScale
if healthLast != int(player.health):
beep.play()
$hud/AnimationPlayer.play("secondBig")
healthBar.size.x += (healthBg.size.x * (int(player.health) / 30.0) - healthBar.size.x) * 2 * delta
waveBar.size.x += (waveBg.size.x * (int(waveTimer) / untilNewWave) - waveBar.size.x) * 3 * delta
#healthWhite.size.x = healthBg.size.x * (int(player.health + 1) / 30.0)
healthBar.color.r = 1 - (int(player.health) / 30.0)
healthBar.color.g = (int(player.health) / 30.0)
healthLabel.text = str(int(player.health), "s")
waveLabel.text = str(int(waveTimer), "s")
beep2.global_position = player.global_position
if waveTimer < 0:
untilNewWave *= 1.2
waveTimer = untilNewWave
currentWave += 1
spawntimer.wait_time *= 0.9
appendUpgrade(Globals.availableUpgrades.pick_random())
waveCountLabel.text = str("wave ", currentWave)
beep2.play()
healthLast = int(player.health)
slowdown.material.set_shader_parameter('saturation', player.grayscaleVal)
#a
func _on_navigation_bake_finished() -> void:
$bakewait.queue_free()
baked = true
timer = 0
func _on_spawntimer_timeout() -> void:
var newEnemy = shooter.instantiate()
newEnemy.health = 100 * pow(currentWave, 0.7)
newEnemy.maxHealth = 100 * pow(currentWave, 0.7)
newEnemy.wave = currentWave
newEnemy.global_position = player.global_position + Vector2(randi_range(-500, 500), randi_range(-100, 100))
get_node("enemies").add_child(newEnemy)
func _on_player_transition_start(seconds: Variant) -> void:
for enemy in get_node("enemies").get_children():
enemy.moveback(max(seconds, enemy.ticks / 20))
print("moveback1")
print(upgradeUnlocksPerTick, "\n", max(ticks - int(seconds) - 1,tickToDel))
for upgrade in upgradeUnlocksPerTick[max(ticks - int(seconds) - 1,tickToDel)]:
appendUpgrade(upgrade)
func _on_upgradetick_timeout() -> void:
ticks += 1
if upgradeUnlocksPerTick.get(ticks, [67]) == [67]: upgradeUnlocksPerTick[ticks] = []
if ticks > 60:
upgradeUnlocksPerTick.erase(tickToDel)
tickToDel += 1
+1
View File
@@ -0,0 +1 @@
uid://t7a5froys3xu
+628
View File
File diff suppressed because one or more lines are too long