feat: frog free progress ui, animtree bugfix
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
BIN
assets/ui/froggy-freed-ui.png
Normal file
|
After Width: | Height: | Size: 340 B |
35
assets/ui/froggy-freed-ui.png.import
Normal 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
|
||||
BIN
assets/ui/froggy-imprisoned-ui.png
Normal file
|
After Width: | Height: | Size: 319 B |
35
assets/ui/froggy-imprisoned-ui.png.import
Normal 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
|
||||
BIN
assets/ui/froggy-ui-collected.aseprite
Normal file
BIN
assets/ui/froggy-ui-collected.png
Normal file
|
After Width: | Height: | Size: 511 B |
35
assets/ui/froggy-ui-collected.png.import
Normal 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
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 272 B |
@ -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]
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"):
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -8,6 +8,9 @@ script = ExtResource( 2 )
|
||||
progress_dict = {
|
||||
}
|
||||
wallet = 0
|
||||
last_played_level = ""
|
||||
settings = {
|
||||
}
|
||||
tutorial_prompts = {
|
||||
}
|
||||
input_map = {
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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"]
|
||||
|
||||
|
||||
@ -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 )
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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")
|
||||
|
||||
|
||||
@ -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"]
|
||||
|
||||
17
src/UserInterface/Screens/MainMenu/LevelCheckBox.gd
Normal 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
|
||||
152
src/UserInterface/Screens/MainMenu/LevelCheckBox.tscn
Normal 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"]
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
25
src/Utilities/SceneAudio.gd
Normal 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)
|
||||
7
src/Utilities/SceneAudio.tscn
Normal 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 )
|
||||