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
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
edit/loop_end=476280
compress/mode=0

View File

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

View File

@ -17,7 +17,7 @@ force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
edit/loop_end=1878660
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"
type="StreamTexture"
path="res://.import/blobby1.png-02080f0b57c8ccaa15e26b1a3859acb0.stex"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://blobby1.png"
dest_files=[ "res://.import/blobby1.png-02080f0b57c8ccaa15e26b1a3859acb0.stex" ]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
[params]

View File

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

View File

@ -10,7 +10,7 @@
[ext_resource path="res://assets/effects/jump-point.png" type="Texture" id=8]
[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 11.9219, 10.0313 )
extents = Vector2( 14.9127, 5.98593 )
[sub_resource type="StreamTexture" id=62]
load_path = "res://.import/blobby-spritesheet.png-205c8efc79bec685345a637ed2dcfc9b.stex"
@ -240,6 +240,8 @@ priority = 2
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=171]
[sub_resource type="AnimationNodeStateMachineTransition" id=172]
switch_mode = 2
auto_advance = true
@ -260,6 +262,7 @@ switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=178]
priority = 0
[sub_resource type="AnimationNodeStateMachineTransition" id=137]
@ -273,8 +276,6 @@ auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=196]
[sub_resource type="AnimationNodeStateMachineTransition" id=203]
[sub_resource type="AnimationNodeStateMachine" id=47]
states/duckTurn/node = SubResource( 126 )
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/position = Vector2( 1981.07, 404.104 )
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/position = Vector2( 2119.34, 577.905 )
states/runToJump/position = Vector2( 2194.36, 651.238 )
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/position = Vector2( 1795.54, -308.991 )
states/walking/node = SubResource( 133 )
states/walking/position = Vector2( 1795.54, -54 )
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/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"
graph_offset = Vector2( 958.54, -77.431 )
graph_offset = Vector2( 1157.54, -22.431 )
[sub_resource type="AnimationNodeStateMachinePlayback" id=48]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 12, 9.981 )
extents = Vector2( 12, 8.99662 )
[sub_resource type="Animation" id=17]
length = 0.001
@ -3342,10 +3343,10 @@ tracks/10/loop_wrap = true
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"times": PoolRealArray( 0, 0.25, 0.5 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 1, 1 ) ]
"values": [ Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ) ]
}
[sub_resource type="Animation" id=99]
@ -4218,7 +4219,7 @@ process_priority = -1
collision_mask = 254
[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 )
shape = SubResource( 2 )
@ -4233,10 +4234,12 @@ visible = false
[node name="BlobbySprite" type="Sprite" parent="."]
material = ExtResource( 2 )
position = Vector2( 0, -16 )
scale = Vector2( -1, 1 )
texture = SubResource( 62 )
offset = Vector2( 1, 0 )
hframes = 6
vframes = 6
frame = 12
frame = 5
__meta__ = {
"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo="
}
@ -4245,7 +4248,6 @@ __meta__ = {
unique_name_in_owner = true
tree_root = SubResource( 47 )
anim_player = NodePath("../BlobbymationPlayer")
active = true
root_motion_track = NodePath(".")
parameters/playback = SubResource( 48 )
parameters/ducking/blend_position = 1.0
@ -4254,7 +4256,7 @@ parameters/idling/blend_position = 1.0
parameters/jumpToFall/blend_position = 1.0
parameters/jumping/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/walking/blend_position = 1.0
parameters/wallslideToJump/blend_position = 1.0
@ -4341,7 +4343,7 @@ position = Vector2( 0, -9 )
scale = Vector2( 0.48, 0.48 )
[node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]]
position = Vector2( -0.0184917, -10.0133 )
position = Vector2( 0.0392303, -10.002 )
shape = SubResource( 1 )
[node name="WallRaycasts" type="Node2D" parent="."]
@ -4350,13 +4352,13 @@ position = Vector2( 0, -1 )
[node name="LeftWallRaycast" type="Node2D" parent="WallRaycasts"]
[node name="Left_Wallcast1" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"]
position = Vector2( -12, -9.013 )
position = Vector2( -11.9763, -5 )
enabled = true
cast_to = Vector2( -2, 0 )
collision_mask = 40
[node name="Left_Wallcast2" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"]
position = Vector2( -12, -1.942 )
position = Vector2( -11.9763, 5 )
enabled = true
cast_to = Vector2( -2, 0 )
collision_mask = 40
@ -4364,13 +4366,13 @@ collision_mask = 40
[node name="RightWallRaycast" type="Node2D" parent="WallRaycasts"]
[node name="Right_Wallcast1" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"]
position = Vector2( 12.0573, -9.0133 )
position = Vector2( 12.0551, -5 )
enabled = true
cast_to = Vector2( 2, 0 )
collision_mask = 40
[node name="Right_Wallcast2" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"]
position = Vector2( 12.0573, -1.94163 )
position = Vector2( 12.0551, 5 )
enabled = true
cast_to = Vector2( 2, 0 )
collision_mask = 40

View File

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

View File

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

View File

@ -156,7 +156,6 @@ func update_navigation() -> void:
nav_agent.set_target_location(next_waypoint)
func die() -> void:
levelState.kills += 1
queue_free()
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 RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn")
var frog_number
var rope
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)
$WhatAreFrog.tilemap = tilemap
$WhatAreFrog.bind_to_anchor($RopeAnchor, movement_radius)
frog_number = $WhatAreFrog.frog_number
# Executes on frog death
# The old switchero
@ -54,9 +56,9 @@ func disconnect_rope() -> void:
func _on_FrogFreeButton_pushed() -> void:
$WhatAreFrog.levelState.frees += 1
$WhatAreFrog.is_bound = false
$WhatAreFrog/LeashAnchor.visible = false
$WhatAreFrog.remove_from_group("harmful")
levelState.free_a_frog(frog_number)
disconnect_rope()
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")
# Is given in blocks
export var frog_number := 0
export var vision_distance := 6.0
export var attack_jump_range := 6.0
export var loose_target_seconds := 3.0
@ -64,17 +65,24 @@ func _ready():
target_lost_timer.connect("timeout", self, "loose_target")
add_child(jump_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
#if(is_bound): add_to_group("harmful")
$LeashAnchor.visible = is_bound
func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void:
anchor = anchor_node
movement_radius = radius * block_size
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:
@ -108,7 +116,6 @@ func execute_movement(delta: float) -> void:
func die() -> void:
levelState.kills += 1
queue_free()

View File

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

View File

@ -1,7 +1,11 @@
extends Node
onready var players: Dictionary = {}
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()
add_child(disposable_player)
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.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_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://assets/sounds/Shopping For The Future (LOOP).wav" type="AudioStream" id=2]
[node name="GlobalAudio" type="Node"]
pause_mode = 2
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 == "":
break
var sound_file
if file_name.ends_with(".ogg") || file_name.ends_with(".wav"):
sound_file = load(path + "/" + file_name)
if file_name.ends_with(".import"):
sound_file = load(path + "/" + file_name.split(".import")[0])
sound_library[sound_file.resource_path] = sound_file
dir.list_dir_end()
@ -36,11 +36,20 @@ func save() -> void:
SaveManager.save_default()
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)):
gsr.progress_dict[levelName] = {}
gsr.progress_dict[levelName]["savepoint"] = position
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:
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has(propertyName):
return gsr.progress_dict[levelName][propertyName]

View File

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

View File

@ -3,13 +3,16 @@ extends Node2D
onready var levelState := get_tree().root.get_child(4).get_node("%LevelState")
func _ready() -> void:
if(GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$AnimationPlayer.play("rolloutflag")
if(GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$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 What should be saved when reaching a savepoint besides the position in the level
func _on_SaveArea_area_entered(area: Area2D) -> void:
#TODO Spawnheight fixed
if(!GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$AnimationPlayer.play("rolloutflag")
GlobalState.set_savepoint(levelState.levelName, global_position + Vector2(0,18))
#TODO Spawnheight fixed
if(!GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)):
$AnimationPlayer.play("rolloutflag")
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 ""
func level_completion() -> void:
GlobalState.remove_savepoint(levelName)
signalManager.emit_signal("level_completed")
func teleport() -> void:
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_stereo.wav", "Music", -8)
get_tree().paused = true
anim_player.play("fade_in")
# TODO This doesn't pause the game but should

View File

@ -30,6 +30,7 @@ func selfActivate():
elevator.monitoring = true
#TODO dis importante
activatorArea.set_deferred("monitoring", false)
$GetBackMusic.play()
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://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/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]
interpolation_mode = 2
@ -148,6 +149,12 @@ one_shot = true
[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_exited" from="ActivatorArea" to="." method="_on_ActivatorArea_area_exited"]
[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 signalManager := get_tree().root.get_child(4).get_node("%SignalManager")
onready var unactivatable_timer := $Timer
export(int) var frog_number := 0
var activatable = false
func _ready() -> void:
$Digit.frame = frog_number
func _process(delta):
if activatable && Input.is_action_just_released("interact"):
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://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/TutorialThingy.tscn" type="PackedScene" id=16]
[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]
@ -123,41 +125,19 @@ drag_margin_top = 0.1
drag_margin_bottom = 0.1
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 0
frame = 7
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 8
frame = 1
[node name="Blobby" parent="." instance=ExtResource( 8 )]
unique_name_in_owner = true
position = Vector2( -156, -51 )
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"]
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 )]
position = Vector2( 1338, 198 )
@ -245,11 +225,20 @@ press_limit = 2
position = Vector2( 1440, -90 )
action = "interact"
tutorial_text = "Press to interact:"
press_limit = 1
[node name="Button" parent="TutorialThingy" index="0"]
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"]
[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://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/UserInterface/TutorialComboThingy.tscn" type="PackedScene" id=18]
[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]
@ -123,41 +124,19 @@ wait_time = 20.0
unique_name_in_owner = true
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 2
frame = 10
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 1
frame = 9
[node name="Blobby" parent="." instance=ExtResource( 10 )]
unique_name_in_owner = true
position = Vector2( -180, 112 )
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"]
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 )]
position = Vector2( 416, 170 )
@ -273,6 +252,13 @@ goal_state = "runToJump"
tutorial_text = "Move and press to runjump:"
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"]
[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/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/Contraptions/Triggers/GateButton.tscn" type="PackedScene" id=18]
[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]
0/name = "platform-plants.png 0"
@ -78,8 +79,8 @@ unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )
[node name="TileMap" type="TileMap" parent="."]
unique_name_in_owner = true
@ -183,6 +184,13 @@ position = Vector2( 609, 67 )
speed = 300
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"]
[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/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/Actors/Enemies/Flyer.tscn" type="PackedScene" id=13]
[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]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4]
[sub_resource type="AnimationNodeStateMachinePlayback" id=7]
[sub_resource type="TileSet" id=5]
0/name = "platform-plants.png 0"
@ -66,18 +67,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 4
frame = 6
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 3
frame = 5
[node name="Blobby" parent="." instance=ExtResource( 9 )]
unique_name_in_owner = true
position = Vector2( -186, 110 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 7 )
[node name="VendingMachine" parent="." instance=ExtResource( 19 )]
position = Vector2( 48, 100 )
@ -137,6 +138,13 @@ position = Vector2( 0, 23 )
[node name="Position2D3" parent="Flyer/PatrolPath" index="1"]
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"]
[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/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/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://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/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/Legacy/Greenhouse.tscn" type="PackedScene" id=21]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4]
[sub_resource type="AnimationNodeStateMachinePlayback" id=1]
[node name="LevelTemplate" type="Node2D"]
script = ExtResource( 19 )
@ -44,18 +45,15 @@ wait_time = 20.0
unique_name_in_owner = true
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 4
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 8
frame = 0
[node name="Blobby" parent="." instance=ExtResource( 15 )]
unique_name_in_owner = true
position = Vector2( 251, -24 )
position = Vector2( 746, -195 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 1 )
[node name="GateButton" parent="." instance=ExtResource( 5 )]
position = Vector2( 371, -45 )
@ -454,6 +452,13 @@ scale = Vector2( 1, 1.5 )
position = Vector2( 48, -7 )
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="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"]
@ -461,6 +466,7 @@ scale = Vector2( 1, 1.5 )
[editable path="LevelState"]
[editable path="UserInterface"]
[editable path="UserInterface/HUD"]
[editable path="UserInterface/PauseScreen"]
[editable path="BlobbyCam"]
[editable path="Blobby"]
[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/Actors/BlobbyCam.tscn" type="PackedScene" id=2]
[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/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/Environment/Legacy/AlienShipTileSet.tres" type="TileSet" id=8]
[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/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/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/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=19]
[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]
@ -47,18 +48,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 5
frame = 3
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 7
frame = 5
[node name="Blobby" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true
position = Vector2( 3.8147e-06, 144 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )
[node name="SimpleEnemy" parent="." instance=ExtResource( 10 )]
position = Vector2( 264, -36 )
@ -67,9 +68,6 @@ position = Vector2( 264, -36 )
position = Vector2( 837, 72 )
aggressive = false
[node name="FlyerSprite" parent="Flyer" index="2"]
frame = 0
[node name="AnimationTree" parent="Flyer/FlyerSprite" index="1"]
parameters/playback = SubResource( 5 )
@ -210,12 +208,6 @@ position = Vector2( 648, 0 )
[node name="Spikes29" parent="Spikes" instance=ExtResource( 14 )]
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 )]
position = Vector2( 696, 27 )
@ -362,6 +354,17 @@ scale = Vector2( 1, 1.5 )
position = Vector2( 18, -6.72727 )
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="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"]
@ -375,4 +378,3 @@ scale = Vector2( 1, 1.5 )
[editable path="TileMap"]
[editable path="BoundFrog"]
[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/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/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://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/ObstacleObjects/Mine.tscn" type="PackedScene" id=11]
[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/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]
resource_name = "Horizontal"
@ -113,16 +114,19 @@ unique_name_in_owner = true
drag_margin_top = 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"]
frame = 11
frame = 1
[node name="Blobby" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true
position = Vector2( -168, 95 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 9 )
[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 )
@ -324,6 +328,13 @@ position = Vector2( 648, -204 )
[node name="Coin4" parent="." instance=ExtResource( 1 )]
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"]
[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://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/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]
0/name = "platform-plants.png 0"
@ -48,6 +48,8 @@ __meta__ = {
[node name="SignalManager" parent="." instance=ExtResource( 2 )]
[node name="SceneAudio" parent="." instance=ExtResource( 13 )]
[node name="LevelState" parent="." instance=ExtResource( 3 )]
unique_name_in_owner = true
@ -62,18 +64,18 @@ unique_name_in_owner = true
drag_margin_bottom = 0.3
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 0
frame = 8
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 13
frame = 7
[node name="Blobby" parent="." instance=ExtResource( 7 )]
unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 )
scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )
[node name="TileMap" type="TileMap" parent="."]
unique_name_in_owner = true
@ -106,12 +108,12 @@ position = Vector2( 36, -8 )
scale = Vector2( 0.5, 0.5 )
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 )
volume_db = -14.994
autoplay = true
[node name="GetBackMusic" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 13 )
bus = "Music"
[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://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]
length = 0.001
@ -60,6 +61,14 @@ collision_layer = 16
collision_mask = 0
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"]
position = Vector2( 0, 8 )
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://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]
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="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"]

View File

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

View File

@ -90,3 +90,8 @@ func _on_EnteringVelocityDetector_area_entered(area: Area2D) -> void:
if area.name == "BlobbySkin":
if area.get_parent().velocity.y > 0:
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://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]
extents = Vector2( 11.4863, 2.10568 )
@ -44,5 +45,12 @@ collision_mask = 43
position = Vector2( 0.00395775, -1.07744 )
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_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
[resource]
bus/0/volume_db = -6.0206
bus/0/volume_db = -1.9382
bus/1/name = "Music"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = inf_neg
bus/1/volume_db = -10.4576
bus/1/send = "Master"
bus/1/effect/0/effect = SubResource( 1 )
bus/1/effect/0/enabled = false

View File

@ -226,7 +226,10 @@ func _enter_state(new_state, old_state):
anim_state_playback.travel("ducking")
states.jump:
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:
if parent.rotation == 0 || !parent.snap_possible:
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/"
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().get_current_scene().queue_free()
get_tree().paused = false

View File

@ -3,6 +3,5 @@ extends AudibleButton
onready var levelState := get_tree().root.get_child(4).get_node("%LevelState")
func _on_button_up() -> void:
levelState.kills = 0
get_tree().paused = false
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 timer: Label = $HUDOverlay/GetBackTimer
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 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():
#TODO Connect what HOW?
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")
update_interface()
@ -41,8 +37,6 @@ func update_interface() -> void:
var wallet = GlobalState.gsr.wallet
if levelState != null:
wallet += levelState.currency
kills.text = "Kills: %s" % levelState.kills
frees.text = "Freed: %s" % levelState.frees
currency.text = "Orbs: %s" % wallet

View File

@ -58,34 +58,15 @@ margin_bottom = 354.0
[node name="Currency" type="Label" parent="HUDOverlay"]
unique_name_in_owner = true
visible = false
margin_left = 3.0
margin_top = 291.0
margin_right = 247.0
margin_bottom = 312.0
anchor_top = 1.0
anchor_bottom = 1.0
margin_left = 9.0
margin_top = -21.0
margin_right = 253.0
margin_bottom = -3.05176e-05
rect_scale = Vector2( 0.590909, 0.627907 )
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"]
unique_name_in_owner = true
visible = false

View File

@ -7,9 +7,11 @@ func _ready() -> void:
if visible:
$"%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:
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")

View File

@ -277,4 +277,5 @@ margin_bottom = 20.0
text = "80"
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"]

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 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
var prev_checkbox
func _ready() -> void:
BUTTON_GROUP.connect("pressed", $"%PlayButton", "_level_selection_changed")
_fill_level_list()
@ -26,19 +29,25 @@ func _fill_level_list():
func _spawn_level_options(levels: Array):
var first = true
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_neighbour_left = $"%PlayButton".get_path()
check_box.text = level.trim_suffix(".tscn")
check_box.set_button_group(BUTTON_GROUP)
vbox.add_child(check_box)
if first:
$"%PlayButton".focus_neighbour_right = check_box.get_path()
$"%Controlls".focus_neighbour_right = check_box.get_path()
$"%QuitButton".focus_neighbour_right = check_box.get_path()
check_box.pressed = true
prev_checkbox = check_box
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):
check_box.pressed = true
return

View File

@ -3,3 +3,4 @@ extends Control
func _ready() -> void:
$"%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
grow_horizontal = 2
grow_vertical = 2
focus_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/Panel/LevelList/VBoxContainer"]
visible = false
margin_right = 154.0
margin_bottom = 135.0
margin_right = 130.0
margin_bottom = 110.0
grow_horizontal = 2
grow_vertical = 2
focus_neighbour_left = NodePath("../../../../Buttons/PlayButton")

View File

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

View File

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

View File

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