feat: frog free progress ui, animtree bugfix

This commit is contained in:
Jakob Feldmann 2023-08-14 22:24:29 +02:00
parent fdea374ee2
commit 2eae71e0ac
63 changed files with 698 additions and 426 deletions

View File

@ -17,7 +17,7 @@ force/max_rate=false
force/max_rate_hz=44100 force/max_rate_hz=44100
edit/trim=false edit/trim=false
edit/normalize=true edit/normalize=true
edit/loop_mode=0 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=476280
compress/mode=0 compress/mode=0

View File

@ -17,7 +17,7 @@ force/max_rate=false
force/max_rate_hz=44100 force/max_rate_hz=44100
edit/trim=false edit/trim=false
edit/normalize=true edit/normalize=true
edit/loop_mode=0 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=216090
compress/mode=0 compress/mode=0

View File

@ -17,7 +17,7 @@ force/max_rate=false
force/max_rate_hz=44100 force/max_rate_hz=44100
edit/trim=false edit/trim=false
edit/normalize=true edit/normalize=true
edit/loop_mode=0 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=1878660
compress/mode=0 compress/mode=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/froggy-freed-ui.png-53922e47e0d54748af08766579eb65c7.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/ui/froggy-freed-ui.png"
dest_files=[ "res://.import/froggy-freed-ui.png-53922e47e0d54748af08766579eb65c7.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=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=false
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/froggy-imprisoned-ui.png-9d7f0cbdb0c652369f6c6dc41879bd61.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/ui/froggy-imprisoned-ui.png"
dest_files=[ "res://.import/froggy-imprisoned-ui.png-9d7f0cbdb0c652369f6c6dc41879bd61.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=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=false
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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/froggy-ui-collected.png-336ff92477b43674a6bd446e595e471d.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/ui/froggy-ui-collected.png"
dest_files=[ "res://.import/froggy-ui-collected.png-336ff92477b43674a6bd446e595e471d.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=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=false
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

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 272 B

After

Width:  |  Height:  |  Size: 272 B

View File

@ -2,15 +2,15 @@
importer="texture" importer="texture"
type="StreamTexture" type="StreamTexture"
path="res://.import/blobby1.png-02080f0b57c8ccaa15e26b1a3859acb0.stex" path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://blobby1.png" source_file="res://icon.png"
dest_files=[ "res://.import/blobby1.png-02080f0b57c8ccaa15e26b1a3859acb0.stex" ] dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
[params] [params]

View File

@ -304,6 +304,7 @@ ui_click={
common/physics_fps=120 common/physics_fps=120
2d/thread_model=0 2d/thread_model=0
2d/cell_size=100 2d/cell_size=100
common/physics_interpolation=true
common/enable_object_picking=false common/enable_object_picking=false
[rendering] [rendering]

View File

@ -10,7 +10,7 @@
[ext_resource path="res://assets/effects/jump-point.png" type="Texture" id=8] [ext_resource path="res://assets/effects/jump-point.png" type="Texture" id=8]
[sub_resource type="RectangleShape2D" id=2] [sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 11.9219, 10.0313 ) extents = Vector2( 14.9127, 5.98593 )
[sub_resource type="StreamTexture" id=62] [sub_resource type="StreamTexture" id=62]
load_path = "res://.import/blobby-spritesheet.png-205c8efc79bec685345a637ed2dcfc9b.stex" load_path = "res://.import/blobby-spritesheet.png-205c8efc79bec685345a637ed2dcfc9b.stex"
@ -240,6 +240,8 @@ priority = 2
switch_mode = 2 switch_mode = 2
auto_advance = true auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=171]
[sub_resource type="AnimationNodeStateMachineTransition" id=172] [sub_resource type="AnimationNodeStateMachineTransition" id=172]
switch_mode = 2 switch_mode = 2
auto_advance = true auto_advance = true
@ -260,6 +262,7 @@ switch_mode = 2
auto_advance = true auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=178] [sub_resource type="AnimationNodeStateMachineTransition" id=178]
priority = 0
[sub_resource type="AnimationNodeStateMachineTransition" id=137] [sub_resource type="AnimationNodeStateMachineTransition" id=137]
@ -273,8 +276,6 @@ auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=196] [sub_resource type="AnimationNodeStateMachineTransition" id=196]
[sub_resource type="AnimationNodeStateMachineTransition" id=203]
[sub_resource type="AnimationNodeStateMachine" id=47] [sub_resource type="AnimationNodeStateMachine" id=47]
states/duckTurn/node = SubResource( 126 ) states/duckTurn/node = SubResource( 126 )
states/duckTurn/position = Vector2( 1795.54, 241 ) states/duckTurn/position = Vector2( 1795.54, 241 )
@ -289,27 +290,27 @@ states/idling/position = Vector2( 1375.63, -53.9546 )
states/jumpToFall/node = SubResource( 119 ) states/jumpToFall/node = SubResource( 119 )
states/jumpToFall/position = Vector2( 1981.07, 404.104 ) states/jumpToFall/position = Vector2( 1981.07, 404.104 )
states/jumping/node = SubResource( 125 ) states/jumping/node = SubResource( 125 )
states/jumping/position = Vector2( 1368.79, 122.723 ) states/jumping/position = Vector2( 1375.54, 117.961 )
states/runToJump/node = SubResource( 146 ) states/runToJump/node = SubResource( 146 )
states/runToJump/position = Vector2( 2119.34, 577.905 ) states/runToJump/position = Vector2( 2194.36, 651.238 )
states/running/node = SubResource( 122 ) states/running/node = SubResource( 122 )
states/running/position = Vector2( 2268.44, -53.9541 ) states/running/position = Vector2( 2273.2, -53.7278 )
states/turnToRun/node = SubResource( 130 ) states/turnToRun/node = SubResource( 130 )
states/turnToRun/position = Vector2( 1795.54, -308.991 ) states/turnToRun/position = Vector2( 1795.54, -308.991 )
states/walking/node = SubResource( 133 ) states/walking/node = SubResource( 133 )
states/walking/position = Vector2( 1795.54, -54 ) states/walking/position = Vector2( 1795.54, -54 )
states/wallslideToJump/node = SubResource( 136 ) states/wallslideToJump/node = SubResource( 136 )
states/wallslideToJump/position = Vector2( 1362.38, 336.342 ) states/wallslideToJump/position = Vector2( 1374.76, 343.009 )
states/wallsliding/node = SubResource( 96 ) states/wallsliding/node = SubResource( 96 )
states/wallsliding/position = Vector2( 1795.54, 493.009 ) states/wallsliding/position = Vector2( 1795.54, 493.009 )
transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ), "jumping", "wallsliding", SubResource( 189 ), "jumping", "idling", SubResource( 193 ), "jumping", "walking", SubResource( 194 ), "runToJump", "wallsliding", SubResource( 195 ), "jumpToFall", "idling", SubResource( 196 ), "running", "turnToRun", SubResource( 203 ) ] transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ), "jumping", "wallsliding", SubResource( 189 ), "jumping", "idling", SubResource( 193 ), "jumping", "walking", SubResource( 194 ), "runToJump", "wallsliding", SubResource( 195 ), "jumpToFall", "idling", SubResource( 196 ) ]
start_node = "idling" start_node = "idling"
graph_offset = Vector2( 958.54, -77.431 ) graph_offset = Vector2( 1157.54, -22.431 )
[sub_resource type="AnimationNodeStateMachinePlayback" id=48] [sub_resource type="AnimationNodeStateMachinePlayback" id=48]
[sub_resource type="RectangleShape2D" id=1] [sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 12, 9.981 ) extents = Vector2( 12, 8.99662 )
[sub_resource type="Animation" id=17] [sub_resource type="Animation" id=17]
length = 0.001 length = 0.001
@ -3342,10 +3343,10 @@ tracks/10/loop_wrap = true
tracks/10/imported = false tracks/10/imported = false
tracks/10/enabled = true tracks/10/enabled = true
tracks/10/keys = { tracks/10/keys = {
"times": PoolRealArray( 0 ), "times": PoolRealArray( 0, 0.25, 0.5 ),
"transitions": PoolRealArray( 1 ), "transitions": PoolRealArray( 1, 1, 1 ),
"update": 0, "update": 0,
"values": [ Vector2( 1, 1 ) ] "values": [ Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ) ]
} }
[sub_resource type="Animation" id=99] [sub_resource type="Animation" id=99]
@ -4218,7 +4219,7 @@ process_priority = -1
collision_mask = 254 collision_mask = 254
[node name="CollisionPolygon2D" type="CollisionShape2D" parent="BlobbySkin"] [node name="CollisionPolygon2D" type="CollisionShape2D" parent="BlobbySkin"]
position = Vector2( 0.0469954, -10.0308 ) position = Vector2( 0.0286326, -10.0053 )
scale = Vector2( 1.03, 1.04 ) scale = Vector2( 1.03, 1.04 )
shape = SubResource( 2 ) shape = SubResource( 2 )
@ -4233,10 +4234,12 @@ visible = false
[node name="BlobbySprite" type="Sprite" parent="."] [node name="BlobbySprite" type="Sprite" parent="."]
material = ExtResource( 2 ) material = ExtResource( 2 )
position = Vector2( 0, -16 ) position = Vector2( 0, -16 )
scale = Vector2( -1, 1 )
texture = SubResource( 62 ) texture = SubResource( 62 )
offset = Vector2( 1, 0 )
hframes = 6 hframes = 6
vframes = 6 vframes = 6
frame = 12 frame = 5
__meta__ = { __meta__ = {
"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo="
} }
@ -4245,7 +4248,6 @@ __meta__ = {
unique_name_in_owner = true unique_name_in_owner = true
tree_root = SubResource( 47 ) tree_root = SubResource( 47 )
anim_player = NodePath("../BlobbymationPlayer") anim_player = NodePath("../BlobbymationPlayer")
active = true
root_motion_track = NodePath(".") root_motion_track = NodePath(".")
parameters/playback = SubResource( 48 ) parameters/playback = SubResource( 48 )
parameters/ducking/blend_position = 1.0 parameters/ducking/blend_position = 1.0
@ -4254,7 +4256,7 @@ parameters/idling/blend_position = 1.0
parameters/jumpToFall/blend_position = 1.0 parameters/jumpToFall/blend_position = 1.0
parameters/jumping/blend_position = 1.0 parameters/jumping/blend_position = 1.0
parameters/runToJump/blend_position = 1.0 parameters/runToJump/blend_position = 1.0
parameters/running/blend_position = 1.00101 parameters/running/blend_position = 1.0
parameters/turnToRun/blend_position = 1.0 parameters/turnToRun/blend_position = 1.0
parameters/walking/blend_position = 1.0 parameters/walking/blend_position = 1.0
parameters/wallslideToJump/blend_position = 1.0 parameters/wallslideToJump/blend_position = 1.0
@ -4341,7 +4343,7 @@ position = Vector2( 0, -9 )
scale = Vector2( 0.48, 0.48 ) scale = Vector2( 0.48, 0.48 )
[node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]] [node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]]
position = Vector2( -0.0184917, -10.0133 ) position = Vector2( 0.0392303, -10.002 )
shape = SubResource( 1 ) shape = SubResource( 1 )
[node name="WallRaycasts" type="Node2D" parent="."] [node name="WallRaycasts" type="Node2D" parent="."]
@ -4350,13 +4352,13 @@ position = Vector2( 0, -1 )
[node name="LeftWallRaycast" type="Node2D" parent="WallRaycasts"] [node name="LeftWallRaycast" type="Node2D" parent="WallRaycasts"]
[node name="Left_Wallcast1" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"] [node name="Left_Wallcast1" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"]
position = Vector2( -12, -9.013 ) position = Vector2( -11.9763, -5 )
enabled = true enabled = true
cast_to = Vector2( -2, 0 ) cast_to = Vector2( -2, 0 )
collision_mask = 40 collision_mask = 40
[node name="Left_Wallcast2" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"] [node name="Left_Wallcast2" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"]
position = Vector2( -12, -1.942 ) position = Vector2( -11.9763, 5 )
enabled = true enabled = true
cast_to = Vector2( -2, 0 ) cast_to = Vector2( -2, 0 )
collision_mask = 40 collision_mask = 40
@ -4364,13 +4366,13 @@ collision_mask = 40
[node name="RightWallRaycast" type="Node2D" parent="WallRaycasts"] [node name="RightWallRaycast" type="Node2D" parent="WallRaycasts"]
[node name="Right_Wallcast1" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"] [node name="Right_Wallcast1" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"]
position = Vector2( 12.0573, -9.0133 ) position = Vector2( 12.0551, -5 )
enabled = true enabled = true
cast_to = Vector2( 2, 0 ) cast_to = Vector2( 2, 0 )
collision_mask = 40 collision_mask = 40
[node name="Right_Wallcast2" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"] [node name="Right_Wallcast2" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"]
position = Vector2( 12.0573, -1.94163 ) position = Vector2( 12.0551, 5 )
enabled = true enabled = true
cast_to = Vector2( 2, 0 ) cast_to = Vector2( 2, 0 )
collision_mask = 40 collision_mask = 40

View File

@ -889,6 +889,7 @@ animations = [ {
} ] } ]
[node name="BlobbyCam" type="Camera2D"] [node name="BlobbyCam" type="Camera2D"]
physics_interpolation_mode = 2
material = ExtResource( 38 ) material = ExtResource( 38 )
z_index = 3 z_index = 3
rotating = true rotating = true
@ -1030,10 +1031,10 @@ texture = ExtResource( 8 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] [node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
frames = SubResource( 7 ) frames = SubResource( 7 )
frame = 4 frame = 13
playing = true playing = true
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] [node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
frames = SubResource( 8 ) frames = SubResource( 8 )
frame = 9 frame = 4
playing = true playing = true

View File

@ -22,8 +22,6 @@ func _on_StompDetector_body_entered(body: Node) -> void:
func die() -> void: func die() -> void:
queue_free() queue_free()
# TODO make batterr
levelState.kills += 1
func _on_EnemySkin_area_entered(area:Area2D) -> void: func _on_EnemySkin_area_entered(area:Area2D) -> void:
if area.is_in_group("harmful"): if area.is_in_group("harmful"):

View File

@ -156,7 +156,6 @@ func update_navigation() -> void:
nav_agent.set_target_location(next_waypoint) nav_agent.set_target_location(next_waypoint)
func die() -> void: func die() -> void:
levelState.kills += 1
queue_free() queue_free()
func get_facing_direction() -> float: func get_facing_direction() -> float:

View File

@ -8,6 +8,7 @@ onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManag
var Rope = preload("res://src/Contraptions/Rope/Rope.tscn") var Rope = preload("res://src/Contraptions/Rope/Rope.tscn")
var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn") var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn")
var frog_number
var rope var rope
var is_first_signal = true var is_first_signal = true
@ -26,6 +27,7 @@ func _on_level_loaded() -> void:
rope.spawn_rope($WhatAreFrog.global_position, $RopeAnchor.global_position, movement_radius, false) rope.spawn_rope($WhatAreFrog.global_position, $RopeAnchor.global_position, movement_radius, false)
$WhatAreFrog.tilemap = tilemap $WhatAreFrog.tilemap = tilemap
$WhatAreFrog.bind_to_anchor($RopeAnchor, movement_radius) $WhatAreFrog.bind_to_anchor($RopeAnchor, movement_radius)
frog_number = $WhatAreFrog.frog_number
# Executes on frog death # Executes on frog death
# The old switchero # The old switchero
@ -54,9 +56,9 @@ func disconnect_rope() -> void:
func _on_FrogFreeButton_pushed() -> void: func _on_FrogFreeButton_pushed() -> void:
$WhatAreFrog.levelState.frees += 1
$WhatAreFrog.is_bound = false $WhatAreFrog.is_bound = false
$WhatAreFrog/LeashAnchor.visible = false $WhatAreFrog/LeashAnchor.visible = false
$WhatAreFrog.remove_from_group("harmful") $WhatAreFrog.remove_from_group("harmful")
levelState.free_a_frog(frog_number)
disconnect_rope() disconnect_rope()
is_first_signal = false is_first_signal = false

View File

@ -15,6 +15,7 @@ onready var rng = RandomNumberGenerator.new()
onready var invincible_shader = preload("res://src/Actors/Blobby/InvincibleShader.tres") onready var invincible_shader = preload("res://src/Actors/Blobby/InvincibleShader.tres")
# Is given in blocks # Is given in blocks
export var frog_number := 0
export var vision_distance := 6.0 export var vision_distance := 6.0
export var attack_jump_range := 6.0 export var attack_jump_range := 6.0
export var loose_target_seconds := 3.0 export var loose_target_seconds := 3.0
@ -64,17 +65,24 @@ func _ready():
target_lost_timer.connect("timeout", self, "loose_target") target_lost_timer.connect("timeout", self, "loose_target")
add_child(jump_timer) add_child(jump_timer)
add_child(target_lost_timer) add_child(target_lost_timer)
# TODO this is so bad ;_;
if(get_parent().name.begins_with("Bound")):
is_bound = true
else:
levelState.free_a_frog(frog_number)
levelState.register_frog(frog_number, !is_bound)
# TODO Stays harmless for now # TODO Stays harmless for now
#if(is_bound): add_to_group("harmful") #if(is_bound): add_to_group("harmful")
$LeashAnchor.visible = is_bound
func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void: func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void:
anchor = anchor_node anchor = anchor_node
movement_radius = radius * block_size movement_radius = radius * block_size
is_bound = true is_bound = true
$LeashAnchor.visible = true # TODO multiple free frogs
$Digit.visible = true
$Digit.frame = frog_number
$LeashAnchor.visible = is_bound
func execute_movement(delta: float) -> void: func execute_movement(delta: float) -> void:
@ -108,7 +116,6 @@ func execute_movement(delta: float) -> void:
func die() -> void: func die() -> void:
levelState.kills += 1
queue_free() queue_free()

View File

@ -459,12 +459,14 @@ align = 1
valign = 1 valign = 1
[node name="Digit" type="Sprite" parent="."] [node name="Digit" type="Sprite" parent="."]
visible = false
position = Vector2( 0, -3 ) position = Vector2( 0, -3 )
z_index = 1 z_index = 1
texture = ExtResource( 5 ) texture = ExtResource( 5 )
hframes = 10 hframes = 10
[node name="LeashAnchor" type="Sprite" parent="."] [node name="LeashAnchor" type="Sprite" parent="."]
visible = false
position = Vector2( 0, 2 ) position = Vector2( 0, 2 )
rotation = 3.92699 rotation = 3.92699
z_index = 2 z_index = 2

View File

@ -1,7 +1,11 @@
extends Node extends Node
onready var players: Dictionary = {}
var disposable_player: AudioStreamPlayer var disposable_player: AudioStreamPlayer
func play_scene_independent(sound_name: String, bus: String = "Master", attenuation: float = 0.0) -> void:
func play_scene_independent(sound_name: String, bus: String = "Master", attenuation: float = 0.0, singleton = false) -> void:
if singleton && players.has(sound_name):
return
disposable_player = AudioStreamPlayer.new() disposable_player = AudioStreamPlayer.new()
add_child(disposable_player) add_child(disposable_player)
disposable_player.stream = GlobalState.sound_library[sound_name] disposable_player.stream = GlobalState.sound_library[sound_name]
@ -9,6 +13,13 @@ func play_scene_independent(sound_name: String, bus: String = "Master", attenuat
disposable_player.bus = bus disposable_player.bus = bus
disposable_player.play() disposable_player.play()
disposable_player.connect("finished", self, "dispose_player") disposable_player.connect("finished", self, "dispose_player")
players[sound_name] = disposable_player
func dispose_player(player: AudioStreamPlayer = disposable_player) -> void: func dispose_player(player: AudioStreamPlayer = disposable_player) -> void:
if player == null: return
player.queue_free() player.queue_free()
func stop_scene_independent(sound_name: String):
if players.has(sound_name):
dispose_player(players[sound_name])
players.erase(sound_name)

View File

@ -1,13 +1,7 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=2 format=2]
[ext_resource path="res://src/Autoload/GlobalAudio.gd" type="Script" id=1] [ext_resource path="res://src/Autoload/GlobalAudio.gd" type="Script" id=1]
[ext_resource path="res://assets/sounds/Shopping For The Future (LOOP).wav" type="AudioStream" id=2]
[node name="GlobalAudio" type="Node"] [node name="GlobalAudio" type="Node"]
pause_mode = 2
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="MenuMusic" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 2 )
volume_db = -15.0
autoplay = true
bus = "Music"

View File

@ -20,8 +20,8 @@ func load_sounds() -> void:
if file_name == "": if file_name == "":
break break
var sound_file var sound_file
if file_name.ends_with(".ogg") || file_name.ends_with(".wav"): if file_name.ends_with(".import"):
sound_file = load(path + "/" + file_name) sound_file = load(path + "/" + file_name.split(".import")[0])
sound_library[sound_file.resource_path] = sound_file sound_library[sound_file.resource_path] = sound_file
dir.list_dir_end() dir.list_dir_end()
@ -36,10 +36,19 @@ func save() -> void:
SaveManager.save_default() SaveManager.save_default()
func set_savepoint(levelName: String, position: Vector2) -> void: func set_savepoint(levelName: String, position: Vector2) -> void:
#TODO You can free a frog, go to the checkpoint and it will be
# saved as freed forever
if(!gsr.progress_dict.has(levelName)): if(!gsr.progress_dict.has(levelName)):
gsr.progress_dict[levelName] = {} gsr.progress_dict[levelName] = {}
gsr.progress_dict[levelName]["savepoint"] = position gsr.progress_dict[levelName]["savepoint"] = position
SaveManager.save_default() SaveManager.save_default()
func remove_savepoint(levelName: String) -> void:
if(!gsr.progress_dict.has(levelName)):
return
gsr.progress_dict[levelName].erase(levelName)
SaveManager.save_default()
func get_property_value(levelName: String, propertyName: String) -> int: func get_property_value(levelName: String, propertyName: String) -> int:
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has(propertyName): if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has(propertyName):

View File

@ -8,6 +8,9 @@ script = ExtResource( 2 )
progress_dict = { progress_dict = {
} }
wallet = 0 wallet = 0
last_played_level = ""
settings = {
}
tutorial_prompts = { tutorial_prompts = {
} }
input_map = { input_map = {

View File

@ -3,13 +3,16 @@ extends Node2D
onready var levelState := get_tree().root.get_child(4).get_node("%LevelState") onready var levelState := get_tree().root.get_child(4).get_node("%LevelState")
func _ready() -> void: func _ready() -> void:
if(GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)): if(GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$AnimationPlayer.play("rolloutflag") $Flag.material.set_shader_param("speed", 0.6)
$Flag.material.set_shader_param("amplitude", 1)
$Flag.material.set_shader_param("inclination", 1)
$Flag.texture_offset = Vector2(0,0)
#TODO Animation plays over again on reset #TODO Animation plays over again on reset
#TODO What should be saved when reaching a savepoint besides the position in the level #TODO What should be saved when reaching a savepoint besides the position in the level
func _on_SaveArea_area_entered(area: Area2D) -> void: func _on_SaveArea_area_entered(area: Area2D) -> void:
#TODO Spawnheight fixed #TODO Spawnheight fixed
if(!GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)): if(!GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$AnimationPlayer.play("rolloutflag") $AnimationPlayer.play("rolloutflag")
GlobalState.set_savepoint(levelState.levelName, global_position + Vector2(0,18)) GlobalState.set_savepoint(levelState.levelName, global_position + Vector2(0,18))

View File

@ -13,10 +13,12 @@ func _get_configuration_warning() -> String:
return "The next scene property can't be empty" if not next_scene else "" return "The next scene property can't be empty" if not next_scene else ""
func level_completion() -> void: func level_completion() -> void:
GlobalState.remove_savepoint(levelName)
signalManager.emit_signal("level_completed") signalManager.emit_signal("level_completed")
func teleport() -> void: func teleport() -> void:
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_stereo.wav", "Music", -8)
get_tree().paused = true get_tree().paused = true
anim_player.play("fade_in") anim_player.play("fade_in")
# TODO This doesn't pause the game but should # TODO This doesn't pause the game but should

View File

@ -30,6 +30,7 @@ func selfActivate():
elevator.monitoring = true elevator.monitoring = true
#TODO dis importante #TODO dis importante
activatorArea.set_deferred("monitoring", false) activatorArea.set_deferred("monitoring", false)
$GetBackMusic.play()
func _on_ActivatorArea_area_entered(area:Area2D) -> void: func _on_ActivatorArea_area_entered(area:Area2D) -> void:

View File

@ -1,9 +1,10 @@
[gd_scene load_steps=11 format=2] [gd_scene load_steps=12 format=2]
[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.gd" type="Script" id=1] [ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.gd" type="Script" id=1]
[ext_resource path="res://assets/contraption/button.png" type="Texture" id=2] [ext_resource path="res://assets/contraption/button.png" type="Texture" id=2]
[ext_resource path="res://assets/contraption/buttonStateIndicator.png" type="Texture" id=3] [ext_resource path="res://assets/contraption/buttonStateIndicator.png" type="Texture" id=3]
[ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-pixel.tres" type="DynamicFont" id=4] [ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-pixel.tres" type="DynamicFont" id=4]
[ext_resource path="res://assets/sounds/Hurry! (LOOP).wav" type="AudioStream" id=5]
[sub_resource type="Gradient" id=23] [sub_resource type="Gradient" id=23]
interpolation_mode = 2 interpolation_mode = 2
@ -148,6 +149,12 @@ one_shot = true
[node name="GetBackTimer" type="Timer" parent="."] [node name="GetBackTimer" type="Timer" parent="."]
[node name="GetBackMusic" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 5 )
volume_db = -10.655
bus = "Music"
[connection signal="area_entered" from="ActivatorArea" to="." method="_on_ActivatorArea_area_entered"] [connection signal="area_entered" from="ActivatorArea" to="." method="_on_ActivatorArea_area_entered"]
[connection signal="area_exited" from="ActivatorArea" to="." method="_on_ActivatorArea_area_exited"] [connection signal="area_exited" from="ActivatorArea" to="." method="_on_ActivatorArea_area_exited"]
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] [connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]

View File

@ -6,9 +6,13 @@ onready var activatorArea = $"%ActivatorArea"
onready var indicatorPlayer = $"%IndicatorPlayer" onready var indicatorPlayer = $"%IndicatorPlayer"
onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManager") onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManager")
onready var unactivatable_timer := $Timer onready var unactivatable_timer := $Timer
export(int) var frog_number := 0
var activatable = false var activatable = false
func _ready() -> void:
$Digit.frame = frog_number
func _process(delta): func _process(delta):
if activatable && Input.is_action_just_released("interact"): if activatable && Input.is_action_just_released("interact"):
selfActivate() selfActivate()

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=22 format=2] [gd_scene load_steps=24 format=2]
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1] [ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1]
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=2] [ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=2]
@ -17,6 +17,8 @@
[ext_resource path="res://src/UserInterface/TutorialComboThingy.tscn" type="PackedScene" id=15] [ext_resource path="res://src/UserInterface/TutorialComboThingy.tscn" type="PackedScene" id=15]
[ext_resource path="res://src/UserInterface/TutorialThingy.tscn" type="PackedScene" id=16] [ext_resource path="res://src/UserInterface/TutorialThingy.tscn" type="PackedScene" id=16]
[ext_resource path="res://assets/effects/noise.png" type="Texture" id=17] [ext_resource path="res://assets/effects/noise.png" type="Texture" id=17]
[ext_resource path="res://src/BenefitialObjects/SavePoint.tscn" type="PackedScene" id=18]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=19]
[sub_resource type="AnimationNodeStateMachinePlayback" id=6] [sub_resource type="AnimationNodeStateMachinePlayback" id=6]
@ -123,41 +125,19 @@ drag_margin_top = 0.1
drag_margin_bottom = 0.1 drag_margin_bottom = 0.1
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 0 frame = 7
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 8 frame = 1
[node name="Blobby" parent="." instance=ExtResource( 8 )] [node name="Blobby" parent="." instance=ExtResource( 8 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -156, -51 ) position = Vector2( -156, -51 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="CollisionPolygon2D" parent="Blobby/BlobbySkin" index="0"]
position = Vector2( 0.0286326, -10.0053 )
[node name="BlobbySprite" parent="Blobby" index="3"]
scale = Vector2( -1, 1 )
frame = 5
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 ) parameters/playback = SubResource( 6 )
[node name="BlobbyBody" parent="Blobby" index="8"]
position = Vector2( 0.0392303, -10.002 )
[node name="Left_Wallcast1" parent="Blobby/WallRaycasts/LeftWallRaycast" index="0"]
position = Vector2( -11.9763, -5 )
[node name="Left_Wallcast2" parent="Blobby/WallRaycasts/LeftWallRaycast" index="1"]
position = Vector2( -11.9763, 5 )
[node name="Right_Wallcast1" parent="Blobby/WallRaycasts/RightWallRaycast" index="0"]
position = Vector2( 12.0551, -5 )
[node name="Right_Wallcast2" parent="Blobby/WallRaycasts/RightWallRaycast" index="1"]
position = Vector2( 12.0551, 5 )
[node name="PitArea" parent="." instance=ExtResource( 13 )] [node name="PitArea" parent="." instance=ExtResource( 13 )]
position = Vector2( 1338, 198 ) position = Vector2( 1338, 198 )
@ -245,11 +225,20 @@ press_limit = 2
position = Vector2( 1440, -90 ) position = Vector2( 1440, -90 )
action = "interact" action = "interact"
tutorial_text = "Press to interact:" tutorial_text = "Press to interact:"
press_limit = 1
[node name="Button" parent="TutorialThingy" index="0"] [node name="Button" parent="TutorialThingy" index="0"]
material = SubResource( 14 ) material = SubResource( 14 )
[node name="SavePoint" parent="." instance=ExtResource( 18 )]
position = Vector2( 1168, -88 )
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 19 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[editable path="SignalManager"] [editable path="SignalManager"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=24 format=2] [gd_scene load_steps=25 format=2]
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=1] [ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=1]
[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=2]
@ -19,6 +19,7 @@
[ext_resource path="res://src/Platforms/FlyingPlatformSmol.tscn" type="PackedScene" id=17] [ext_resource path="res://src/Platforms/FlyingPlatformSmol.tscn" type="PackedScene" id=17]
[ext_resource path="res://src/UserInterface/TutorialComboThingy.tscn" type="PackedScene" id=18] [ext_resource path="res://src/UserInterface/TutorialComboThingy.tscn" type="PackedScene" id=18]
[ext_resource path="res://assets/effects/noise.png" type="Texture" id=19] [ext_resource path="res://assets/effects/noise.png" type="Texture" id=19]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=20]
[sub_resource type="AnimationNodeStateMachinePlayback" id=6] [sub_resource type="AnimationNodeStateMachinePlayback" id=6]
@ -123,41 +124,19 @@ wait_time = 20.0
unique_name_in_owner = true unique_name_in_owner = true
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 2 frame = 10
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 1 frame = 9
[node name="Blobby" parent="." instance=ExtResource( 10 )] [node name="Blobby" parent="." instance=ExtResource( 10 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -180, 112 ) position = Vector2( -180, 112 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="CollisionPolygon2D" parent="Blobby/BlobbySkin" index="0"]
position = Vector2( 0.0286326, -10.0053 )
[node name="BlobbySprite" parent="Blobby" index="3"]
scale = Vector2( -1, 1 )
frame = 5
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 ) parameters/playback = SubResource( 6 )
[node name="BlobbyBody" parent="Blobby" index="8"]
position = Vector2( 0.0392303, -10.002 )
[node name="Left_Wallcast1" parent="Blobby/WallRaycasts/LeftWallRaycast" index="0"]
position = Vector2( -11.9763, -5 )
[node name="Left_Wallcast2" parent="Blobby/WallRaycasts/LeftWallRaycast" index="1"]
position = Vector2( -11.9763, 5 )
[node name="Right_Wallcast1" parent="Blobby/WallRaycasts/RightWallRaycast" index="0"]
position = Vector2( 12.0551, -5 )
[node name="Right_Wallcast2" parent="Blobby/WallRaycasts/RightWallRaycast" index="1"]
position = Vector2( 12.0551, 5 )
[node name="PitArea" parent="." instance=ExtResource( 3 )] [node name="PitArea" parent="." instance=ExtResource( 3 )]
position = Vector2( 416, 170 ) position = Vector2( 416, 170 )
@ -273,6 +252,13 @@ goal_state = "runToJump"
tutorial_text = "Move and press to runjump:" tutorial_text = "Move and press to runjump:"
press_limit = 1 press_limit = 1
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 20 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[editable path="SignalManager"] [editable path="SignalManager"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=22 format=2] [gd_scene load_steps=23 format=2]
[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=1] [ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=1]
[ext_resource path="res://src/Environment/DropThroughPlatforms.tres" type="TileSet" id=2] [ext_resource path="res://src/Environment/DropThroughPlatforms.tres" type="TileSet" id=2]
@ -19,8 +19,9 @@
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=17] [ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=17]
[ext_resource path="res://src/Contraptions/Triggers/GateButton.tscn" type="PackedScene" id=18] [ext_resource path="res://src/Contraptions/Triggers/GateButton.tscn" type="PackedScene" id=18]
[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=19] [ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=19]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=20]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=6]
[sub_resource type="TileSet" id=5] [sub_resource type="TileSet" id=5]
0/name = "platform-plants.png 0" 0/name = "platform-plants.png 0"
@ -78,8 +79,8 @@ unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 ) position = Vector2( -70, -1.90735e-06 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 6 )
[node name="TileMap" type="TileMap" parent="."] [node name="TileMap" type="TileMap" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@ -183,6 +184,13 @@ position = Vector2( 609, 67 )
speed = 300 speed = 300
acceleration = 800 acceleration = 800
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 20 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[editable path="SignalManager"] [editable path="SignalManager"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=2] [gd_scene load_steps=20 format=2]
[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=1] [ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=1]
[ext_resource path="res://src/Environment/DropThroughPlatforms.tres" type="TileSet" id=2] [ext_resource path="res://src/Environment/DropThroughPlatforms.tres" type="TileSet" id=2]
@ -14,9 +14,10 @@
[ext_resource path="res://src/Platforms/FlyingPlatformSmol.tscn" type="PackedScene" id=12] [ext_resource path="res://src/Platforms/FlyingPlatformSmol.tscn" type="PackedScene" id=12]
[ext_resource path="res://src/Actors/Enemies/Flyer.tscn" type="PackedScene" id=13] [ext_resource path="res://src/Actors/Enemies/Flyer.tscn" type="PackedScene" id=13]
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=14] [ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=14]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=15]
[ext_resource path="res://src/Contraptions/VendingMachine.tscn" type="PackedScene" id=19] [ext_resource path="res://src/Contraptions/VendingMachine.tscn" type="PackedScene" id=19]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=7]
[sub_resource type="TileSet" id=5] [sub_resource type="TileSet" id=5]
0/name = "platform-plants.png 0" 0/name = "platform-plants.png 0"
@ -66,18 +67,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3 drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 4 frame = 6
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 3 frame = 5
[node name="Blobby" parent="." instance=ExtResource( 9 )] [node name="Blobby" parent="." instance=ExtResource( 9 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -186, 110 ) position = Vector2( -186, 110 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 7 )
[node name="VendingMachine" parent="." instance=ExtResource( 19 )] [node name="VendingMachine" parent="." instance=ExtResource( 19 )]
position = Vector2( 48, 100 ) position = Vector2( 48, 100 )
@ -137,6 +138,13 @@ position = Vector2( 0, 23 )
[node name="Position2D3" parent="Flyer/PatrolPath" index="1"] [node name="Position2D3" parent="Flyer/PatrolPath" index="1"]
position = Vector2( 0, -25 ) position = Vector2( 0, -25 )
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 15 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[editable path="SignalManager"] [editable path="SignalManager"]

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=21 format=2] [gd_scene load_steps=22 format=2]
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=1] [ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=2]
@ -15,12 +15,13 @@
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=13] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=13]
[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=14] [ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=14]
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=15] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=15]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=16]
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=17] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=17]
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=19] [ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=19]
[ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=20] [ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=20]
[ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=21] [ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=21]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=1]
[node name="LevelTemplate" type="Node2D"] [node name="LevelTemplate" type="Node2D"]
script = ExtResource( 19 ) script = ExtResource( 19 )
@ -44,18 +45,15 @@ wait_time = 20.0
unique_name_in_owner = true unique_name_in_owner = true
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 4 frame = 0
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 8
[node name="Blobby" parent="." instance=ExtResource( 15 )] [node name="Blobby" parent="." instance=ExtResource( 15 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( 251, -24 ) position = Vector2( 746, -195 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 1 )
[node name="GateButton" parent="." instance=ExtResource( 5 )] [node name="GateButton" parent="." instance=ExtResource( 5 )]
position = Vector2( 371, -45 ) position = Vector2( 371, -45 )
@ -454,6 +452,13 @@ scale = Vector2( 1, 1.5 )
position = Vector2( 48, -7 ) position = Vector2( 48, -7 )
scale = Vector2( 1, 1.5 ) scale = Vector2( 1, 1.5 )
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 16 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[connection signal="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"] [connection signal="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"]
@ -461,6 +466,7 @@ scale = Vector2( 1, 1.5 )
[editable path="LevelState"] [editable path="LevelState"]
[editable path="UserInterface"] [editable path="UserInterface"]
[editable path="UserInterface/HUD"] [editable path="UserInterface/HUD"]
[editable path="UserInterface/PauseScreen"]
[editable path="BlobbyCam"] [editable path="BlobbyCam"]
[editable path="Blobby"] [editable path="Blobby"]
[editable path="DartingEnemy"] [editable path="DartingEnemy"]

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=22 format=2] [gd_scene load_steps=23 format=2]
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=1] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=2]
[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=3] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=3]
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=4] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=5] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=5]
[ext_resource path="res://src/Platforms/FlyingPlatform.tscn" type="PackedScene" id=6]
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=7] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=7]
[ext_resource path="res://src/Environment/Legacy/AlienShipTileSet.tres" type="TileSet" id=8] [ext_resource path="res://src/Environment/Legacy/AlienShipTileSet.tres" type="TileSet" id=8]
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=9] [ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=9]
@ -15,12 +16,12 @@
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=14] [ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=14]
[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=15] [ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=15]
[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=16] [ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=16]
[ext_resource path="res://src/Platforms/legacy/FlyingPlatformClean.tscn" type="PackedScene" id=17] [ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=17]
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=18] [ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=18]
[ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=19] [ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=19]
[ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=20] [ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=20]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=6]
[sub_resource type="AnimationNodeStateMachinePlayback" id=5] [sub_resource type="AnimationNodeStateMachinePlayback" id=5]
@ -47,18 +48,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3 drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 5 frame = 3
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 7 frame = 5
[node name="Blobby" parent="." instance=ExtResource( 5 )] [node name="Blobby" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( 3.8147e-06, 144 ) position = Vector2( 3.8147e-06, 144 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 6 )
[node name="SimpleEnemy" parent="." instance=ExtResource( 10 )] [node name="SimpleEnemy" parent="." instance=ExtResource( 10 )]
position = Vector2( 264, -36 ) position = Vector2( 264, -36 )
@ -67,9 +68,6 @@ position = Vector2( 264, -36 )
position = Vector2( 837, 72 ) position = Vector2( 837, 72 )
aggressive = false aggressive = false
[node name="FlyerSprite" parent="Flyer" index="2"]
frame = 0
[node name="AnimationTree" parent="Flyer/FlyerSprite" index="1"] [node name="AnimationTree" parent="Flyer/FlyerSprite" index="1"]
parameters/playback = SubResource( 5 ) parameters/playback = SubResource( 5 )
@ -210,12 +208,6 @@ position = Vector2( 648, 0 )
[node name="Spikes29" parent="Spikes" instance=ExtResource( 14 )] [node name="Spikes29" parent="Spikes" instance=ExtResource( 14 )]
position = Vector2( 672, 0 ) position = Vector2( 672, 0 )
[node name="FlyingPlatformClean" parent="." instance=ExtResource( 17 )]
position = Vector2( 1032, 228 )
[node name="anim" parent="FlyingPlatformClean" index="1"]
reset_on_save = false
[node name="Coin" parent="." instance=ExtResource( 18 )] [node name="Coin" parent="." instance=ExtResource( 18 )]
position = Vector2( 696, 27 ) position = Vector2( 696, 27 )
@ -362,6 +354,17 @@ scale = Vector2( 1, 1.5 )
position = Vector2( 18, -6.72727 ) position = Vector2( 18, -6.72727 )
scale = Vector2( 1, 1.5 ) scale = Vector2( 1, 1.5 )
[node name="FlyingPlatform" parent="." instance=ExtResource( 6 )]
position = Vector2( 1044, 225 )
x_target = 48
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 17 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[connection signal="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"] [connection signal="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"]
@ -375,4 +378,3 @@ scale = Vector2( 1, 1.5 )
[editable path="TileMap"] [editable path="TileMap"]
[editable path="BoundFrog"] [editable path="BoundFrog"]
[editable path="BoundFrog/RopeAnchor"] [editable path="BoundFrog/RopeAnchor"]
[editable path="FlyingPlatformClean"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=25 format=2] [gd_scene load_steps=26 format=2]
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=1] [ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=2]
@ -8,6 +8,7 @@
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=6] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=6]
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=7] [ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=7]
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=8] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=8]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=9]
[ext_resource path="res://src/Platforms/legacy/FlyingPlatformClean.tscn" type="PackedScene" id=10] [ext_resource path="res://src/Platforms/legacy/FlyingPlatformClean.tscn" type="PackedScene" id=10]
[ext_resource path="res://src/ObstacleObjects/Mine.tscn" type="PackedScene" id=11] [ext_resource path="res://src/ObstacleObjects/Mine.tscn" type="PackedScene" id=11]
[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=12] [ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=12]
@ -20,7 +21,7 @@
[ext_resource path="res://src/BenefitialObjects/SavePoint.tscn" type="PackedScene" id=19] [ext_resource path="res://src/BenefitialObjects/SavePoint.tscn" type="PackedScene" id=19]
[ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=20] [ext_resource path="res://src/Environment/Legacy/Greenhouse.tscn" type="PackedScene" id=20]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=9]
[sub_resource type="Animation" id=5] [sub_resource type="Animation" id=5]
resource_name = "Horizontal" resource_name = "Horizontal"
@ -113,16 +114,19 @@ unique_name_in_owner = true
drag_margin_top = 0.08 drag_margin_top = 0.08
drag_margin_bottom = 0.08 drag_margin_bottom = 0.08
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 8
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 11 frame = 1
[node name="Blobby" parent="." instance=ExtResource( 5 )] [node name="Blobby" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -168, 95 ) position = Vector2( -168, 95 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 9 )
[node name="DropThroughPlatform" parent="." instance=ExtResource( 13 )] [node name="DropThroughPlatform" parent="." instance=ExtResource( 13 )]
tile_data = PoolIntArray( -655281, 1, 0, -655280, 0, 0, -655279, 0, 0, -655278, 0, 0, -655276, 2, 0, 131072, 1, 0, 131073, 536870912, 0, 131074, 536870912, 0, 131075, 536870912, 0, 131076, 536870912, 0, 131077, 536870912, 0, 131078, 536870912, 0, 131079, 536870912, 0, 131080, 536870912, 0, 131081, 536870912, 0, 131082, 536870912, 0, 131083, 536870912, 0, 131084, 536870912, 0, 131085, 536870912, 0, 131086, 536870912, 0, 131087, 536870912, 0, 131088, 536870912, 0, 131089, 536870912, 0, 131090, 536870912, 0, 131091, 536870912, 0, 131092, 536870912, 0, 131093, 536870912, 0, 131094, 536870912, 0, 131096, 2, 0, 1376265, 1, 0, 1376266, 0, 0, 1376268, 2, 0, 1966084, 1, 0, 1966085, 0, 0, 1966087, 2, 0 ) tile_data = PoolIntArray( -655281, 1, 0, -655280, 0, 0, -655279, 0, 0, -655278, 0, 0, -655276, 2, 0, 131072, 1, 0, 131073, 536870912, 0, 131074, 536870912, 0, 131075, 536870912, 0, 131076, 536870912, 0, 131077, 536870912, 0, 131078, 536870912, 0, 131079, 536870912, 0, 131080, 536870912, 0, 131081, 536870912, 0, 131082, 536870912, 0, 131083, 536870912, 0, 131084, 536870912, 0, 131085, 536870912, 0, 131086, 536870912, 0, 131087, 536870912, 0, 131088, 536870912, 0, 131089, 536870912, 0, 131090, 536870912, 0, 131091, 536870912, 0, 131092, 536870912, 0, 131093, 536870912, 0, 131094, 536870912, 0, 131096, 2, 0, 1376265, 1, 0, 1376266, 0, 0, 1376268, 2, 0, 1966084, 1, 0, 1966085, 0, 0, 1966087, 2, 0 )
@ -324,6 +328,13 @@ position = Vector2( 648, -204 )
[node name="Coin4" parent="." instance=ExtResource( 1 )] [node name="Coin4" parent="." instance=ExtResource( 1 )]
position = Vector2( 1116, -120 ) position = Vector2( 1116, -120 )
[node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 9 )
volume_db = -14.994
autoplay = true
bus = "Music"
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
[editable path="SignalManager"] [editable path="SignalManager"]

View File

@ -12,9 +12,9 @@
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=10] [ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=10]
[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=11] [ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=11]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=12] [ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Large_Space_Hangar_Deep_Smooth_loop_stereo.wav" type="AudioStream" id=12]
[ext_resource path="res://assets/sounds/Hurry! (LOOP).wav" type="AudioStream" id=13] [ext_resource path="res://src/Utilities/SceneAudio.tscn" type="PackedScene" id=13]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=6]
[sub_resource type="TileSet" id=5] [sub_resource type="TileSet" id=5]
0/name = "platform-plants.png 0" 0/name = "platform-plants.png 0"
@ -48,6 +48,8 @@ __meta__ = {
[node name="SignalManager" parent="." instance=ExtResource( 2 )] [node name="SignalManager" parent="." instance=ExtResource( 2 )]
[node name="SceneAudio" parent="." instance=ExtResource( 13 )]
[node name="LevelState" parent="." instance=ExtResource( 3 )] [node name="LevelState" parent="." instance=ExtResource( 3 )]
unique_name_in_owner = true unique_name_in_owner = true
@ -62,18 +64,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3 drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 0 frame = 8
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 13 frame = 7
[node name="Blobby" parent="." instance=ExtResource( 7 )] [node name="Blobby" parent="." instance=ExtResource( 7 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 ) position = Vector2( -70, -1.90735e-06 )
scale = Vector2( 0.878906, 0.936025 ) scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 6 )
[node name="TileMap" type="TileMap" parent="."] [node name="TileMap" type="TileMap" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@ -106,12 +108,12 @@ position = Vector2( 36, -8 )
scale = Vector2( 0.5, 0.5 ) scale = Vector2( 0.5, 0.5 )
next_scene = "res://src/Levels/Actual Level 1.tscn" next_scene = "res://src/Levels/Actual Level 1.tscn"
[node name="LevelMusic" type="AudioStreamPlayer" parent="."] [node name="LevelAmbiance" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 12 ) stream = ExtResource( 12 )
volume_db = -14.994
autoplay = true autoplay = true
bus = "Music"
[node name="GetBackMusic" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 13 )
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://src/Platforms/FlyingPlatform.gd" type="Script" id=1] [ext_resource path="res://src/Platforms/FlyingPlatform.gd" type="Script" id=1]
[ext_resource path="res://assets/contraption/5xFloatingPlatform.png" type="Texture" id=2] [ext_resource path="res://assets/contraption/5xFloatingPlatform.png" type="Texture" id=2]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Static_Tonal_loop_stereo.wav" type="AudioStream" id=3]
[sub_resource type="Animation" id=1] [sub_resource type="Animation" id=1]
length = 0.001 length = 0.001
@ -60,6 +61,14 @@ collision_layer = 16
collision_mask = 0 collision_mask = 0
motion/sync_to_physics = true motion/sync_to_physics = true
[node name="FlyingSound" type="AudioStreamPlayer2D" parent="PlatformBody"]
stream = ExtResource( 3 )
volume_db = -8.0
autoplay = true
max_distance = 480.0
attenuation = 3.73213
bus = "Effects"
[node name="Sprite" type="Sprite" parent="PlatformBody"] [node name="Sprite" type="Sprite" parent="PlatformBody"]
position = Vector2( 0, 8 ) position = Vector2( 0, 8 )
texture = ExtResource( 2 ) texture = ExtResource( 2 )

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://src/Platforms/FlyingPlatform.gd" type="Script" id=1] [ext_resource path="res://src/Platforms/FlyingPlatform.gd" type="Script" id=1]
[ext_resource path="res://assets/contraption/3xFloatingPlatform.png" type="Texture" id=2] [ext_resource path="res://assets/contraption/3xFloatingPlatform.png" type="Texture" id=2]
[ext_resource path="res://assets/sounds/AMBIENCE_SciFi_Static_Tonal_loop_stereo.wav" type="AudioStream" id=3]
[sub_resource type="Animation" id=1] [sub_resource type="Animation" id=1]
length = 0.001 length = 0.001
@ -90,4 +91,12 @@ polygon = PoolVector2Array( -6, -10, 6, -10, 5.5, 0, 5.25, 5, -5.25, 5, -5.5, 0
[node name="FlyTween" type="Tween" parent="."] [node name="FlyTween" type="Tween" parent="."]
[node name="FlyingSound" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource( 3 )
volume_db = -8.0
autoplay = true
max_distance = 480.0
attenuation = 3.73213
bus = "Effects"
[connection signal="tween_completed" from="FlyTween" to="." method="_on_FlyTween_tween_completed"] [connection signal="tween_completed" from="FlyTween" to="." method="_on_FlyTween_tween_completed"]

View File

@ -51,5 +51,5 @@ scale = Vector2( 1.5, 1 )
position = Vector2( 0, 1.5 ) position = Vector2( 0, 1.5 )
z_index = -1 z_index = -1
frames = SubResource( 1 ) frames = SubResource( 1 )
frame = 19 frame = 8
playing = true playing = true

View File

@ -90,3 +90,8 @@ func _on_EnteringVelocityDetector_area_entered(area: Area2D) -> void:
if area.name == "BlobbySkin": if area.name == "BlobbySkin":
if area.get_parent().velocity.y > 0: if area.get_parent().velocity.y > 0:
stored_incoming_velocity = area.get_parent().velocity.y stored_incoming_velocity = area.get_parent().velocity.y
func _on_EnteringVelocityDetector_area_exited(area: Area2D) -> void:
if coupled_body == null:
$SpringSound.play()

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://src/Platforms/Spring/SpringPhysics.gd" type="Script" id=1] [ext_resource path="res://src/Platforms/Spring/SpringPhysics.gd" type="Script" id=1]
[ext_resource path="res://assets/contraption/SpringPlatform.png" type="Texture" id=2] [ext_resource path="res://assets/contraption/SpringPlatform.png" type="Texture" id=2]
[ext_resource path="res://assets/sounds/leavingspringmaybe.wav" type="AudioStream" id=3]
[sub_resource type="RectangleShape2D" id=2] [sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 11.4863, 2.10568 ) extents = Vector2( 11.4863, 2.10568 )
@ -44,5 +45,12 @@ collision_mask = 43
position = Vector2( 0.00395775, -1.07744 ) position = Vector2( 0.00395775, -1.07744 )
shape = SubResource( 3 ) shape = SubResource( 3 )
[node name="SpringSound" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource( 3 )
volume_db = -11.935
bus = "Effects"
[connection signal="area_exited" from="SpringSkin" to="." method="_on_SpringSkin_area_exited"] [connection signal="area_exited" from="SpringSkin" to="." method="_on_SpringSkin_area_exited"]
[connection signal="area_entered" from="EnteringVelocityDetector" to="." method="_on_EnteringVelocityDetector_area_entered"] [connection signal="area_entered" from="EnteringVelocityDetector" to="." method="_on_EnteringVelocityDetector_area_entered"]
[connection signal="area_exited" from="EnteringVelocityDetector" to="." method="_on_EnteringVelocityDetector_area_exited"]

View File

@ -41,12 +41,12 @@ resource_name = "LowPassFilter"
cutoff_hz = 3000.0 cutoff_hz = 3000.0
[resource] [resource]
bus/0/volume_db = -6.0206 bus/0/volume_db = -1.9382
bus/1/name = "Music" bus/1/name = "Music"
bus/1/solo = false bus/1/solo = false
bus/1/mute = false bus/1/mute = false
bus/1/bypass_fx = false bus/1/bypass_fx = false
bus/1/volume_db = inf_neg bus/1/volume_db = -10.4576
bus/1/send = "Master" bus/1/send = "Master"
bus/1/effect/0/effect = SubResource( 1 ) bus/1/effect/0/effect = SubResource( 1 )
bus/1/effect/0/enabled = false bus/1/effect/0/enabled = false

View File

@ -226,7 +226,10 @@ func _enter_state(new_state, old_state):
anim_state_playback.travel("ducking") anim_state_playback.travel("ducking")
states.jump: states.jump:
if parent.rotation == 0 || !parent.snap_possible: if parent.rotation == 0 || !parent.snap_possible:
anim_state_playback.travel("jumping") if old_state == states.run:
anim_state_playback.travel("runToJump")
else:
anim_state_playback.travel("jump")
states.fall: states.fall:
if parent.rotation == 0 || !parent.snap_possible: if parent.rotation == 0 || !parent.snap_possible:
anim_state_playback.travel("falling") anim_state_playback.travel("falling")

View File

@ -4,7 +4,8 @@ export(String, FILE) var next_scene_path: String = ""
onready var selected_level_base_path: String = "res://src/Levels/" onready var selected_level_base_path: String = "res://src/Levels/"
func _on_button_up() -> void: func _on_button_up() -> void:
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_Deep_stereo.wav", "Effects", -5) GlobalAudio.stop_scene_independent("res://assets/sounds/Shopping For The Future (LOOP).wav")
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_Deep_stereo.wav", "Effects", -8)
get_tree().change_scene(next_scene_path) get_tree().change_scene(next_scene_path)
get_tree().get_current_scene().queue_free() get_tree().get_current_scene().queue_free()
get_tree().paused = false get_tree().paused = false

View File

@ -3,6 +3,5 @@ extends AudibleButton
onready var levelState := get_tree().root.get_child(4).get_node("%LevelState") onready var levelState := get_tree().root.get_child(4).get_node("%LevelState")
func _on_button_up() -> void: func _on_button_up() -> void:
levelState.kills = 0
get_tree().paused = false get_tree().paused = false
get_tree().reload_current_scene() get_tree().reload_current_scene()

View File

@ -5,8 +5,6 @@ onready var current_scene := get_tree().get_current_scene()
onready var pause_overlay: ColorRect = $HUDOverlay onready var pause_overlay: ColorRect = $HUDOverlay
onready var timer: Label = $HUDOverlay/GetBackTimer onready var timer: Label = $HUDOverlay/GetBackTimer
onready var currency: Label = $HUDOverlay/Currency onready var currency: Label = $HUDOverlay/Currency
onready var kills: Label = $HUDOverlay/Kills
onready var frees: Label = $HUDOverlay/Frees
onready var levelState := get_tree().root.get_child(4).get_node("%LevelState") onready var levelState := get_tree().root.get_child(4).get_node("%LevelState")
onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManager") onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManager")
@ -14,8 +12,6 @@ onready var signalManager := get_tree().root.get_child(4).get_node("%SignalManag
func _ready(): func _ready():
#TODO Connect what HOW? #TODO Connect what HOW?
signalManager.connect("currency_updated", self, "update_interface") signalManager.connect("currency_updated", self, "update_interface")
signalManager.connect("kills_updated", self, "update_interface")
signalManager.connect("frees_updated", self, "update_interface")
signalManager.connect("terminal_activated", self, "start_timer") signalManager.connect("terminal_activated", self, "start_timer")
update_interface() update_interface()
@ -41,8 +37,6 @@ func update_interface() -> void:
var wallet = GlobalState.gsr.wallet var wallet = GlobalState.gsr.wallet
if levelState != null: if levelState != null:
wallet += levelState.currency wallet += levelState.currency
kills.text = "Kills: %s" % levelState.kills
frees.text = "Freed: %s" % levelState.frees
currency.text = "Orbs: %s" % wallet currency.text = "Orbs: %s" % wallet

View File

@ -58,34 +58,15 @@ margin_bottom = 354.0
[node name="Currency" type="Label" parent="HUDOverlay"] [node name="Currency" type="Label" parent="HUDOverlay"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false anchor_top = 1.0
margin_left = 3.0 anchor_bottom = 1.0
margin_top = 291.0 margin_left = 9.0
margin_right = 247.0 margin_top = -21.0
margin_bottom = 312.0 margin_right = 253.0
margin_bottom = -3.05176e-05
rect_scale = Vector2( 0.590909, 0.627907 ) rect_scale = Vector2( 0.590909, 0.627907 )
text = "Orbs: 100000000000000000" text = "Orbs: 100000000000000000"
[node name="Kills" type="Label" parent="HUDOverlay"]
unique_name_in_owner = true
visible = false
margin_left = 3.0
margin_top = 315.0
margin_right = 357.0
margin_bottom = 336.0
rect_scale = Vector2( 0.590909, 0.627907 )
text = "Destroyed Beings: 100000000000000000"
[node name="Frees" type="Label" parent="HUDOverlay"]
unique_name_in_owner = true
visible = false
margin_left = 3.0
margin_top = 339.0
margin_right = 317.0
margin_bottom = 360.0
rect_scale = Vector2( 0.590909, 0.627907 )
text = "Freed Beings: 100000000000000000"
[node name="GetBackTimer" type="Label" parent="HUDOverlay"] [node name="GetBackTimer" type="Label" parent="HUDOverlay"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false

View File

@ -6,10 +6,12 @@ export(String, FILE) onready var bus_resource_path = "res://src/Sounds/default_b
func _ready() -> void: func _ready() -> void:
if visible: if visible:
$"%MasterSlider".grab_focus() $"%MasterSlider".grab_focus()
func save() ->void:
var new_resource = AudioServer.generate_bus_layout()
ResourceSaver.save(bus_resource_path, new_resource)
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if visible && event.is_action("ui_cancel"): if visible && event.is_action("ui_cancel"):
var new_resource = AudioServer.generate_bus_layout()
ResourceSaver.save(bus_resource_path, new_resource)
$Panel/Back.emit_signal("button_up") $Panel/Back.emit_signal("button_up")

View File

@ -277,4 +277,5 @@ margin_bottom = 20.0
text = "80" text = "80"
align = 1 align = 1
[connection signal="button_up" from="Panel/Back" to="." method="save"]
[connection signal="button_up" from="Panel/Back" to="Panel/Back" method="_on_button_up"] [connection signal="button_up" from="Panel/Back" to="Panel/Back" method="_on_button_up"]

View File

@ -0,0 +1,17 @@
extends VBoxContainer
func initialize_with_progress(levelFullName: String) -> void:
if !GlobalState.get_progress().has(levelFullName):
return
if !GlobalState.get_progress()[levelFullName].has("froggies"):
return
var froggies : Dictionary = GlobalState.get_progress()[levelFullName]["froggies"]
for key in froggies.keys():
register_froggy(int(key), froggies[key])
func register_froggy(var count : int = 0, var freed: bool = false) -> void:
var frogo: String = "FreedFroggy" + str(count + 1)
var test = self.get_children()
get_node(frogo).visible = true
get_node(frogo + "/ImprisionedFroggy").visible = !freed

View File

@ -0,0 +1,152 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://assets/ui/froggy-freed-ui.png" type="Texture" id=1]
[ext_resource path="res://assets/ui/froggy-imprisoned-ui.png" type="Texture" id=2]
[ext_resource path="res://src/UserInterface/Screens/MainMenu/LevelCheckBox.gd" type="Script" id=3]
[ext_resource path="res://src/UserInterface/Buttons/AudibleCheckbox.gd" type="Script" id=4]
[node name="LevelCheckBox" type="VBoxContainer"]
margin_right = 116.0
margin_bottom = 56.0
focus_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 3 )
[node name="CheckBox" type="CheckBox" parent="."]
margin_right = 119.0
margin_bottom = 24.0
grow_horizontal = 0
grow_vertical = 0
text = "This is a level "
align = 1
icon_align = 1
expand_icon = true
script = ExtResource( 4 )
[node name="FreedFroggy1" type="TextureRect" parent="."]
unique_name_in_owner = true
visible = false
margin_top = 28.0
margin_right = 119.0
margin_bottom = 47.0
grow_horizontal = 2
grow_vertical = 2
focus_mode = 2
mouse_filter = 0
texture = ExtResource( 1 )
stretch_mode = 5
[node name="FreedFroggy2" type="TextureRect" parent="FreedFroggy1"]
unique_name_in_owner = true
visible = false
margin_left = 21.0
margin_right = 140.0
margin_bottom = 19.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 1 )
stretch_mode = 5
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1/FreedFroggy2"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="FreedFroggy3" type="TextureRect" parent="FreedFroggy1"]
unique_name_in_owner = true
visible = false
margin_left = 42.0
margin_right = 161.0
margin_bottom = 19.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 1 )
stretch_mode = 5
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1/FreedFroggy3"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="FreedFroggy4" type="TextureRect" parent="FreedFroggy1"]
unique_name_in_owner = true
visible = false
margin_left = 63.0
margin_right = 182.0
margin_bottom = 19.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 1 )
stretch_mode = 5
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1/FreedFroggy4"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="FreedFroggy5" type="TextureRect" parent="FreedFroggy1"]
unique_name_in_owner = true
visible = false
margin_left = 84.0
margin_right = 203.0
margin_bottom = 19.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 1 )
stretch_mode = 5
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1/FreedFroggy5"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="FreedFroggy6" type="TextureRect" parent="FreedFroggy1"]
unique_name_in_owner = true
visible = false
margin_left = 105.0
margin_right = 224.0
margin_bottom = 19.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 1 )
stretch_mode = 5
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1/FreedFroggy6"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="ImprisionedFroggy" type="TextureRect" parent="FreedFroggy1"]
margin_right = 38.0
margin_bottom = 19.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
[node name="HSeparator" type="HSeparator" parent="."]
margin_top = 28.0
margin_right = 119.0
margin_bottom = 32.0
[connection signal="focus_entered" from="." to="." method="_on_LevelCheckBox_focus_entered"]

View File

@ -2,8 +2,11 @@ extends ScrollContainer
onready var LEVELS_PATH = "res://src/Levels/" onready var LEVELS_PATH = "res://src/Levels/"
onready var BUTTON_GROUP : ButtonGroup = load("res://src/UserInterface/Screens/MainMenu/LevelSelectButtonGroup.tres") onready var BUTTON_GROUP : ButtonGroup = load("res://src/UserInterface/Screens/MainMenu/LevelSelectButtonGroup.tres")
onready var LEVEL_CHECK_BOX = load("res://src/UserInterface/Screens/MainMenu/LevelCheckBox.tscn")
onready var vbox: VBoxContainer = $VBoxContainer onready var vbox: VBoxContainer = $VBoxContainer
var prev_checkbox
func _ready() -> void: func _ready() -> void:
BUTTON_GROUP.connect("pressed", $"%PlayButton", "_level_selection_changed") BUTTON_GROUP.connect("pressed", $"%PlayButton", "_level_selection_changed")
_fill_level_list() _fill_level_list()
@ -26,19 +29,25 @@ func _fill_level_list():
func _spawn_level_options(levels: Array): func _spawn_level_options(levels: Array):
var first = true var first = true
for level in levels: for level in levels:
var check_box = AudibleCheckbox.new() var level_check_box = LEVEL_CHECK_BOX.instance()
vbox.add_child(level_check_box)
level_check_box.initialize_with_progress(LEVELS_PATH + level)
var check_box = level_check_box.get_node("CheckBox")
check_box.focus_mode = Control.FOCUS_ALL check_box.focus_mode = Control.FOCUS_ALL
check_box.focus_neighbour_left = $"%PlayButton".get_path() check_box.focus_neighbour_left = $"%PlayButton".get_path()
check_box.text = level.trim_suffix(".tscn") check_box.text = level.trim_suffix(".tscn")
check_box.set_button_group(BUTTON_GROUP) check_box.set_button_group(BUTTON_GROUP)
vbox.add_child(check_box)
if first: if first:
$"%PlayButton".focus_neighbour_right = check_box.get_path() $"%PlayButton".focus_neighbour_right = check_box.get_path()
$"%Controlls".focus_neighbour_right = check_box.get_path() $"%Controlls".focus_neighbour_right = check_box.get_path()
$"%QuitButton".focus_neighbour_right = check_box.get_path() $"%QuitButton".focus_neighbour_right = check_box.get_path()
check_box.pressed = true check_box.pressed = true
prev_checkbox = check_box
first = false first = false
else:
prev_checkbox.focus_neighbour_bottom = check_box.get_path()
check_box.focus_neighbour_top = prev_checkbox.get_path()
prev_checkbox = check_box
if GlobalState.gsr.last_played_level.ends_with(level): if GlobalState.gsr.last_played_level.ends_with(level):
check_box.pressed = true check_box.pressed = true
return return

View File

@ -3,3 +3,4 @@ extends Control
func _ready() -> void: func _ready() -> void:
$"%PlayButton".grab_focus() $"%PlayButton".grab_focus()
GlobalAudio.play_scene_independent("res://assets/sounds/Shopping For The Future (LOOP).wav","Music", -14, true)

View File

@ -228,14 +228,13 @@ margin_right = 130.0
margin_bottom = 110.0 margin_bottom = 110.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
focus_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
[node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/Panel/LevelList/VBoxContainer"] [node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/Panel/LevelList/VBoxContainer"]
visible = false visible = false
margin_right = 154.0 margin_right = 130.0
margin_bottom = 135.0 margin_bottom = 110.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
focus_neighbour_left = NodePath("../../../../Buttons/PlayButton") focus_neighbour_left = NodePath("../../../../Buttons/PlayButton")

View File

@ -21,7 +21,6 @@ func _unhandled_input(event: InputEvent) -> void:
if(event.is_action_pressed(action)): if(event.is_action_pressed(action)):
press_limit -= 1 press_limit -= 1
if press_limit == 0 : if press_limit == 0 :
# Should delete itself from the progress dictionary when destroyed
if visible: if visible:
$Label.visible = false $Label.visible = false
$TextureRect.visible = false $TextureRect.visible = false
@ -76,6 +75,8 @@ func _physics_process(delta: float) -> void:
func _on_Area_area_entered(area: Area2D) -> void: func _on_Area_area_entered(area: Area2D) -> void:
if !area.get_parent().visible:
return
var d = area.global_position - position var d = area.global_position - position
print(d) print(d)
if(abs(d.y) > tex_size.y * 2 - 1): if(abs(d.y) > tex_size.y * 2 - 1):

View File

@ -146,6 +146,7 @@ z_index = 10
script = ExtResource( 2 ) script = ExtResource( 2 )
action = "jump" action = "jump"
tutorial_text = "Press to Jump:" tutorial_text = "Press to Jump:"
press_limit = 1
[node name="Button" type="Sprite" parent="."] [node name="Button" type="Sprite" parent="."]
physics_interpolation_mode = 2 physics_interpolation_mode = 2

View File

@ -6,8 +6,7 @@ onready var levelName := get_tree().current_scene.filename
#TODO Easteregg pls #TODO Easteregg pls
var currency: = 0 setget set_currency var currency: = 0 setget set_currency
var deaths: = 0 setget set_deaths var deaths: = 0 setget set_deaths
var kills: = 0 setget set_kills var freed_frogs := []
var frees: = 0 setget set_frees
# TODO Rename probs # TODO Rename probs
var is_dead: = false setget set_dead var is_dead: = false setget set_dead
@ -19,9 +18,8 @@ func _ready() -> void:
func reset() -> void: func reset() -> void:
deaths = 0 deaths = 0
kills = 0
currency = 0 currency = 0
frees = 0 freed_frogs = []
# TODO Maybe not the place for this? # TODO Maybe not the place for this?
if GlobalState.gsr.progress_dict.has(levelName): if GlobalState.gsr.progress_dict.has(levelName):
GlobalState.gsr.progress_dict[levelName].erase("savepoint") GlobalState.gsr.progress_dict[levelName].erase("savepoint")
@ -33,17 +31,18 @@ func set_currency(value: int) -> void:
func set_deaths(value: int) -> void: func set_deaths(value: int) -> void:
deaths = value deaths = value
func set_kills(value: int) -> void:
kills = value
signalManager.emit_signal("kills_updated")
func set_frees(value: int) -> void:
frees = value
signalManager.emit_signal("frees_updated")
func set_dead(value: bool) -> void: func set_dead(value: bool) -> void:
is_dead = value is_dead = value
func register_frog(number: int, freed: bool = false) -> void:
update_global_state()
if(!GlobalState.gsr.progress_dict[levelName]["froggies"].has(number)):
GlobalState.gsr.progress_dict[levelName]["froggies"][number] = freed
GlobalState.save()
func free_a_frog(number: int) -> void:
freed_frogs.append(number)
func needs_tutorial(lesson: String) -> bool: func needs_tutorial(lesson: String) -> bool:
if(!GlobalState.gsr.tutorial_prompts.has(lesson)): if(!GlobalState.gsr.tutorial_prompts.has(lesson)):
return false return false
@ -64,6 +63,9 @@ func absolved_tutorial(lesson: String) -> void:
# Spends the currency when enough is available # Spends the currency when enough is available
# and returns true if so. Else it does not spend and return false. # and returns true if so. Else it does not spend and return false.
func spend_currency(cost: int) -> bool: func spend_currency(cost: int) -> bool:
# TODO member that
if(OS.is_debug_build()):
return true
if GlobalState.gsr.wallet + currency < cost: if GlobalState.gsr.wallet + currency < cost:
return false return false
var remainder = currency - cost var remainder = currency - cost
@ -75,6 +77,8 @@ func spend_currency(cost: int) -> bool:
return true return true
func _on_level_completed(): func _on_level_completed():
#if(OS.is_debug_build()):
# return
update_global_state() update_global_state()
reset() reset()
@ -83,18 +87,20 @@ func update_global_state() -> void:
var levelProgress : Dictionary = {} var levelProgress : Dictionary = {}
levelProgress["currency"] = currency levelProgress["currency"] = currency
levelProgress["kills"] = kills
levelProgress["deaths"] = deaths levelProgress["deaths"] = deaths
levelProgress["frees"] = frees
# TODO Doesnt account for multiple plays of same level # TODO Doesnt account for multiple plays of same level
if !progress_dict.has(levelName): if !progress_dict.has(levelName):
progress_dict[levelName] = levelProgress progress_dict[levelName] = levelProgress
else: else:
progress_dict[levelName]["currency"] = GlobalState.get_property_value(levelName,"currency") + currency progress_dict[levelName]["currency"] = GlobalState.get_property_value(levelName,"currency") + currency
progress_dict[levelName]["kills"] = GlobalState.get_property_value(levelName,"kills") + kills
progress_dict[levelName]["deaths"] = GlobalState.get_property_value(levelName,"deaths") + deaths progress_dict[levelName]["deaths"] = GlobalState.get_property_value(levelName,"deaths") + deaths
progress_dict[levelName]["frees"] = GlobalState.get_property_value(levelName,"frees") + frees if !progress_dict[levelName].has("froggies"):
progress_dict[levelName]["froggies"] = {}
else:
for frog_number in freed_frogs:
if progress_dict[levelName]["froggies"].has(frog_number):
progress_dict[levelName]["froggies"][frog_number] = true
# TODO Wallet is independant from progress_dict because??? # TODO Wallet is independant from progress_dict because???
GlobalState.set_wallet(GlobalState.gsr.wallet + currency) GlobalState.set_wallet(GlobalState.gsr.wallet + currency)
@ -102,9 +108,8 @@ func update_global_state() -> void:
func player_dying(animation_number: int = 0) -> void: func player_dying(animation_number: int = 0) -> void:
currency = 0 currency = 0
kills = 0
frees = 0
is_dead = true is_dead = true
freed_frogs = []
deaths += 1 deaths += 1
update_global_state() update_global_state()
deaths = 0 deaths = 0

View File

@ -0,0 +1,25 @@
extends Node
onready var players: Dictionary = {}
var disposable_player: AudioStreamPlayer
func play_scene_dependent(sound_name: String, bus: String = "Master", attenuation: float = 0.0, singleton = false) -> void:
if singleton && players.has(sound_name):
return
disposable_player = AudioStreamPlayer.new()
add_child(disposable_player)
disposable_player.stream = GlobalState.sound_library[sound_name]
disposable_player.volume_db = attenuation
disposable_player.bus = bus
disposable_player.play()
disposable_player.connect("finished", self, "dispose_player")
players[sound_name] = disposable_player
func dispose_player(player: AudioStreamPlayer = disposable_player) -> void:
if player == null: return
player.queue_free()
func stop_scene_dependent(sound_name: String):
if players.has(sound_name):
dispose_player(players[sound_name])
players.erase(sound_name)

View File

@ -0,0 +1,7 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://src/Utilities/SceneAudio.gd" type="Script" id=1]
[node name="SceneAudio" type="Node"]
pause_mode = 2
script = ExtResource( 1 )