added entire game (cuz it didnt use git before)
@@ -0,0 +1,4 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
@@ -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"]
|
||||
@@ -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"]
|
||||
@@ -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")
|
||||
}
|
||||
@@ -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
|
||||
|
After Width: | Height: | Size: 691 B |
@@ -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
|
||||
|
After Width: | Height: | Size: 747 B |
@@ -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
|
||||
|
After Width: | Height: | Size: 374 B |
@@ -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
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@@ -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
|
||||
|
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
|
||||
|
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
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -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
|
||||
@@ -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 |
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://cbv4pjad8jjud
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://p1r7cuviw46p
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://f512nblhdks4
|
||||
@@ -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)
|
||||
]
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://d2t5nkrsib24d
|
||||
@@ -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")
|
||||
@@ -0,0 +1 @@
|
||||
uid://f6863j28l3ua
|
||||
@@ -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
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
uid://de476q6oxds3o
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://dh4tox6b5ewbq
|
||||
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
uid://dpv5jt28axlpa
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://c8udxism1aby4
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://qtb3s2euymob
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://cknbo3ltp5mc3
|
||||
@@ -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")
|
||||
@@ -0,0 +1 @@
|
||||
uid://dms2mkhl6pbyo
|
||||
@@ -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"]
|
||||
@@ -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")
|
||||
@@ -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")
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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")
|
||||