added entire game (cuz it didnt use git before)

This commit is contained in:
2025-10-18 19:43:41 +02:00
parent 4dd71382d7
commit 171ff78876
63 changed files with 2684 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8
+38
View File
@@ -0,0 +1,38 @@
[gd_scene load_steps=5 format=3 uid="uid://bv6wpdjivdlf4"]
[ext_resource type="Texture2D" uid="uid://bwicnrb8alscg" path="res://assets/sprites/biscuit_o_tron.png" id="1_71t4g"]
[ext_resource type="Script" uid="uid://d2t5nkrsib24d" path="res://scripts/biscuit_o_tron.gd" id="1_a0ycn"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_a0ycn"]
size = Vector2(83, 150)
[sub_resource type="CircleShape2D" id="CircleShape2D_71t4g"]
radius = 26.172504
[node name="BiscuitOTron" type="StaticBody2D"]
script = ExtResource("1_a0ycn")
biscuit_increment = 0.15
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(-39.5, 10)
shape = SubResource("RectangleShape2D_a0ycn")
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(0.359375, 0.359375)
texture = ExtResource("1_71t4g")
[node name="ProgressBar" type="ProgressBar" parent="."]
offset_left = -76.0
offset_top = -90.0
offset_right = 77.0
offset_bottom = -72.0
theme_override_font_sizes/font_size = 10
[node name="Trigger" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Trigger"]
position = Vector2(42, 51)
shape = SubResource("CircleShape2D_71t4g")
[connection signal="body_entered" from="Trigger" to="." method="_on_trigger_body_entered"]
[connection signal="body_exited" from="Trigger" to="." method="_on_trigger_body_exited"]
+230
View File
@@ -0,0 +1,230 @@
[gd_scene load_steps=17 format=3 uid="uid://conq3w82acr56"]
[ext_resource type="Script" uid="uid://qtb3s2euymob" path="res://scripts/pig.gd" id="1_1u2wy"]
[ext_resource type="Texture2D" uid="uid://dkx5rhq6cd7fq" path="res://assets/sprites/pig.png" id="1_cdv7h"]
[ext_resource type="Texture2D" uid="uid://c273scpqwtvb6" path="res://assets/sprites/seagull_attack_0.png" id="3_vjcar"]
[ext_resource type="Texture2D" uid="uid://cad650jvyjm2b" path="res://assets/sprites/seagull_attack_1.png" id="4_3ly8g"]
[ext_resource type="Texture2D" uid="uid://cgrqjhigxfby" path="res://assets/sprites/seagull_fly_0.png" id="5_xx63w"]
[ext_resource type="Texture2D" uid="uid://dgvgknc7pbhwp" path="res://assets/sprites/seagull_fly_1.png" id="6_dq5nc"]
[sub_resource type="SpriteFrames" id="SpriteFrames_r0vjv"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_vjcar")
}, {
"duration": 1.0,
"texture": ExtResource("4_3ly8g")
}],
"loop": true,
"name": &"attack",
"speed": 6.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("5_xx63w")
}, {
"duration": 1.0,
"texture": ExtResource("6_dq5nc")
}],
"loop": true,
"name": &"fly",
"speed": 6.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_1u2wy"]
radius = 22.0
[sub_resource type="CircleShape2D" id="CircleShape2D_gbhn7"]
radius = 32.0
[sub_resource type="Animation" id="Animation_1u2wy"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PigSprite:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("PigSprite:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-5, -8)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("PigSprite:scale:x")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.313]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Seagull:scale:x")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.31299996]
}
[sub_resource type="Animation" id="Animation_gbhn7"]
resource_name = "flip"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PigSprite:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.313, -0.313]
}
[sub_resource type="Animation" id="Animation_cdv7h"]
resource_name = "walk"
length = 0.4
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PigSprite:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [0.0, -0.108210415, 0.108210415]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("PigSprite:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(-2, -3), Vector2(2, -3)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_gbhn7"]
_data = {
&"RESET": SubResource("Animation_1u2wy"),
&"flip": SubResource("Animation_gbhn7"),
&"walk": SubResource("Animation_cdv7h")
}
[sub_resource type="Animation" id="Animation_3ly8g"]
resource_name = "flip"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Seagull:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [0.31299996, -0.313]
}
[sub_resource type="Animation" id="Animation_vjcar"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Seagull:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.31299996]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xx63w"]
_data = {
&"RESET": SubResource("Animation_vjcar"),
&"flip": SubResource("Animation_3ly8g")
}
[node name="Pig" type="CharacterBody2D"]
collision_layer = 3
collision_mask = 3
script = ExtResource("1_1u2wy")
min_state_dur = 3.0
max_state_dur = 10.0
min_time_till_attack = 10.0
max_time_till_attack = 90.0
min_attack_duration = 20.0
max_attack_duration = 50.0
walk_speed = 150.0
panic_speed = 250.0
seagull_speed = 400.0
[node name="PigSprite" type="Sprite2D" parent="."]
position = Vector2(-5, -8)
scale = Vector2(0.313, 0.313)
texture = ExtResource("1_cdv7h")
[node name="SeagullAttackPos" type="Marker2D" parent="PigSprite"]
position = Vector2(3, -85)
[node name="Seagull" type="AnimatedSprite2D" parent="."]
visible = false
position = Vector2(-4.061, -34.605)
scale = Vector2(0.31299996, 0.313)
sprite_frames = SubResource("SpriteFrames_r0vjv")
animation = &"fly"
[node name="Collision" type="CollisionShape2D" parent="."]
position = Vector2(-7, -6)
shape = SubResource("CircleShape2D_1u2wy")
[node name="FeedZone" type="Area2D" parent="."]
[node name="FeedCollision" type="CollisionShape2D" parent="FeedZone"]
position = Vector2(-7, -6)
shape = SubResource("CircleShape2D_gbhn7")
[node name="PigAnimations" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_gbhn7")
}
[node name="SeagullAnimations" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_xx63w")
}
[connection signal="body_entered" from="FeedZone" to="." method="_on_feed_zone_body_entered"]
+95
View File
@@ -0,0 +1,95 @@
[gd_scene load_steps=7 format=3 uid="uid://dvaagwge5g1g"]
[ext_resource type="Script" uid="uid://cknbo3ltp5mc3" path="res://scripts/player_character.gd" id="1_r4hof"]
[ext_resource type="Texture2D" uid="uid://lfoeatk81tam" path="res://assets/sprites/farmer.png" id="2_r4hof"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_r4hof"]
size = Vector2(40, 80)
[sub_resource type="Animation" id="Animation_r4hof"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0.31249997, 0.3125)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scale:x")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.313]
}
[sub_resource type="Animation" id="Animation_irlf7"]
resource_name = "flip"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.313, -0.313]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qgghw"]
_data = {
&"RESET": SubResource("Animation_r4hof"),
&"flip": SubResource("Animation_irlf7")
}
[node name="PlayerCharacter" type="CharacterBody2D"]
script = ExtResource("1_r4hof")
speed = 300.0
sprint_speed = 600.0
jump_power = 7.0
coyote_time = 0.2
jump_buffer_timer = 0.2
aerial_dash_count = 1
vel_multiplier_after_dash = 0.5
dash_speed = 1200.0
dash_dur = 0.2
dash_cd = 0.5
gravity = 14.0
terminal_vel = 1000.0
max_health = 100.0
starting_health = 50.0
iframe_dur = 0.5
camera_type = 2
[node name="Collision" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_r4hof")
[node name="Sprite" type="Sprite2D" parent="."]
scale = Vector2(0.31249997, 0.3125)
texture = ExtResource("2_r4hof")
[node name="BiscuitPos" type="Marker2D" parent="Sprite"]
position = Vector2(99.20001, -83.2)
scale = Vector2(3.2000003, 3.1999998)
[node name="Camera" type="Camera2D" parent="."]
position_smoothing_enabled = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../Sprite")
libraries = {
&"": SubResource("AnimationLibrary_qgghw")
}
+25
View File
@@ -0,0 +1,25 @@
[gd_scene load_steps=5 format=3 uid="uid://coowerg56exy7"]
[ext_resource type="Texture2D" uid="uid://cgrqjhigxfby" path="res://assets/sprites/seagull_fly_0.png" id="1_dr8jw"]
[ext_resource type="Texture2D" uid="uid://dgvgknc7pbhwp" path="res://assets/sprites/seagull_fly_1.png" id="2_cef41"]
[ext_resource type="Script" uid="uid://dms2mkhl6pbyo" path="res://scripts/seagull_particle.gd" id="3_cef41"]
[sub_resource type="SpriteFrames" id="SpriteFrames_1sxsl"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("1_dr8jw")
}, {
"duration": 1.0,
"texture": ExtResource("2_cef41")
}],
"loop": true,
"name": &"default",
"speed": 6.0
}]
[node name="SeagullParticle" type="AnimatedSprite2D"]
scale = Vector2(0.313, 0.313)
sprite_frames = SubResource("SpriteFrames_1sxsl")
script = ExtResource("3_cef41")
speed = 400.0
Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

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

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

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

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bwicnrb8alscg"
path="res://.godot/imported/biscuit_o_tron.png-16bfe0f90b8951657ae064d452187d32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/biscuit_o_tron.png"
dest_files=["res://.godot/imported/biscuit_o_tron.png-16bfe0f90b8951657ae064d452187d32.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: 4.9 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lfoeatk81tam"
path="res://.godot/imported/farmer.png-221030e14fc8fbbae1811b2296103e93.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/farmer.png"
dest_files=["res://.godot/imported/farmer.png-221030e14fc8fbbae1811b2296103e93.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://dtvbg6shi4amx"
path="res://.godot/imported/fence.png-e139570dc79dce3978d1f9063bed8c49.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/fence.png"
dest_files=["res://.godot/imported/fence.png-e139570dc79dce3978d1f9063bed8c49.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: 29 KiB

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

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dkx5rhq6cd7fq"
path="res://.godot/imported/pig.png-285df2b68af2316ddc1e90ba9bff96e6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/pig.png"
dest_files=["res://.godot/imported/pig.png-285df2b68af2316ddc1e90ba9bff96e6.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: 2.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c273scpqwtvb6"
path="res://.godot/imported/seagull_attack_0.png-d6b6e03c893f420caf384a4624154864.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/seagull_attack_0.png"
dest_files=["res://.godot/imported/seagull_attack_0.png-d6b6e03c893f420caf384a4624154864.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: 2.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cad650jvyjm2b"
path="res://.godot/imported/seagull_attack_1.png-e98b65e75e685fc474d1e729e5b54398.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/seagull_attack_1.png"
dest_files=["res://.godot/imported/seagull_attack_1.png-e98b65e75e685fc474d1e729e5b54398.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.9 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgrqjhigxfby"
path="res://.godot/imported/seagull_fly_0.png-6185867c982d14badfdc8a21e29360d1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/seagull_fly_0.png"
dest_files=["res://.godot/imported/seagull_fly_0.png-6185867c982d14badfdc8a21e29360d1.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: 2.0 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dgvgknc7pbhwp"
path="res://.godot/imported/seagull_fly_1.png-002cb2f5eadb89cf248f0044212aafe6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/sprites/seagull_fly_1.png"
dest_files=["res://.godot/imported/seagull_fly_1.png-002cb2f5eadb89cf248f0044212aafe6.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
+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://cqbky705c0dgo"
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
+58
View File
@@ -0,0 +1,58 @@
extends Node
class Char:
# Children
var movement: LibCharMove.CharMovement
var camera: LibCharCam.CharCamera
# Health
var max_health: float
var iframe_dur: float
# Updating
var health: float = 1.0
var is_dead: bool = false
var iframe_timer: float = 0.0
var mouse_pos: Vector2 = Vector2.ZERO
var look_dir: Vector2 = Vector2.ZERO
var sprite_rotation: float = 0.0
func _init(
_movement: LibCharMove.CharMovement,
_camera: LibCharCam.CharCamera,
_max_health: float,
_starting_health: float,
_iframe_dur: float
):
movement = _movement
camera = _camera
max_health = _max_health
health = _starting_health
iframe_dur = _iframe_dur
func process(_look_dir: Vector2, _mouse_pos: Vector2, delta: float):
look_dir = _look_dir
mouse_pos = _mouse_pos
movement.process(look_dir, delta)
camera .process(delta)
if Input.is_key_pressed(KEY_H): heal(25); print(health)
if Input.is_key_pressed(KEY_K): damage(25); print(health)
func phys_process(delta: float):
movement.phys_process(delta)
camera .phys_process(delta)
if iframe_timer > 0.0: iframe_timer -= delta
func heal(a: float):
health += abs(a)
health = min(health, max_health)
is_dead = a > 0
func damage(a: float, ignore_iframes: bool = false, custom_iframes: float = -1):
if (iframe_timer <= 0 || ignore_iframes):
health -= abs(a)
if (custom_iframes > 0): iframe_timer = custom_iframes
else: iframe_timer = iframe_dur
health = max(0, health)
is_dead = a > 0
+1
View File
@@ -0,0 +1 @@
uid://cbv4pjad8jjud
+59
View File
@@ -0,0 +1,59 @@
extends Node
enum CameraType {
FIXED,
FIXED_NO_PAN,
FOLLOW,
CUSTOM
}
class CharCamera:
var camera_type: CameraType
var custom_cam_type: Callable = Callable()
var pos: Vector2 = Vector2.ZERO
var offset: Vector2 = Vector2.ZERO
var camera: Camera2D
func _init(
_camera: Camera2D,
_camera_type: CameraType,
_offset: Vector2 = Vector2.ZERO,
_pos: Vector2 = Vector2.ZERO
):
camera = _camera
camera_type = _camera_type
offset = _offset
pos = _pos
if camera_type == CameraType.FIXED_NO_PAN:
set_cam_smoothing(0.0)
func process(_delta: float):
pass
func phys_process(_delta: float):
if camera_type == CameraType.FIXED \
|| camera_type == CameraType.FIXED_NO_PAN:
camera.global_position = pos
elif camera_type == CameraType.FOLLOW:
camera.offset = offset
else:
camera.global_position = custom_cam_type.call()
func set_cam_smoothing(a: float):
camera.position_smoothing_speed = a
func make_current(): camera.make_current()
func teleport_camera(new_pos: Vector2):
var first_state = camera.position_smoothing_enabled
camera.position_smoothing_enabled = false
camera.global_position = new_pos
camera.position_smoothing_enabled = first_state
+1
View File
@@ -0,0 +1 @@
uid://p1r7cuviw46p
+228
View File
@@ -0,0 +1,228 @@
extends Node
enum MovementType {
PLATFORMER,
TOP_DOWN,
CUSTOM,
NONE
}
enum DashType {
KEYS,
HORIZONTAL_KEYS,
MOUSE,
CONTINOUS_MOUSE,
SPRINT,
NONE
}
class CharMovement:
var movement_type: MovementType
var custom_movement_func: Callable = Callable()
# EXTRA (that may or may not be added)
# Coyote time
# Input buffer
# Params
var speed: float
var sprint_speed: float
var jump_power: float
var extra_jumps: int
var coyote_time: float
var jump_buffer_time: float
var dash_type: DashType
var aerial_dash_count: int
var vel_multiplier_after_dash: float
var dash_speed: float
var dash_dur: float
var dash_cd: float
# Physics Params
var gravity: float
var terminal_vel: float
# Updating
var velocity: Vector2 = Vector2.ZERO
var is_grounded: bool = false
var can_jump: bool = true
var can_move: bool = true
var jumps: int = 0
var coyote_timer: float = 0.0
var jump_buffer_timer: float = 0.0
var is_dashing: bool = false
var is_dash_cd: bool = false
var dash_timer: float = 0.0
var dash_cd_timer: float = 0.0
var aerial_dashes: int = 0
var look_dir: Vector2 = Vector2.ZERO
var last_look_dir: Vector2 = Vector2.ZERO
var move_dir: Vector2 = Vector2.ZERO
var move_dir_x: float = 0.0
var last_move_dir: Vector2 = Vector2.ZERO
var last_move_dir_x: float = 0.0
var was_dash_pressed: bool = false
var was_jump_pressed: bool = false
var is_jump_held: bool = false
func _init(
_movement_type: MovementType,
_speed: float,
_sprint_speed: float,
_jump_power: float,
_extra_jumps: int,
_coyote_time: float,
_jump_buffer_time: float,
_dash_type: DashType,
_aerial_dash_count: int,
_vel_multiplier_after_dash: float,
_dash_speed: float,
_dash_dur: float,
_dash_cd: float,
_gravity: float,
_terminal_vel: float
):
movement_type = _movement_type
speed = _speed
sprint_speed = _sprint_speed
jump_power = _jump_power
extra_jumps = _extra_jumps
coyote_time = _coyote_time
dash_type = _dash_type
dash_speed = _dash_speed
dash_dur = _dash_dur
dash_cd = _dash_cd
gravity = _gravity
terminal_vel = _terminal_vel
# Long names
jump_buffer_time = _jump_buffer_time
aerial_dash_count = _aerial_dash_count
vel_multiplier_after_dash = _vel_multiplier_after_dash
func set_custom_movement_func(function: Callable):
custom_movement_func = function
func process(_look_dir: Vector2, _delta: float):
look_dir = _look_dir
move_dir = Input.get_vector("left", "right", "up", "down")
move_dir_x = Input.get_axis("left", "right")
was_dash_pressed = Input.is_action_just_pressed("dash")
was_jump_pressed = Input.is_action_just_pressed("jump")
is_jump_held = Input.is_action_pressed("jump")
if movement_type == MovementType.PLATFORMER:
was_jump_pressed = was_jump_pressed || Input.is_action_just_pressed("jump_alt")
is_jump_held = is_jump_held || Input.is_action_pressed("jump_alt")
func phys_process(delta: float):
move_logic(delta)
jump_logic(delta)
# dash overrides other movement
dash_logic(delta)
physics(delta)
func dash_logic(delta: float):
if is_grounded: aerial_dashes = 0
if was_dash_pressed && !is_dashing && !is_dash_cd:
if movement_type == MovementType.TOP_DOWN \
|| aerial_dashes < aerial_dash_count \
|| is_grounded:
is_dashing = true
last_look_dir = look_dir
last_move_dir = move_dir
last_move_dir_x = move_dir_x
aerial_dashes += 1
if is_dashing:
dash_timer += delta
dash_velocity(delta)
if dash_timer >= dash_dur:
is_dashing = false
is_dash_cd = true
dash_timer = 0.0
velocity *= vel_multiplier_after_dash
if is_dash_cd:
dash_cd_timer += delta
if dash_cd_timer >= dash_cd:
is_dash_cd = false
dash_cd_timer = 0.0
func dash_velocity(delta: float):
match dash_type:
DashType.KEYS: velocity = last_move_dir * dash_speed * delta
DashType.HORIZONTAL_KEYS: velocity.x = last_move_dir_x * dash_speed * delta
DashType.MOUSE: velocity = last_look_dir * dash_speed * delta
DashType.CONTINOUS_MOUSE: velocity = look_dir * dash_speed * delta
DashType.SPRINT: pass
DashType.NONE: pass
func move_logic(delta: float):
if can_move: movement_velocity(delta)
func movement_velocity(delta: float):
var final_speed = speed
if dash_type == DashType.SPRINT && Input.is_action_pressed("dash"):
final_speed = sprint_speed
match movement_type:
MovementType.TOP_DOWN: velocity = move_dir * final_speed * delta
MovementType.PLATFORMER: velocity.x = move_dir_x * final_speed * delta
MovementType.CUSTOM: custom_movement_func.call(delta)
MovementType.NONE: pass
func jump_logic(delta: float):
if is_grounded: jumps = 0
if !can_jump || movement_type != MovementType.PLATFORMER: return
# Spaghetti restaurant: $0.0 for 1 spaghett
if is_grounded && was_jump_pressed: jump()
elif coyote_timer < coyote_time \
&& was_jump_pressed && jumps == 0: jump()
elif jumps <= extra_jumps \
&& !is_grounded && was_jump_pressed: jump()
elif is_jump_held && is_grounded \
&& jump_buffer_timer < jump_buffer_time:
jumps = 0; jump()
if !is_grounded \
&& coyote_timer < coyote_time:
coyote_timer += delta
if is_jump_held && !is_grounded \
&& jump_buffer_timer < jump_buffer_time:
jump_buffer_timer += delta
if is_grounded:
coyote_timer = 0.0
if !is_jump_held: jump_buffer_timer = 0.0
func jump():
velocity.y = jump_power * -1.0
jumps += 1
func physics(delta: float):
if movement_type != MovementType.PLATFORMER: return
if !is_grounded:
velocity.y += gravity * delta
velocity.y = min(velocity.y, terminal_vel * delta)
else:
velocity.y = min(0, velocity.y)
+1
View File
@@ -0,0 +1 @@
uid://f512nblhdks4
+71
View File
@@ -0,0 +1,71 @@
; 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="LBS Game Jam 2025 (theme: british pigs)"
run/main_scene="uid://8rpm2uklud0j"
config/features=PackedStringArray("4.5", "Forward Plus")
config/icon="res://icon.svg"
[autoload]
LibChar="*res://libs/character.gd"
LibCharMove="*res://libs/character_movement.gd"
LibCharCam="*res://libs/character_camera.gd"
[display]
window/size/mode=2
window/size/resizable=false
window/size/borderless=true
[input]
up={
"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)
, 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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
down={
"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)
, 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":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
left={
"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)
, 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":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
right={
"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)
, 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":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
jump={
"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)
]
}
jump_alt={
"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)
, 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":4194320,"key_label":0,"unicode":0,"location":0,"echo":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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
+138
View File
@@ -0,0 +1,138 @@
[gd_scene load_steps=11 format=3 uid="uid://dhp0hi4qpiu4q"]
[ext_resource type="Texture2D" uid="uid://dske0kvup2tru" path="res://assets/sprites/grass.png" id="1_0wfyh"]
[ext_resource type="PackedScene" uid="uid://dvaagwge5g1g" path="res://actors/player_character.tscn" id="1_o5qli"]
[ext_resource type="Script" uid="uid://c8udxism1aby4" path="res://scripts/main_scene.gd" id="1_o6xl0"]
[ext_resource type="Texture2D" uid="uid://dtvbg6shi4amx" path="res://assets/sprites/fence.png" id="3_sugp2"]
[ext_resource type="PackedScene" uid="uid://bv6wpdjivdlf4" path="res://actors/biscuit_o_tron.tscn" id="4_jyhfs"]
[ext_resource type="PackedScene" uid="uid://cdy44cambk6ji" path="res://ui/key_sequence.tscn" id="4_tbgi4"]
[sub_resource type="CircleShape2D" id="CircleShape2D_tefeu"]
radius = 151.00331
[sub_resource type="RectangleShape2D" id="RectangleShape2D_sugp2"]
size = Vector2(1215, 20)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_tbgi4"]
size = Vector2(20, 648)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jyhfs"]
size = Vector2(20, 380)
[node name="Node2D" type="Node2D"]
script = ExtResource("1_o6xl0")
pig_amount = 5
[node name="GrassBackground" type="Sprite2D" parent="."]
texture_repeat = 2
scale = Vector2(0.187, 0.187)
texture = ExtResource("1_0wfyh")
region_enabled = true
region_rect = Rect2(0, 0, 6500, 4000)
[node name="PigBoundary" type="StaticBody2D" parent="."]
collision_layer = 2
collision_mask = 2
[node name="Collision" type="CollisionShape2D" parent="PigBoundary"]
position = Vector2(-188, 52)
shape = SubResource("CircleShape2D_tefeu")
[node name="SceneBounds" type="StaticBody2D" parent="."]
[node name="Top" type="CollisionShape2D" parent="SceneBounds"]
position = Vector2(0, -290)
shape = SubResource("RectangleShape2D_sugp2")
[node name="Bottom" type="CollisionShape2D" parent="SceneBounds"]
position = Vector2(0, 315)
shape = SubResource("RectangleShape2D_sugp2")
[node name="Left" type="CollisionShape2D" parent="SceneBounds"]
position = Vector2(-586, 0)
shape = SubResource("RectangleShape2D_tbgi4")
[node name="Right" type="CollisionShape2D" parent="SceneBounds"]
position = Vector2(565, 0)
shape = SubResource("RectangleShape2D_tbgi4")
[node name="Fences" type="StaticBody2D" parent="SceneBounds"]
[node name="FenceTop" type="Sprite2D" parent="SceneBounds/Fences"]
texture_repeat = 2
position = Vector2(235.99997, -314)
scale = Vector2(0.475, 0.252)
texture = ExtResource("3_sugp2")
region_enabled = true
region_rect = Rect2(12.217192, 0, 1667.438, 74.37027)
[node name="FenceBottom" type="Sprite2D" parent="SceneBounds/Fences"]
texture_repeat = 2
position = Vector2(236.00002, 313.99997)
scale = Vector2(0.475, 0.252)
texture = ExtResource("3_sugp2")
region_enabled = true
region_rect = Rect2(12.217192, 0, 1667.438, 74.37027)
[node name="FenceRight" type="Sprite2D" parent="SceneBounds/Fences"]
texture_repeat = 2
position = Vector2(566, 25)
rotation = -4.712389
scale = Vector2(0.475, 0.252)
texture = ExtResource("3_sugp2")
region_enabled = true
region_rect = Rect2(12.217192, 0, 1667.438, 74.37027)
[node name="FenceLeftTop" type="Sprite2D" parent="SceneBounds/Fences"]
texture_repeat = 2
position = Vector2(-152, -175.00002)
rotation = -1.5707964
scale = Vector2(0.475, 0.252)
texture = ExtResource("3_sugp2")
region_enabled = true
region_rect = Rect2(12.217192, 0, 763.44775, 74.37027)
[node name="FenceLeftBottom" type="Sprite2D" parent="SceneBounds/Fences"]
texture_repeat = 2
position = Vector2(-152, 286)
rotation = -1.5707964
scale = Vector2(0.475, 0.252)
texture = ExtResource("3_sugp2")
region_enabled = true
region_rect = Rect2(1.8075199, 0, 714.7975, 74.37027)
[node name="LeftTop" type="CollisionShape2D" parent="SceneBounds/Fences"]
position = Vector2(-151, -205)
shape = SubResource("RectangleShape2D_jyhfs")
[node name="LeftBottom" type="CollisionShape2D" parent="SceneBounds/Fences"]
position = Vector2(-151, 306)
shape = SubResource("RectangleShape2D_jyhfs")
[node name="BiscuitOTrons" type="StaticBody2D" parent="."]
[node name="BiscuitOTron" parent="BiscuitOTrons" instance=ExtResource("4_jyhfs")]
position = Vector2(-472, 195)
[node name="BiscuitOTron2" parent="BiscuitOTrons" instance=ExtResource("4_jyhfs")]
position = Vector2(-472, -13)
[node name="BiscuitOTron3" parent="BiscuitOTrons" instance=ExtResource("4_jyhfs")]
position = Vector2(-472, -216)
[node name="PlayerCharacter" parent="." instance=ExtResource("1_o5qli")]
movement_type = 2
speed = 2.0
dash_type = 5
camera_type = 0
max_biscuits = 3
[node name="KeySequence" parent="PlayerCharacter" instance=ExtResource("4_tbgi4")]
offset_top = -100.0
offset_bottom = -100.0
[node name="FarmTopLeft" type="Marker2D" parent="."]
position = Vector2(65, -258)
[node name="FarmBottomRight" type="Marker2D" parent="."]
position = Vector2(497, 252)
+47
View File
@@ -0,0 +1,47 @@
extends StaticBody2D
@export var biscuit_increment: float
@onready var sequence: Array[int] = []
@onready var is_active: bool = false
@onready var biscuit_fraction: float = 0.0
var hud: Panel
var player: CharacterBody2D
func _process(delta: float):
$ProgressBar.value = biscuit_fraction * 100
if biscuit_fraction < 1.0:
biscuit_fraction += biscuit_increment * delta
biscuit_fraction = min(biscuit_fraction, 1.0)
if not hud: return
if hud.is_fully_completed() && is_active:
sequence = hud.generate_sequence(5)
hud.set_sequence(sequence)
biscuit_fraction = 0.0
hud.hide()
player.try_add_biscuit()
if is_active && biscuit_fraction >= 1.0: hud.show()
if sequence.is_empty():
sequence = hud.generate_sequence(5)
hud.set_sequence(sequence)
func _on_trigger_body_entered(body: Node2D):
if body is not CharacterBody2D: return
is_active = true
if not hud: hud = body.get_node("KeySequence")
if not player: player = body
func _on_trigger_body_exited(body: Node2D):
if body is not CharacterBody2D: return
is_active = false
hud.hide()
+1
View File
@@ -0,0 +1 @@
uid://d2t5nkrsib24d
+23
View File
@@ -0,0 +1,23 @@
extends Control
var saved_pigs: int
@onready var has_reddend = false
func _ready():
if not saved_pigs: saved_pigs = 0
$Saved.text = "At least you saved them %s times" % saved_pigs
if saved_pigs == 0: $Saved.text = "You couldn't even save one abduction?"
$AnimationPlayer.play("fade_in")
func _process(_delta: float):
if !$AnimationPlayer.current_animation == "fade_in" \
&& saved_pigs == 0 && !has_reddend:
$AnimationPlayer.play("redden")
has_reddend = true
func _on_menu_button_pressed() -> void:
get_tree().change_scene_to_file("res://ui/main_menu.tscn")
+1
View File
@@ -0,0 +1 @@
uid://f6863j28l3ua
+32
View File
@@ -0,0 +1,32 @@
extends Control
@export var hp_animation_dur: float
var healthbar_full_size: Vector2
var hp_value: Panel
var hp_tween: Tween
func _ready():
healthbar_full_size = $HealthbarBase/HealthbarValue.size
hp_value = $HealthbarBase/HealthbarValue
## The amount is a value between 0..1
func set_health(a: float):
var f_pos: float = healthbar_full_size.y - (a * hp_value.size.y)
var user_favor: float = sin(a * PI) * 10
f_pos -= user_favor
f_pos = clamp(f_pos, 0, healthbar_full_size.y)
if hp_value.position.y == f_pos: return;
if hp_tween && hp_tween.is_running(): hp_tween.kill()
hp_tween = create_tween()
hp_tween.set_trans(Tween.TRANS_LINEAR)
hp_tween.tween_property(
hp_value,
"position:y",
f_pos,
hp_animation_dur
)
+1
View File
@@ -0,0 +1 @@
uid://de476q6oxds3o
+105
View File
@@ -0,0 +1,105 @@
extends Panel
enum Directions {
UP,
DOWN,
LEFT,
RIGHT
}
var arrow = preload("res://assets/sprites/arrow.png")
var arrow_completed = preload("res://assets/sprites/arrow_green.png")
@onready var sequence: Array[Directions] = []
@onready var completed: Array[bool] = []
var arrow_el: TextureRect
func _ready():
arrow_el = TextureRect.new()
arrow_el.size = Vector2(40.0, 40.0)
arrow_el.pivot_offset = arrow_el.size / 2
arrow_el.texture = arrow
arrow_el.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
func set_sequence(new_sequence: Array[Directions]):
sequence = new_sequence
reset_completed()
render_sequence()
func add_to_sequence(direction: Directions):
sequence.append(direction)
render_sequence()
func reset_sequence():
sequence = []
reset_sequence_render()
func reset_sequence_render():
for el in self.get_children():
self.remove_child(el)
func render_sequence():
reset_sequence_render()
for i in range(sequence.size()):
var dir = sequence[i]
var n_el = arrow_el.duplicate()
n_el.position.x = (i - sequence.size() / 2.0) * n_el.size.x
var rot_deg = 0.0
match dir:
Directions.UP: rot_deg = 0.0
Directions.RIGHT: rot_deg = 90.0
Directions.DOWN: rot_deg = 180.0
Directions.LEFT: rot_deg = 270.0
n_el.rotation = deg_to_rad(rot_deg)
if completed[i]: n_el.texture = arrow_completed
self.add_child(n_el)
func random_direction() -> Directions:
var dir = randi_range(0, Directions.keys().size() - 1)
return Directions.values()[dir]
func generate_sequence(length: int) -> Array[Directions]:
var new_sequence: Array[Directions] = []
for i in range(length):
new_sequence.append(random_direction())
return new_sequence
func try_complete_next(direction: Directions):
if !self.visible: return
var next = completed.find(false)
if direction != sequence[next]: reset_completed()
else: completed[next] = true
render_sequence()
func is_fully_completed() -> bool:
return false not in completed && !completed.is_empty()
func reset_completed():
completed = []
completed.resize(sequence.size())
completed.fill(false)
+1
View File
@@ -0,0 +1 @@
uid://dh4tox6b5ewbq
+47
View File
@@ -0,0 +1,47 @@
extends Control
var seagull = preload("res://actors/seagull_particle.tscn")
@export var square_rot: float
var play_button: Button
var quit_button: Button
var credit_button: Button
@onready var times_quit: int = 0
@onready var times_credited: int = 0
func _ready():
play_button = $InteractiblesContainer/ButtonsContainer/PlayButton
quit_button = $InteractiblesContainer/ButtonsContainer/QuitButton
credit_button = $InteractiblesContainer/ButtonsContainer/CreditsButton
func _on_play_button_pressed() -> void:
get_tree().change_scene_to_file("res://scenes/main.tscn")
func _on_quit_button_pressed() -> void:
quit_button.text = "No."
times_quit += 1
if times_quit == 10:
quit_button.disabled = true
quit_button.text = "This game is too\nSuper Epic Cool Awesome Stuff\nfor you to leave."
func _process(delta: float):
$BgSquare.rotation += square_rot * delta
var AVG_TIME_FOR_SEAGULL: float = 0.5
var should_seagull: bool = randf() < delta / AVG_TIME_FOR_SEAGULL
if should_seagull:
var s = seagull.instantiate()
$Seagulls.add_child(s)
func _on_credits_button_pressed() -> void:
credit_button.text = "Are you stupid?"
times_quit += 1
if times_quit == 3:
credit_button.disabled = true
credit_button.text = "Byte Dice"
+1
View File
@@ -0,0 +1 @@
uid://dpv5jt28axlpa
+35
View File
@@ -0,0 +1,35 @@
extends Node2D
var pig = preload("res://actors/pig.tscn")
var game_over = preload("res://ui/game_over.tscn")
@export var pig_amount: int
@onready var pigs_abducted: int = 0
@onready var pigs_saved: int = 0
func _ready():
get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_VIEWPORT
for _i in range(pig_amount):
var p = pig.instantiate()
p.global_position = Vector2(
randf_range($FarmTopLeft.global_position.x, $FarmBottomRight.global_position.x),
randf_range($FarmTopLeft.global_position.y, $FarmBottomRight.global_position.y)
)
self.add_child(p)
func _process(_delta: float):
if pigs_abducted > 0:
var g = game_over.instantiate()
g.saved_pigs = pigs_saved
var tree = get_tree()
tree.root.add_child(g)
var old_scene = tree.current_scene
tree.current_scene = g
old_scene.free()
+1
View File
@@ -0,0 +1 @@
uid://c8udxism1aby4
+174
View File
@@ -0,0 +1,174 @@
extends CharacterBody2D
enum States {
WALKING,
PANIC,
WAITING
}
@export var min_state_dur: float
@export var max_state_dur: float
@export var min_time_till_attack: float
@export var max_time_till_attack: float
@export var min_attack_duration: float
@export var max_attack_duration: float
@export var walk_speed: float
@export var panic_speed: float
@export var seagull_speed: float
@onready var is_attacked: bool = false # I shouldve made these an enum tbh
@onready var attack_approaching: bool = false
@onready var is_retreating: bool = false
@onready var walk_dir = Vector2.ZERO
@onready var is_flipped: bool = false
@onready var seagull_is_flipped: bool = false
@onready var seagull_dir = Vector2.ZERO
@onready var seagull_home_pos = Vector2.ZERO
@onready var received_biscuit: bool = false
var time_till_attacked: float
var time_till_abducted: float
var current_state: States
var state_duration: float
func _ready():
time_till_attacked = randf_range(min_time_till_attack, max_time_till_attack)
change_walk_dir()
new_state()
func _physics_process(delta: float):
if !is_attacked:
match current_state:
States.WALKING: act_walking(delta)
States.PANIC: act_walking(delta, true)
States.WAITING:
if !$PigAnimations.current_animation == "flip":
$PigAnimations.stop()
else:
if time_till_abducted > 0: act_walking(delta, true)
else: pass
attack_logic(delta)
if walk_dir.x < 0 && !is_flipped:
$PigAnimations.play("flip")
is_flipped = true
elif walk_dir.x > 0 && is_flipped:
$PigAnimations.play_backwards("flip")
is_flipped = false
state_duration -= delta
if time_till_attacked > 0: time_till_attacked -= delta
if state_duration <= 0.0: new_state()
func new_state():
state_duration = randf_range(min_state_dur, max_state_dur)
var next_state = randi_range(0, States.size() - 1)
if next_state == States.PANIC && randf() < 0.95:
next_state = States.WALKING if randi_range(0, 1) == 0 else States.WAITING
current_state = States.values()[next_state]
func act_walking(delta: float, panicked: bool = false):
var average_time_to_switch_dir: float = 2.0 if !panicked else 0.2
var should_switch_dir = randf() < delta / average_time_to_switch_dir
if should_switch_dir: change_walk_dir()
self.velocity = walk_dir * (walk_speed if !panicked else panic_speed)
self.move_and_slide()
if !$PigAnimations.current_animation == "flip":
$PigAnimations.play("walk")
func change_walk_dir():
walk_dir = Vector2(
randf_range(-1, 1),
randf_range(-1, 1)
).normalized()
func attack_logic(delta: float):
if time_till_attacked <= 0.0 && !(is_attacked || attack_approaching || is_retreating):
attack_approaching = true
seagull_home_pos = Vector2(
randf_range(-3000.0, 3000.0),
randf_range(-1920.0, -2500.0)
)
$Seagull.global_position = seagull_home_pos
$Seagull.visible = true
$Seagull.play("fly")
attack_approaching_logic(delta)
is_attacked_logic(delta)
retreating_logic(delta)
if seagull_dir.x < 0 && !seagull_is_flipped:
$SeagullAnimations.play("flip")
seagull_is_flipped = true
elif seagull_dir.x > 0 && seagull_is_flipped:
$SeagullAnimations.play_backwards("flip")
seagull_is_flipped = false
func attack_approaching_logic(delta: float):
if !attack_approaching: return
seagull_dir = ($PigSprite/SeagullAttackPos.global_position - $Seagull.global_position).normalized()
$Seagull.global_position += seagull_dir * seagull_speed * delta
var dist = $Seagull.global_position.distance_to($PigSprite/SeagullAttackPos.global_position)
if dist < 15.0:
$Seagull.global_position = $PigSprite/SeagullAttackPos.global_position
attack_approaching = false
is_attacked = true
$Seagull.play("attack")
if !$PigAnimations.current_animation == "flip": $PigAnimations.stop()
time_till_abducted = randf_range(min_attack_duration, max_attack_duration)
func is_attacked_logic(delta: float):
if !is_attacked: return
if time_till_abducted <= 0.0:
seagull_dir = (seagull_home_pos - $Seagull.global_position).normalized()
self.global_position += seagull_dir * seagull_speed * delta
$PigSprite.self_modulate.a = 0.5
$Collision.disabled = true
if self.global_position.y < -get_viewport_rect().size.y - 300.0:
get_tree().current_scene.pigs_abducted += 1
get_parent().remove_child(self)
if received_biscuit:
is_attacked = false
received_biscuit = false
is_retreating = true
get_tree().current_scene.pigs_saved += 1
time_till_abducted -= delta
func retreating_logic(delta: float):
if !is_retreating: return
seagull_dir = (seagull_home_pos - $Seagull.global_position).normalized()
$Seagull.global_position += seagull_dir * seagull_speed * delta
if $Seagull.global_position.y < -get_viewport_rect().size.y - 300.0:
is_retreating = false
$Seagull.global_position = seagull_home_pos
func _on_feed_zone_body_entered(body: Node2D):
if body is not CharacterBody2D: return
if body.name != "PlayerCharacter": return
if is_attacked && body.biscuit_count > 0 && time_till_abducted > 0.0:
received_biscuit = true
body.remove_biscuit()
+1
View File
@@ -0,0 +1 @@
uid://qtb3s2euymob
+160
View File
@@ -0,0 +1,160 @@
extends CharacterBody2D
var biscuit = preload("res://assets/sprites/biscuit.png")
@export_group("Movement")
@export var movement_type: LibCharMove.MovementType
@export_subgroup("Moving")
@export var speed: float
@export var sprint_speed: float
@export_subgroup("Jumping")
@export var jump_power: float
@export var extra_jumps: int
@export var coyote_time: float
@export var jump_buffer_timer: float
@export_subgroup("Dashing")
@export var dash_type: LibCharMove.DashType
@export var aerial_dash_count: int
@export var vel_multiplier_after_dash: float
@export var dash_speed: float
@export var dash_dur: float
@export var dash_cd: float
@export_subgroup("Physics")
@export var gravity: float
@export var terminal_vel: float
@export_group("Generic")
@export_subgroup("Health")
@export var max_health: float
@export var starting_health: float
@export var iframe_dur: float
@export_subgroup("Camera")
@export var camera_type: LibCharCam.CameraType
@export var camera_offset: Vector2
@export_group("Biscuit")
@export var max_biscuits: int
var character: LibChar.Char
var hud: Control
@onready var is_flipped: bool = false
@onready var biscuit_count: int = 0
func _ready():
floor_max_angle = deg_to_rad(40.0)
match movement_type:
LibCharMove.MovementType.PLATFORMER:
motion_mode = CharacterBody2D.MOTION_MODE_GROUNDED
LibCharMove.MovementType.TOP_DOWN:
motion_mode = CharacterBody2D.MOTION_MODE_FLOATING
# custom movement so we do this
motion_mode = CharacterBody2D.MOTION_MODE_GROUNDED
var char_movement = LibCharMove.CharMovement.new(
movement_type,
speed, sprint_speed,
jump_power, extra_jumps, coyote_time, jump_buffer_timer,
dash_type, aerial_dash_count, vel_multiplier_after_dash,
dash_speed, dash_dur, dash_cd,
gravity, terminal_vel
)
var char_camera = LibCharCam.CharCamera.new(
$Camera,
camera_type,
camera_offset,
Vector2.ZERO
)
character = LibChar.Char.new(
char_movement, char_camera,
max_health, starting_health, iframe_dur
)
character.movement.custom_movement_func = move_logic
character.camera.make_current()
character.camera.pos = $Camera.global_position
var mouse_pos: Vector2 = Vector2.ZERO
var look_dir: Vector2 = Vector2.ZERO
func _process(delta: float):
mouse_pos = get_viewport().get_mouse_position()
look_dir = (mouse_pos - self.global_position).normalized()
character.process(look_dir, mouse_pos, delta)
sequence_logic()
func _physics_process(delta: float):
character.phys_process(delta)
# move_and_slide() automatically computes delta :(
velocity = character.movement.velocity / delta
move_and_slide()
character.movement.is_grounded = is_on_floor()
func move_logic(delta: float):
var dir_vector = (mouse_pos - (get_viewport_rect().size / 2)) - self.global_position
character.movement.velocity = dir_vector * character.movement.speed * delta
if dir_vector.x < 0 && !is_flipped:
$AnimationPlayer.play("flip")
is_flipped = true
if dir_vector.x > 0 && is_flipped:
$AnimationPlayer.play_backwards("flip")
is_flipped = false
func sequence_logic():
var dir: int = -1
if Input.is_action_just_pressed("up"):
dir = $KeySequence.Directions.UP
elif Input.is_action_just_pressed("down"):
dir = $KeySequence.Directions.DOWN
elif Input.is_action_just_pressed("left"):
dir = $KeySequence.Directions.LEFT
elif Input.is_action_just_pressed("right"):
dir = $KeySequence.Directions.RIGHT
if dir != -1: $KeySequence.try_complete_next(dir)
func reset_biscuits():
for el in $Sprite/BiscuitPos.get_children():
$Sprite/BiscuitPos.remove_child(el)
func render_biscuits():
const BISCUIT_OFFSET = 5.0
reset_biscuits()
for i in range(biscuit_count):
var offset = BISCUIT_OFFSET
if i == 0: offset = 0
var b = Sprite2D.new()
b.texture = biscuit
b.position.y = -i * (biscuit.get_height() - offset)
$Sprite/BiscuitPos.add_child(b)
func try_add_biscuit() -> bool:
if biscuit_count >= max_biscuits: return false
biscuit_count += 1
render_biscuits()
return true
func remove_biscuit():
if biscuit_count <= 0: return
biscuit_count -= 1
render_biscuits()
+1
View File
@@ -0,0 +1 @@
uid://cknbo3ltp5mc3
+27
View File
@@ -0,0 +1,27 @@
extends AnimatedSprite2D
@export var speed: float
var dir: Vector2
@onready var pos = Vector2(
-100.0 if randi_range(0, 1) else get_viewport_rect().size.x,
randf_range(0, 1)
)
func _ready():
dir = Vector2(
randf_range(0, 1) * (-1 if pos.x > 0 else 1),
randf_range(-0.2, 0.2)
).normalized()
pos.y *= get_viewport_rect().size.y
self.global_position = pos
if dir.x < 0: self.flip_h = true
func _process(delta: float):
self.global_position += dir * speed * delta
self.play("default")
+1
View File
@@ -0,0 +1 @@
uid://dms2mkhl6pbyo
+286
View File
@@ -0,0 +1,286 @@
[gd_scene load_steps=7 format=3 uid="uid://bnm66u54kj3xf"]
[ext_resource type="Script" uid="uid://f6863j28l3ua" path="res://scripts/game_over.gd" id="1_oo8kp"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u0541"]
bg_color = Color(0, 0, 0, 1)
[sub_resource type="Animation" id="Animation_5eixk"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Panel:theme_override_styles/panel:bg_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0, 0, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("YouDied:modulate:a")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Pathetic:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_oo8kp"]
resource_name = "fade_in"
length = 14.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Panel:theme_override_styles/panel:bg_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(3.0333333, 6.0333333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0, 0, 1), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("YouDied:modulate:a")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(7.0333333, 8.033333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Cause:modulate:a")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(9.033333, 10.033333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Reason:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(11.033333, 12.033333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("MenuButton:modulate:a")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(13, 14),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Saved:modulate:a")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(13, 14),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
[sub_resource type="Animation" id="Animation_j1fe5"]
resource_name = "redden"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Pathetic:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Panel:theme_override_styles/panel:bg_color")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [Color(1, 1, 1, 1), Color(0.4117647, 0, 0, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_j1fe5"]
_data = {
&"RESET": SubResource("Animation_5eixk"),
&"fade_in": SubResource("Animation_oo8kp"),
&"redden": SubResource("Animation_j1fe5")
}
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_oo8kp")
[node name="Panel" type="Panel" parent="."]
layout_mode = 0
offset_right = 1152.0
offset_bottom = 648.0
theme_override_styles/panel = SubResource("StyleBoxFlat_u0541")
[node name="YouDied" type="Label" parent="."]
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -180.0
offset_top = -260.0
offset_right = 181.0
offset_bottom = -185.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 41
text = "You died"
horizontal_alignment = 1
[node name="Cause" type="Label" parent="."]
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -201.0
offset_top = -191.0
offset_right = 203.0
offset_bottom = -74.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 41
text = "Cause: depressesion"
horizontal_alignment = 1
[node name="Reason" type="Label" parent="."]
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -460.0
offset_top = -116.0
offset_right = 462.0
offset_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 41
text = "Reason: one of your beloved pigs got abducted"
horizontal_alignment = 1
[node name="MenuButton" type="Button" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -74.0
offset_top = -150.0
offset_right = 76.0
offset_bottom = -107.0
grow_horizontal = 2
grow_vertical = 0
theme_override_font_sizes/font_size = 25
text = "Go to menu"
[node name="Saved" type="Label" parent="."]
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -102.0
offset_top = -71.0
offset_right = 103.0
offset_bottom = -48.0
grow_horizontal = 2
grow_vertical = 0
theme_override_colors/font_color = Color(0, 0, 0, 1)
text = "Skibidi toilet template text"
[node name="Pathetic" type="Label" parent="."]
visible = false
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -101.0
offset_top = -49.0
offset_right = 104.0
offset_bottom = -26.0
grow_horizontal = 2
grow_vertical = 0
theme_override_colors/font_color = Color(0, 0, 0, 1)
text = "Pathetic."
horizontal_alignment = 1
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_j1fe5")
}
[connection signal="pressed" from="MenuButton" to="." method="_on_menu_button_pressed"]
+47
View File
@@ -0,0 +1,47 @@
[gd_scene load_steps=4 format=3 uid="uid://dbgelckky2v52"]
[ext_resource type="Script" uid="uid://de476q6oxds3o" path="res://scripts/info_hud.gd" id="1_muwf5"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hiti4"]
bg_color = Color(1, 1, 1, 1)
corner_radius_top_left = 50
corner_radius_top_right = 50
corner_radius_bottom_right = 50
corner_radius_bottom_left = 50
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_muwf5"]
bg_color = Color(0.94009703, 0.3102313, 0.7501747, 1)
corner_radius_top_left = 50
corner_radius_top_right = 50
corner_radius_bottom_right = 50
corner_radius_bottom_left = 50
[node name="InfoHud" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_muwf5")
hp_animation_dur = 0.1
[node name="HealthbarBase" type="Panel" parent="."]
clip_children = 2
clip_contents = true
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 25.0
offset_top = -265.0
offset_right = 47.0
offset_bottom = -25.0
grow_vertical = 0
theme_override_styles/panel = SubResource("StyleBoxFlat_hiti4")
[node name="HealthbarValue" type="Panel" parent="HealthbarBase"]
layout_mode = 0
offset_right = 22.0
offset_bottom = 240.0
theme_override_styles/panel = SubResource("StyleBoxFlat_muwf5")
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://cdy44cambk6ji"]
[ext_resource type="Script" uid="uid://dh4tox6b5ewbq" path="res://scripts/key_sequence.gd" id="1_alcnd"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wkagm"]
[node name="KeySequence" type="Panel"]
visible = false
theme_override_styles/panel = SubResource("StyleBoxEmpty_wkagm")
script = ExtResource("1_alcnd")
+120
View File
@@ -0,0 +1,120 @@
[gd_scene load_steps=8 format=3 uid="uid://8rpm2uklud0j"]
[ext_resource type="LabelSettings" uid="uid://ch4qnno2euv16" path="res://ui/styles/font_gost_commo.tres" id="1_0dkrt"]
[ext_resource type="Script" uid="uid://dpv5jt28axlpa" path="res://scripts/main_menu.gd" id="1_wk0pr"]
[ext_resource type="Texture2D" uid="uid://dkx5rhq6cd7fq" path="res://assets/sprites/pig.png" id="2_rmr83"]
[ext_resource type="Theme" uid="uid://78ymohvmckry" path="res://ui/styles/theme_menu_buttons.tres" id="2_wk0pr"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0dkrt"]
bg_color = Color(7.670838e-08, 0.11997212, 0.012806023, 1)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rmr83"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_8uxxo"]
texture = ExtResource("2_rmr83")
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_wk0pr")
square_rot = 0.15
[node name="Background" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_0dkrt")
[node name="Seagulls" type="Panel" parent="."]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
theme_override_styles/panel = SubResource("StyleBoxEmpty_rmr83")
[node name="BgSquare" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -246.0
offset_top = -246.0
offset_right = 246.0
offset_bottom = 246.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(246, 246)
theme_override_styles/panel = SubResource("StyleBoxTexture_8uxxo")
[node name="InteractiblesContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -310.0
offset_top = -36.5
offset_right = 310.0
offset_bottom = 36.5
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 80
[node name="Label" type="Label" parent="InteractiblesContainer"]
layout_mode = 2
text = "Super Epic Cool Awesome Stuff:
The Game"
label_settings = ExtResource("1_0dkrt")
horizontal_alignment = 1
[node name="ButtonsContainer" type="VBoxContainer" parent="InteractiblesContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="PlayButton" type="Button" parent="InteractiblesContainer/ButtonsContainer"]
custom_minimum_size = Vector2(175, 60)
layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme = ExtResource("2_wk0pr")
text = "Play"
[node name="CreditsButton" type="Button" parent="InteractiblesContainer/ButtonsContainer"]
custom_minimum_size = Vector2(175, 60)
layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme = ExtResource("2_wk0pr")
text = "Credits"
[node name="QuitButton" type="Button" parent="InteractiblesContainer/ButtonsContainer"]
custom_minimum_size = Vector2(175, 60)
layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme = ExtResource("2_wk0pr")
text = "Quit"
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_top = -49.0
offset_right = 261.0
grow_vertical = 0
text = "Made for the LBS 2025 Game Jam.
Theme: \"British Pigs\""
[connection signal="pressed" from="InteractiblesContainer/ButtonsContainer/PlayButton" to="." method="_on_play_button_pressed"]
[connection signal="pressed" from="InteractiblesContainer/ButtonsContainer/CreditsButton" to="." method="_on_credits_button_pressed"]
[connection signal="pressed" from="InteractiblesContainer/ButtonsContainer/QuitButton" to="." method="_on_quit_button_pressed"]
+10
View File
@@ -0,0 +1,10 @@
[gd_resource type="LabelSettings" load_steps=2 format=3 uid="uid://ch4qnno2euv16"]
[sub_resource type="SystemFont" id="SystemFont_suxjm"]
font_names = PackedStringArray("GOST Common")
[resource]
font = SubResource("SystemFont_suxjm")
font_size = 50
font_color = Color(0.4156184, 0.57489175, 1, 1)
outline_size = 10
+79
View File
@@ -0,0 +1,79 @@
[gd_resource type="Theme" load_steps=7 format=3 uid="uid://78ymohvmckry"]
[sub_resource type="SystemFont" id="SystemFont_kefkl"]
font_names = PackedStringArray("GOST Common")
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sdpor"]
bg_color = Color(0.13558733, 1.0203719e-05, 0.5757747, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(0.7372549, 0.7372549, 0.7372549, 1)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nlon4"]
bg_color = Color(0.43050313, 0.5708193, 1, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ghxax"]
bg_color = Color(0.5598542, 0.6732296, 1, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2m0qt"]
bg_color = Color(0.45369804, 0.56404567, 1, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kr5ue"]
bg_color = Color(0.38866094, 0.44743973, 0.99797183, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[resource]
Button/colors/font_color = Color(1, 1, 1, 1)
Button/colors/font_disabled_color = Color(0.737193, 0.7371929, 0.7371929, 1)
Button/colors/font_focus_color = Color(1, 1, 1, 1)
Button/colors/font_hover_color = Color(1, 1, 1, 1)
Button/colors/font_hover_pressed_color = Color(1, 1, 1, 1)
Button/colors/font_pressed_color = Color(1, 1, 1, 1)
Button/font_sizes/font_size = 30
Button/fonts/font = SubResource("SystemFont_kefkl")
Button/styles/disabled = SubResource("StyleBoxFlat_sdpor")
Button/styles/focus = SubResource("StyleBoxFlat_nlon4")
Button/styles/hover = SubResource("StyleBoxFlat_ghxax")
Button/styles/normal = SubResource("StyleBoxFlat_2m0qt")
Button/styles/pressed = SubResource("StyleBoxFlat_kr5ue")