summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Chicken.gd64
-rw-r--r--Chicken.pngbin0 -> 2649 bytes
-rw-r--r--Chicken.png.import37
-rw-r--r--Chicken.tscn605
-rw-r--r--ChickenAnimation.gd4
-rw-r--r--Ground.pngbin0 -> 1183 bytes
-rw-r--r--Ground.png.import37
-rw-r--r--Main.gd4
-rw-r--r--Main.tscn133
-rw-r--r--MouseInput.gd11
-rw-r--r--MouseInput.tscn6
-rw-r--r--Player.gd61
-rw-r--r--Player.tscn14
-rw-r--r--beak.tres4
-rw-r--r--chicken.pckbin0 -> 75280 bytes
-rw-r--r--chicken.tres8
-rw-r--r--default_env.tres7
-rw-r--r--fence.pngbin0 -> 6484 bytes
-rw-r--r--fence.png.import37
-rw-r--r--fence.tres9
-rw-r--r--icon.pngbin0 -> 3305 bytes
-rw-r--r--icon.png.import35
-rw-r--r--project.godot101
24 files changed, 1179 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 4f48ad7..c967ef0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@ export_presets.cfg
# Mono-specific ignores
.mono/
data_*/
+
+*.exe
diff --git a/Chicken.gd b/Chicken.gd
new file mode 100644
index 0000000..996c2eb
--- /dev/null
+++ b/Chicken.gd
@@ -0,0 +1,64 @@
+extends KinematicBody
+
+export var rot_chance = 5.0
+export var rot_range = PI / 4.0
+export var mov_chance = 5.0
+export var mov_speed = 1.0
+export var mov_length_min = 1.0
+export var mov_length_max = 5.0
+export var flap_chance = 5.0
+export var squak_chance = 5.0
+export var peck_chance = 5.0
+
+onready var anim = $AnimationTree
+
+func roll_die(chance):
+ return (randf() * 100) <= chance
+
+func _physics_process(delta):
+ match anim.wings.get_current_node():
+ "IDLE":
+ if roll_die(flap_chance):
+ anim.wings.travel("FLAP")
+ "FLAP":
+ pass
+ match anim.state.get_current_node():
+ "IDLE":
+ state_idle(delta)
+ "MOVING":
+ state_moving(delta)
+ "SQUACK":
+ pass
+ "PECK":
+ pass
+
+func state_idle(delta):
+ if roll_die(rot_chance):
+ var ang = randf() * rot_range
+ rotate(Vector3.UP, ang)
+ if roll_die(mov_chance):
+ anim.state.travel("MOVING")
+ var dist = lerp(mov_length_min, mov_length_max, randf())
+ mov_lerp_pos = 0.0
+ mov_lerp_step = (mov_speed * delta) / dist
+ var rotation = Transform(self.rotation, Vector3.ZERO)
+ var forward = rotation * Vector3.FORWARD
+ mov_lerp_start = translation
+ mov_lerp_target = translation + (forward * dist)
+ elif roll_die(squak_chance):
+ anim.state.travel("SQUACK")
+ elif roll_die(peck_chance):
+ anim.state.travel("PECK")
+
+var mov_lerp_start = Vector3.ZERO
+var mov_lerp_target = Vector3.ZERO
+var mov_lerp_step = 0.0
+var mov_lerp_pos = 0.0
+func state_moving(_delta):
+ if mov_lerp_pos >= 1.0:
+ anim.state.travel("IDLE")
+ return
+ mov_lerp_pos += mov_lerp_step
+ mov_lerp_pos = min(mov_lerp_pos, 1.0)
+ var pos = lerp(mov_lerp_start, mov_lerp_target, mov_lerp_pos)
+ pos = move_and_slide(pos - translation, Vector3.UP)
diff --git a/Chicken.png b/Chicken.png
new file mode 100644
index 0000000..9abc2d2
--- /dev/null
+++ b/Chicken.png
Binary files differ
diff --git a/Chicken.png.import b/Chicken.png.import
new file mode 100644
index 0000000..183f344
--- /dev/null
+++ b/Chicken.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/Chicken.png-57c74d64dde4deff6196acc88252cdcf.s3tc.stex"
+path.etc2="res://.import/Chicken.png-57c74d64dde4deff6196acc88252cdcf.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://Chicken.png"
+dest_files=[ "res://.import/Chicken.png-57c74d64dde4deff6196acc88252cdcf.s3tc.stex", "res://.import/Chicken.png-57c74d64dde4deff6196acc88252cdcf.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/Chicken.tscn b/Chicken.tscn
new file mode 100644
index 0000000..06d1bdb
--- /dev/null
+++ b/Chicken.tscn
@@ -0,0 +1,605 @@
+[gd_scene load_steps=49 format=2]
+
+[ext_resource path="res://chicken.tres" type="Material" id=1]
+[ext_resource path="res://beak.tres" type="Material" id=2]
+[ext_resource path="res://Chicken.gd" type="Script" id=3]
+[ext_resource path="res://ChickenAnimation.gd" type="Script" id=4]
+
+[sub_resource type="SphereMesh" id=1]
+
+[sub_resource type="SphereMesh" id=2]
+
+[sub_resource type="CubeMesh" id=3]
+
+[sub_resource type="CubeMesh" id=4]
+
+[sub_resource type="Animation" id=5]
+length = 0.001
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/LeftWingPivot:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( -0.995677, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly/LeftWingPivot:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Belly/RightWingPivot:translation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0.996, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Belly/RightWingPivot:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("Belly/HeadPivot:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("Belly/HeadPivot/Head/BeakTopPivot:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/6/type = "value"
+tracks/6/path = NodePath("Belly/HeadPivot/Head/BeakBottomPivot:rotation_degrees")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/7/type = "value"
+tracks/7/path = NodePath("Belly:rotation_degrees")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/8/type = "value"
+tracks/8/path = NodePath("Belly:translation")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=6]
+resource_name = "flappybird"
+length = 2.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/LeftWingPivot:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1.5, 2 ),
+"transitions": PoolRealArray( 1.51572, 0.450625, 1, 1.51572 ),
+"update": 0,
+"values": [ Vector3( -0.995677, 0, 0 ), Vector3( -0.995677, 0.0845447, 0 ), Vector3( -0.995677, -0.127906, 0 ), Vector3( -0.995677, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly/LeftWingPivot:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.5, 1.5, 2 ),
+"transitions": PoolRealArray( 1.51572, 0.450625, 1, 1.51572 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, -23.821 ), Vector3( 0, 0, 21.829 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Belly/RightWingPivot:translation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.5, 1.5, 2 ),
+"transitions": PoolRealArray( 1.51572, 0.450625, 1, 1.51572 ),
+"update": 0,
+"values": [ Vector3( 0.996, 0, 0 ), Vector3( 0.996, 0.085, 0 ), Vector3( 0.996, -0.128, 0 ), Vector3( 0.996, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Belly/RightWingPivot:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.5, 1.5, 2 ),
+"transitions": PoolRealArray( 1.51572, 0.450625, 1, 1.51572 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, 23.821 ), Vector3( 0, 0, -21.829 ), Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=9]
+resource_name = "hop"
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.5, 1 ),
+"transitions": PoolRealArray( 0.378929, 3.13834, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0.510995, 0 ), Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=10]
+resource_name = "idle_bottom"
+length = 0.001
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/LeftWingPivot:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( -0.995677, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly/LeftWingPivot:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Belly/RightWingPivot:translation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0.996, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Belly/RightWingPivot:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=11]
+resource_name = "idle_hop"
+length = 0.001
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly:translation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=12]
+resource_name = "idle_top"
+length = 0.001
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/HeadPivot:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly/HeadPivot/Head/BeakTopPivot:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Belly/HeadPivot/Head/BeakBottomPivot:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("Belly:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=7]
+resource_name = "peck"
+length = 3.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/HeadPivot:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1, 1.2, 1.4, 1.6, 1.8, 3 ),
+"transitions": PoolRealArray( 0.707107, 0.594604, 0.594604, 0.594604, 0.594604, 0.757858, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( -18.871, 0, 0 ), Vector3( 3.071, 0, 0 ), Vector3( -18.871, 0, 0 ), Vector3( 3.071, 0, 0 ), Vector3( -18.871, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 1, 2, 3 ),
+"transitions": PoolRealArray( 0.707107, 1, 0.707107, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( -29, 0, 0 ), Vector3( -29, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=8]
+resource_name = "squack"
+length = 2.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("Belly/HeadPivot:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 1, 2 ),
+"transitions": PoolRealArray( 0.450625, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 30.215, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("Belly/HeadPivot/Head/BeakTopPivot:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 1, 2 ),
+"transitions": PoolRealArray( 0.450625, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( 26.24, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("Belly/HeadPivot/Head/BeakBottomPivot:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 1, 2 ),
+"transitions": PoolRealArray( 0.450625, 1, 1 ),
+"update": 0,
+"values": [ Vector3( 0, 0, 0 ), Vector3( -18.246, 0, 0 ), Vector3( 0, 0, 0 ) ]
+}
+
+[sub_resource type="AnimationNodeAdd2" id=18]
+
+[sub_resource type="AnimationNodeAdd2" id=42]
+
+[sub_resource type="AnimationNodeAnimation" id=43]
+animation = "idle_top"
+
+[sub_resource type="AnimationNodeAnimation" id=44]
+animation = "idle_hop"
+
+[sub_resource type="AnimationNodeBlendTree" id=45]
+graph_offset = Vector2( -573, -15 )
+nodes/Add2/node = SubResource( 42 )
+nodes/Add2/position = Vector2( 100, 140 )
+nodes/Animation/node = SubResource( 44 )
+nodes/Animation/position = Vector2( -140, 100 )
+"nodes/Animation 2/node" = SubResource( 43 )
+"nodes/Animation 2/position" = Vector2( -160, 240 )
+node_connections = [ "output", 0, "Add2", "Add2", 0, "Animation", "Add2", 1, "Animation 2" ]
+
+[sub_resource type="AnimationNodeAnimation" id=39]
+animation = "hop"
+
+[sub_resource type="AnimationNodeTimeScale" id=40]
+
+[sub_resource type="AnimationNodeBlendTree" id=41]
+graph_offset = Vector2( -427, -35 )
+nodes/Animation/node = SubResource( 39 )
+nodes/Animation/position = Vector2( -120, 120 )
+nodes/TimeScale/node = SubResource( 40 )
+nodes/TimeScale/position = Vector2( 100, 140 )
+node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
+
+[sub_resource type="AnimationNodeAnimation" id=46]
+animation = "peck"
+
+[sub_resource type="AnimationNodeTimeScale" id=47]
+
+[sub_resource type="AnimationNodeBlendTree" id=48]
+graph_offset = Vector2( -864, -12 )
+nodes/Animation/node = SubResource( 46 )
+nodes/Animation/position = Vector2( -140, 140 )
+nodes/TimeScale/node = SubResource( 47 )
+nodes/TimeScale/position = Vector2( 100, 140 )
+node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
+
+[sub_resource type="AnimationNodeAnimation" id=49]
+animation = "squack"
+
+[sub_resource type="AnimationNodeTimeScale" id=50]
+
+[sub_resource type="AnimationNodeBlendTree" id=51]
+graph_offset = Vector2( -290, -3 )
+nodes/Animation/node = SubResource( 49 )
+nodes/Animation/position = Vector2( -60, 160 )
+nodes/TimeScale/node = SubResource( 50 )
+nodes/TimeScale/position = Vector2( 140, 140 )
+node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=52]
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=53]
+switch_mode = 2
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=54]
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=55]
+switch_mode = 2
+auto_advance = true
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=56]
+switch_mode = 2
+auto_advance = true
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=57]
+
+[sub_resource type="AnimationNodeStateMachine" id=58]
+states/IDLE/node = SubResource( 45 )
+states/IDLE/position = Vector2( 657, 146 )
+states/MOVING/node = SubResource( 41 )
+states/MOVING/position = Vector2( 657, 268 )
+states/PECK/node = SubResource( 48 )
+states/PECK/position = Vector2( 395, 146 )
+states/SQUACK/node = SubResource( 51 )
+states/SQUACK/position = Vector2( 952, 146 )
+transitions = [ "IDLE", "MOVING", SubResource( 52 ), "MOVING", "IDLE", SubResource( 53 ), "IDLE", "SQUACK", SubResource( 54 ), "SQUACK", "IDLE", SubResource( 55 ), "PECK", "IDLE", SubResource( 56 ), "IDLE", "PECK", SubResource( 57 ) ]
+start_node = "IDLE"
+
+[sub_resource type="AnimationNodeAnimation" id=59]
+animation = "flappybird"
+
+[sub_resource type="AnimationNodeTimeScale" id=60]
+
+[sub_resource type="AnimationNodeBlendTree" id=61]
+graph_offset = Vector2( -405, 10 )
+nodes/Animation/node = SubResource( 59 )
+nodes/Animation/position = Vector2( -66.6667, 132.5 )
+nodes/TimeScale/node = SubResource( 60 )
+nodes/TimeScale/position = Vector2( 120, 140 )
+node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
+
+[sub_resource type="AnimationNodeAnimation" id=62]
+animation = "idle_bottom"
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=63]
+
+[sub_resource type="AnimationNodeStateMachineTransition" id=64]
+switch_mode = 2
+auto_advance = true
+
+[sub_resource type="AnimationNodeStateMachine" id=65]
+states/FLAP/node = SubResource( 61 )
+states/FLAP/position = Vector2( 904, 144 )
+states/IDLE/node = SubResource( 62 )
+states/IDLE/position = Vector2( 674, 144 )
+transitions = [ "IDLE", "FLAP", SubResource( 63 ), "FLAP", "IDLE", SubResource( 64 ) ]
+start_node = "IDLE"
+
+[sub_resource type="AnimationNodeBlendTree" id=16]
+graph_offset = Vector2( -847.136, -609 )
+nodes/Add2/node = SubResource( 18 )
+nodes/Add2/position = Vector2( 80, -480 )
+nodes/output/position = Vector2( 300, -480 )
+nodes/state/node = SubResource( 58 )
+nodes/state/position = Vector2( -220, -380 )
+nodes/wings/node = SubResource( 65 )
+nodes/wings/position = Vector2( -220, -520 )
+node_connections = [ "output", 0, "Add2", "Add2", 0, "wings", "Add2", 1, "state" ]
+
+[sub_resource type="AnimationNodeStateMachinePlayback" id=66]
+
+[sub_resource type="AnimationNodeStateMachinePlayback" id=38]
+
+[sub_resource type="SphereShape" id=67]
+
+[node name="Chicken" type="KinematicBody"]
+collision_layer = 4
+collision_mask = 5
+script = ExtResource( 3 )
+
+[node name="Belly" type="MeshInstance" parent="."]
+mesh = SubResource( 1 )
+material/0 = ExtResource( 1 )
+
+[node name="HeadPivot" type="Spatial" parent="Belly"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.657827, -0.749514 )
+
+[node name="Head" type="MeshInstance" parent="Belly/HeadPivot"]
+transform = Transform( 0.6, 0, 0, 0, 0.55438, 0.229484, 0, -0.229484, 0.55438, 0, 0.388057, -0.339644 )
+mesh = SubResource( 2 )
+skeleton = NodePath("../../..")
+material/0 = ExtResource( 1 )
+
+[node name="BeakTopPivot" type="Spatial" parent="Belly/HeadPivot/Head"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.19209e-07, -0.965512 )
+
+[node name="BeakTop" type="MeshInstance" parent="Belly/HeadPivot/Head/BeakTopPivot"]
+transform = Transform( 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0.5, 0, 0, -0.452 )
+mesh = SubResource( 3 )
+skeleton = NodePath("../..")
+material/0 = ExtResource( 2 )
+
+[node name="BeakBottomPivot" type="Spatial" parent="Belly/HeadPivot/Head"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.189294, -0.965511 )
+
+[node name="BeakBottom" type="MeshInstance" parent="Belly/HeadPivot/Head/BeakBottomPivot"]
+transform = Transform( 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0.5, 0, 0, -0.452 )
+mesh = SubResource( 3 )
+skeleton = NodePath("../..")
+material/0 = ExtResource( 2 )
+
+[node name="LeftWingPivot" type="Spatial" parent="Belly"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.995677, 0, 0 )
+
+[node name="LeftWing" type="MeshInstance" parent="Belly/LeftWingPivot"]
+transform = Transform( 0.5, 0, 0, 0, 0.1, 0, 0, 0, 0.3, -0.377, 0, 0 )
+mesh = SubResource( 4 )
+skeleton = NodePath("../../..")
+material/0 = ExtResource( 1 )
+
+[node name="RightWingPivot" type="Spatial" parent="Belly"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.996, 0, 0 )
+
+[node name="RightWing" type="MeshInstance" parent="Belly/RightWingPivot"]
+transform = Transform( 0.5, 0, 0, 0, 0.1, 0, 0, 0, 0.3, 0.352, 0, 0 )
+mesh = SubResource( 4 )
+skeleton = NodePath("../../..")
+material/0 = ExtResource( 1 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 5 )
+anims/flappybird = SubResource( 6 )
+anims/hop = SubResource( 9 )
+anims/idle_bottom = SubResource( 10 )
+anims/idle_hop = SubResource( 11 )
+anims/idle_top = SubResource( 12 )
+anims/peck = SubResource( 7 )
+anims/squack = SubResource( 8 )
+
+[node name="AnimationTree" type="AnimationTree" parent="."]
+tree_root = SubResource( 16 )
+anim_player = NodePath("../AnimationPlayer")
+active = true
+parameters/Add2/add_amount = 1.0
+parameters/state/playback = SubResource( 66 )
+parameters/state/IDLE/Add2/add_amount = 0
+parameters/state/MOVING/TimeScale/scale = 1.0
+parameters/state/PECK/TimeScale/scale = 2.0
+parameters/state/SQUACK/TimeScale/scale = 1.0
+parameters/wings/playback = SubResource( 38 )
+parameters/wings/FLAP/TimeScale/scale = 2.0
+script = ExtResource( 4 )
+
+[node name="CollisionShape" type="CollisionShape" parent="."]
+transform = Transform( 1, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.5, -0.5 )
+shape = SubResource( 67 )
diff --git a/ChickenAnimation.gd b/ChickenAnimation.gd
new file mode 100644
index 0000000..a1298a0
--- /dev/null
+++ b/ChickenAnimation.gd
@@ -0,0 +1,4 @@
+extends AnimationTree
+
+var wings = self["parameters/wings/playback"]
+var state = self["parameters/state/playback"]
diff --git a/Ground.png b/Ground.png
new file mode 100644
index 0000000..028df53
--- /dev/null
+++ b/Ground.png
Binary files differ
diff --git a/Ground.png.import b/Ground.png.import
new file mode 100644
index 0000000..0bf16db
--- /dev/null
+++ b/Ground.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/Ground.png-a1e7165254050f6723978f7d8348ce00.s3tc.stex"
+path.etc2="res://.import/Ground.png-a1e7165254050f6723978f7d8348ce00.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://Ground.png"
+dest_files=[ "res://.import/Ground.png-a1e7165254050f6723978f7d8348ce00.s3tc.stex", "res://.import/Ground.png-a1e7165254050f6723978f7d8348ce00.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/Main.gd b/Main.gd
new file mode 100644
index 0000000..68447ee
--- /dev/null
+++ b/Main.gd
@@ -0,0 +1,4 @@
+extends Node
+
+func _ready():
+ randomize()
diff --git a/Main.tscn b/Main.tscn
new file mode 100644
index 0000000..b57a581
--- /dev/null
+++ b/Main.tscn
@@ -0,0 +1,133 @@
+[gd_scene load_steps=12 format=2]
+
+[ext_resource path="res://Main.gd" type="Script" id=1]
+[ext_resource path="res://Ground.png" type="Texture" id=2]
+[ext_resource path="res://Player.tscn" type="PackedScene" id=3]
+[ext_resource path="res://Chicken.tscn" type="PackedScene" id=4]
+[ext_resource path="res://fence.tres" type="Material" id=5]
+
+[sub_resource type="BoxShape" id=1]
+extents = Vector3( 25, 1, 25 )
+
+[sub_resource type="CubeMesh" id=3]
+size = Vector3( 50, 2, 50 )
+
+[sub_resource type="SpatialMaterial" id=4]
+albedo_color = Color( 0.0352941, 0.301961, 0.00392157, 1 )
+albedo_texture = ExtResource( 2 )
+uv1_triplanar = true
+
+[sub_resource type="CubeMesh" id=5]
+
+[sub_resource type="BoxShape" id=7]
+extents = Vector3( 5, 1, 0.05 )
+
+[sub_resource type="BoxShape" id=6]
+extents = Vector3( 0.05, 1, 5 )
+
+[node name="Main" type="Node"]
+script = ExtResource( 1 )
+
+[node name="DirectionalLight" type="DirectionalLight" parent="."]
+transform = Transform( -0.586145, -0.773475, 0.241185, -0.715288, 0.633826, 0.294324, -0.380522, 0, -0.924772, 6.17321, 8.45611, -11.9247 )
+
+[node name="Ground" type="StaticBody" parent="."]
+collision_mask = 0
+
+[node name="CollisionShape" type="CollisionShape" parent="Ground"]
+shape = SubResource( 1 )
+
+[node name="MeshInstance" type="MeshInstance" parent="Ground"]
+mesh = SubResource( 3 )
+material/0 = SubResource( 4 )
+
+[node name="Fence" type="StaticBody" parent="."]
+collision_mask = 0
+
+[node name="MeshInstance" type="MeshInstance" parent="Fence"]
+transform = Transform( 5, 0, 0, 0, 1, 0, 0, 0, 0.1, 0, 2, -5 )
+mesh = SubResource( 5 )
+material/0 = ExtResource( 5 )
+
+[node name="MeshInstance2" type="MeshInstance" parent="Fence"]
+transform = Transform( 5, 0, 0, 0, 1, 0, 0, 0, 0.1, 0, 2, 5 )
+mesh = SubResource( 5 )
+material/0 = ExtResource( 5 )
+
+[node name="MeshInstance3" type="MeshInstance" parent="Fence"]
+transform = Transform( 0.1, 0, 0, 0, 1, 0, 0, 0, 5, -5, 2, 0 )
+mesh = SubResource( 5 )
+material/0 = ExtResource( 5 )
+
+[node name="MeshInstance4" type="MeshInstance" parent="Fence"]
+transform = Transform( 0.1, 0, 0, 0, 1, 0, 0, 0, 5, 5, 2, 0 )
+mesh = SubResource( 5 )
+material/0 = ExtResource( 5 )
+
+[node name="CollisionShape" type="CollisionShape" parent="Fence"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -5 )
+shape = SubResource( 7 )
+
+[node name="CollisionShape2" type="CollisionShape" parent="Fence"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 5 )
+shape = SubResource( 7 )
+
+[node name="CollisionShape3" type="CollisionShape" parent="Fence"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 2, 0 )
+shape = SubResource( 6 )
+
+[node name="CollisionShape4" type="CollisionShape" parent="Fence"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 2, 0 )
+shape = SubResource( 6 )
+
+[node name="Player" parent="." instance=ExtResource( 3 )]
+transform = Transform( 1, 0, 0, 0, 0.968718, 0.248166, 0, -0.248166, 0.968718, 0, 5.05733, 7 )
+
+[node name="Chicken" parent="." instance=ExtResource( 4 )]
+transform = Transform( 0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 1.25, 0 )
+rot_chance = 10.0
+flap_chance = 2.0
+squak_chance = 2.0
+peck_chance = 3.0
+
+[node name="Chicken2" parent="." instance=ExtResource( 4 )]
+transform = Transform( -0.157042, 0, 0.19452, 0, 0.25, 0, -0.19452, 0, -0.157042, 2.50059, 1.25, -2.25906 )
+rot_chance = 10.0
+flap_chance = 2.0
+squak_chance = 2.0
+peck_chance = 3.0
+
+[node name="Chicken3" parent="." instance=ExtResource( 4 )]
+transform = Transform( 0.181922, 0, -0.171477, 0, 0.25, 0, 0.171477, 0, 0.181922, 0, 1.25, -2.79105 )
+rot_chance = 10.0
+flap_chance = 2.0
+squak_chance = 2.0
+peck_chance = 3.0
+
+[node name="Chicken4" parent="." instance=ExtResource( 4 )]
+transform = Transform( 0.177798, 0, 0.175749, 0, 0.25, 0, -0.175749, 0, 0.177798, -3.31942, 1.25, 0 )
+rot_chance = 10.0
+flap_chance = 2.0
+squak_chance = 2.0
+peck_chance = 3.0
+
+[node name="Chicken5" parent="." instance=ExtResource( 4 )]
+transform = Transform( -0.24986, 0, 0.00835422, 0, 0.25, 0, -0.00835422, 0, -0.24986, -1.33975, 1.25, -1.28165 )
+rot_chance = 10.0
+flap_chance = 2.0
+squak_chance = 2.0
+peck_chance = 3.0
+
+[node name="UI" type="Control" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+
+[node name="Controls" type="Label" parent="UI"]
+margin_right = 166.0
+margin_bottom = 82.0
+custom_colors/font_color = Color( 0.00784314, 0.0392157, 0.811765, 1 )
+text = "move: WASD or Left Stick
+look: Arrows or Right Stick
+up: Space or Right Trigger
+down: Ctrl or Left Trigger
+Release Cursor: Esc"
diff --git a/MouseInput.gd b/MouseInput.gd
new file mode 100644
index 0000000..e47e3c7
--- /dev/null
+++ b/MouseInput.gd
@@ -0,0 +1,11 @@
+extends Node
+
+var mouse_movement = Vector2.ZERO
+
+func get_mouse_movement():
+ var ret = mouse_movement
+ mouse_movement -= ret
+ return ret
+
+func add_mouse_movement(relative):
+ mouse_movement += relative
diff --git a/MouseInput.tscn b/MouseInput.tscn
new file mode 100644
index 0000000..9dd303b
--- /dev/null
+++ b/MouseInput.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://MouseInput.gd" type="Script" id=1]
+
+[node name="Node" type="Node"]
+script = ExtResource( 1 )
diff --git a/Player.gd b/Player.gd
new file mode 100644
index 0000000..99c6abf
--- /dev/null
+++ b/Player.gd
@@ -0,0 +1,61 @@
+extends KinematicBody
+
+export var speed = 20
+export var ang_speed = PI
+export var mouse_dpi = 0.2
+export var pitch_min = -0.8
+export var pitch_max = 0.8
+
+func joystick(neg_x: String,pos_x: String,neg_y: String,pos_y: String):
+ var joystick = Input.get_vector(neg_x,pos_x,neg_y,pos_y)
+ var joystrength = abs(joystick.length())
+ if joystick != Vector2.ZERO:
+ joystick = joystick.normalized()
+ return Vector3(joystick.x,joystick.y,joystrength)
+
+func _physics_process(delta):
+ var d_ang_speed = ang_speed * delta
+
+ var rotation = Transform(self.rotation, Vector3.ZERO)
+ var up = rotation * Vector3.UP
+ var forward = rotation * Vector3.FORWARD
+ var right = rotation * Vector3.RIGHT
+
+ var stick = joystick("move_left", "move_right", "move_back", "move_forward")
+ var movement = Vector3.ZERO
+ movement += right * stick.x * stick.z * speed
+ movement += forward * stick.y * stick.z * speed
+ if Input.is_action_pressed("move_up"):
+ movement += up * speed
+ if Input.is_action_pressed("move_down"):
+ movement -= up * speed
+ movement = move_and_slide(movement, Vector3.UP)
+
+ stick = joystick("look_right", "look_left", "look_down", "look_up")
+ var mouse_movement = MouseInput.get_mouse_movement()
+ if stick.z == 0.0:
+ stick.z = mouse_movement.length() * mouse_dpi
+ mouse_movement = -mouse_movement.normalized()
+ stick.x = mouse_movement.x
+ stick.y = mouse_movement.y
+ var pitch = forward.dot(Vector3.UP)
+ if (pitch >= pitch_min and stick.y < 0) or (pitch <= pitch_max and stick.y > 0):
+ rotate(right, stick.y * stick.z * d_ang_speed)
+ rotate(Vector3.UP, stick.x * stick.z * d_ang_speed)
+
+func _ready():
+ Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
+
+func _notification(what):
+ if what == MainLoop.NOTIFICATION_WM_FOCUS_OUT:
+ Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
+
+func _input(event):
+ if event.is_action_pressed("ui_cancel"):
+ Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
+ if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
+ if event.is_action_pressed("click"):
+ Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
+ else:
+ if event is InputEventMouseMotion:
+ MouseInput.add_mouse_movement(event.relative)
diff --git a/Player.tscn b/Player.tscn
new file mode 100644
index 0000000..098799c
--- /dev/null
+++ b/Player.tscn
@@ -0,0 +1,14 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://Player.gd" type="Script" id=2]
+
+[sub_resource type="SphereShape" id=1]
+
+[node name="Player" type="KinematicBody"]
+collision_layer = 2
+script = ExtResource( 2 )
+
+[node name="Camera" type="Camera" parent="."]
+
+[node name="CollisionShape" type="CollisionShape" parent="."]
+shape = SubResource( 1 )
diff --git a/beak.tres b/beak.tres
new file mode 100644
index 0000000..f9f1e08
--- /dev/null
+++ b/beak.tres
@@ -0,0 +1,4 @@
+[gd_resource type="SpatialMaterial" format=2]
+
+[resource]
+albedo_color = Color( 0.968627, 0.956863, 0.117647, 1 )
diff --git a/chicken.pck b/chicken.pck
new file mode 100644
index 0000000..f5e42f0
--- /dev/null
+++ b/chicken.pck
Binary files differ
diff --git a/chicken.tres b/chicken.tres
new file mode 100644
index 0000000..a0fffee
--- /dev/null
+++ b/chicken.tres
@@ -0,0 +1,8 @@
+[gd_resource type="SpatialMaterial" load_steps=2 format=2]
+
+[ext_resource path="res://Chicken.png" type="Texture" id=1]
+
+[resource]
+albedo_color = Color( 1, 0.992157, 0.933333, 1 )
+albedo_texture = ExtResource( 1 )
+uv1_triplanar = true
diff --git a/default_env.tres b/default_env.tres
new file mode 100644
index 0000000..20207a4
--- /dev/null
+++ b/default_env.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Environment" load_steps=2 format=2]
+
+[sub_resource type="ProceduralSky" id=1]
+
+[resource]
+background_mode = 2
+background_sky = SubResource( 1 )
diff --git a/fence.png b/fence.png
new file mode 100644
index 0000000..fa6a932
--- /dev/null
+++ b/fence.png
Binary files differ
diff --git a/fence.png.import b/fence.png.import
new file mode 100644
index 0000000..a00c29f
--- /dev/null
+++ b/fence.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/fence.png-459e2451c79a09a5b23fb58cc9a7be21.s3tc.stex"
+path.etc2="res://.import/fence.png-459e2451c79a09a5b23fb58cc9a7be21.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://fence.png"
+dest_files=[ "res://.import/fence.png-459e2451c79a09a5b23fb58cc9a7be21.s3tc.stex", "res://.import/fence.png-459e2451c79a09a5b23fb58cc9a7be21.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/fence.tres b/fence.tres
new file mode 100644
index 0000000..8322411
--- /dev/null
+++ b/fence.tres
@@ -0,0 +1,9 @@
+[gd_resource type="SpatialMaterial" load_steps=2 format=2]
+
+[ext_resource path="res://fence.png" type="Texture" id=1]
+
+[resource]
+params_use_alpha_scissor = true
+params_alpha_scissor_threshold = 0.98
+albedo_texture = ExtResource( 1 )
+uv1_triplanar = true
diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000..c98fbb6
--- /dev/null
+++ b/icon.png
Binary files differ
diff --git a/icon.png.import b/icon.png.import
new file mode 100644
index 0000000..a4c02e6
--- /dev/null
+++ b/icon.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://icon.png"
+dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/project.godot b/project.godot
new file mode 100644
index 0000000..f1f5591
--- /dev/null
+++ b/project.godot
@@ -0,0 +1,101 @@
+; 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=4
+
+[application]
+
+config/name="chicken-chaser-gd"
+run/main_scene="res://Main.tscn"
+config/icon="res://icon.png"
+
+[autoload]
+
+MouseInput="*res://MouseInput.tscn"
+
+[input]
+
+move_left={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
+ ]
+}
+move_right={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
+ ]
+}
+move_forward={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
+ ]
+}
+move_back={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
+ ]
+}
+move_up={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+move_down={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":6,"pressure":0.0,"pressed":false,"script":null)
+ ]
+}
+look_left={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":-1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+look_right={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+look_up={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":-1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+look_down={
+"deadzone": 0.5,
+"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+click={
+"deadzone": 0.5,
+"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
+ ]
+}
+
+[layer_names]
+
+3d_physics/layer_1="Ground"
+3d_physics/layer_2="Player"
+3d_physics/layer_3="Chicken"
+
+[physics]
+
+common/enable_pause_aware_picking=true
+
+[rendering]
+
+environment/default_environment="res://default_env.tres"