diff --git a/assets/contraption/ShieldVendingMachine.aseprite b/assets/contraption/ShieldVendingMachine.aseprite new file mode 100644 index 0000000..ab33c80 Binary files /dev/null and b/assets/contraption/ShieldVendingMachine.aseprite differ diff --git a/assets/contraption/ShieldVendingMachine.png b/assets/contraption/ShieldVendingMachine.png new file mode 100644 index 0000000..024166f Binary files /dev/null and b/assets/contraption/ShieldVendingMachine.png differ diff --git a/assets/contraption/ShieldVendingMachine.png.import b/assets/contraption/ShieldVendingMachine.png.import new file mode 100644 index 0000000..d656d05 --- /dev/null +++ b/assets/contraption/ShieldVendingMachine.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/ShieldVendingMachine.png-fbf356a433e63de886ffa987b75faa69.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/contraption/ShieldVendingMachine.png" +dest_files=[ "res://.import/ShieldVendingMachine.png-fbf356a433e63de886ffa987b75faa69.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 diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index b003aaa..daa8250 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -4603,7 +4603,6 @@ frame = 8 unique_name_in_owner = true position = Vector2( 0, -9 ) scale = Vector2( 0.48, 0.48 ) -z_index = 1 [node name="BlobbyBody" type="CollisionShape2D" parent="." groups=["player"]] position = Vector2( 0.0392303, -10.002 ) diff --git a/src/Actors/Enemies/Beings/BoundFrog.gd b/src/Actors/Enemies/Beings/BoundFrog.gd index 979a1c0..2100278 100644 --- a/src/Actors/Enemies/Beings/BoundFrog.gd +++ b/src/Actors/Enemies/Beings/BoundFrog.gd @@ -26,6 +26,12 @@ func _on_Level_ready() -> void: # The old switchero func _on_WhatAreFrog_child_exiting_tree(_node:Node) -> void: if(is_first_signal): + disconnect_rope() + is_first_signal = false + else: + pass + +func disconnect_rope() -> void: var anchor = RopeAnchor.instance() anchor.mode = 0 add_child(anchor) @@ -40,6 +46,10 @@ func _on_WhatAreFrog_child_exiting_tree(_node:Node) -> void: rope.rope_end_joint = $RopeAnchor/cshape/pjoint rope.rope_start_joint = anchor.get_node("cshape/pjoint") rope.spawn_rope(anchor.global_position, $RopeAnchor.global_position, movement_radius, false) - is_first_signal = false - else: - pass + + +func _on_WhyButton_button_pushed() -> void: + $WhatAreFrog.levelState.frees += 1 + $WhatAreFrog.is_bound = false + disconnect_rope() + is_first_signal = false diff --git a/src/Actors/Enemies/Beings/Caterpillar.gd b/src/Actors/Enemies/Beings/Caterpillar.gd index 2067978..85bd6f9 100644 --- a/src/Actors/Enemies/Beings/Caterpillar.gd +++ b/src/Actors/Enemies/Beings/Caterpillar.gd @@ -16,6 +16,7 @@ func _ready() -> void: func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return + $StompDetector.remove_from_group("weakpoint") get_node("EnemyBody").disabled = true die() diff --git a/src/Actors/Enemies/Beings/DartingEnemy.gd b/src/Actors/Enemies/Beings/DartingEnemy.gd index 21cde0a..1552be9 100644 --- a/src/Actors/Enemies/Beings/DartingEnemy.gd +++ b/src/Actors/Enemies/Beings/DartingEnemy.gd @@ -7,6 +7,7 @@ func _ready() -> void: func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return + $StompDetector.remove_from_group("weakpoint") get_node("EnemyBody").disabled = true die() diff --git a/src/Actors/Enemies/Beings/Enemy.gd b/src/Actors/Enemies/Beings/Enemy.gd index 9a55523..0738836 100644 --- a/src/Actors/Enemies/Beings/Enemy.gd +++ b/src/Actors/Enemies/Beings/Enemy.gd @@ -11,6 +11,7 @@ func _ready() -> void: func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return + $StompDetector.remove_from_group("weakpoint") get_node("EnemyBody").disabled = true die() diff --git a/src/Actors/Enemies/Beings/SimpleEnemy.gd b/src/Actors/Enemies/Beings/SimpleEnemy.gd index 7aa031b..574881c 100644 --- a/src/Actors/Enemies/Beings/SimpleEnemy.gd +++ b/src/Actors/Enemies/Beings/SimpleEnemy.gd @@ -10,6 +10,7 @@ func _ready() -> void: func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return + $StompDetector.remove_from_group("weakpoint") get_node("EnemyBody").disabled = true die() diff --git a/src/Actors/Enemies/Beings/SmortEnemy.gd b/src/Actors/Enemies/Beings/SmortEnemy.gd index 8968b5d..b001aa1 100644 --- a/src/Actors/Enemies/Beings/SmortEnemy.gd +++ b/src/Actors/Enemies/Beings/SmortEnemy.gd @@ -10,6 +10,7 @@ func _ready() -> void: func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return + $StompDetector.remove_from_group("weakpoint") get_node("EnemyBody").disabled = true die() diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.gd b/src/Actors/Enemies/Beings/WhatAreFrog.gd index fcff03e..60b3911 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.gd +++ b/src/Actors/Enemies/Beings/WhatAreFrog.gd @@ -71,6 +71,8 @@ func _on_StompDetector_body_entered(body: Node) -> void: return if body.is_in_group("player"): remove_from_group("harmful") + $StompDetector.remove_from_group("weakpoint") + $FrogSprite/AnimationTree.active = false is_hurt = true @@ -172,6 +174,8 @@ func hunting() -> Vector2: if(target != null && !was_target_freed && sign((target.global_position - global_position).x) != get_facing_direction()): + # TODO Waits in front of too small tunnels if it sees the target on the other side + # It's ok behavior for now reverse_facing_direction() return velocity @@ -289,16 +293,17 @@ func correct_jump_direction(v: Vector2) -> Vector2: # Check the highest point for collision # Calculate safe jump height and then a safe jump velocity func consider_jump_headspace(v: Vector2) -> Vector2: - var height = calculate_jump_height(v) + var height = calculate_jump_height(v) var distance = calculate_jump_distance(v) var angle = (v * get_facing_direction()).angle() # Half distance is an estimate of the jumps apex() #TODO Consider sprite size for height - var height_collider = check_feeler(Vector2(get_facing_direction()*(distance/2), (-height)), Vector2(0,-23)) + var height_collider = check_feeler(Vector2(get_facing_direction()*(distance/2), -(height+23))) if(height_collider != null): var collision_point = feeler_raycast.get_collision_point() var target_height = collision_point.y - (feeler_raycast.global_position.y - 23) - var new_angle = angle * (0.75 if target_height > -26 else 0.86) + print(feeler_raycast.global_position) + var new_angle = angle * (0.75 if target_height > -26 else 0.95) var new_distance = default_jump_distance * (0.66 if target_height > -26 else 0.75) v = velocity_for_jump_distance(new_distance, abs(new_angle)) v = correct_jump_direction(v) diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.tscn b/src/Actors/Enemies/Beings/WhatAreFrog.tscn index ec75aad..a845f1d 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.tscn +++ b/src/Actors/Enemies/Beings/WhatAreFrog.tscn @@ -253,10 +253,10 @@ tracks/1/keys = { } [sub_resource type="AnimationNodeAnimation" id=42] -animation = "searchingLeft" +animation = "idleHappyLeft" [sub_resource type="AnimationNodeAnimation" id=43] -animation = "searching" +animation = "idleHappy" [sub_resource type="AnimationNodeBlendSpace1D" id=9] blend_point_0/node = SubResource( 42 ) @@ -374,6 +374,7 @@ valign = 1 [node name="FrogSprite" type="Sprite" parent="."] unique_name_in_owner = true position = Vector2( 0, -7 ) +scale = Vector2( -1, 1 ) texture = ExtResource( 1 ) hframes = 2 vframes = 4 @@ -395,7 +396,7 @@ anim_player = NodePath("../AnimationPlayer") active = true root_motion_track = NodePath(".:frame") parameters/playback = SubResource( 11 ) -parameters/idleHappy/blend_position = 1.0 +parameters/idleHappy/blend_position = -1.00141 parameters/idleMean/blend_position = 1.0 parameters/liftOff/blend_position = 1.0 parameters/midJumping/blend_position = 1.0 diff --git a/src/Contraptions/Portal/Portal.gd b/src/Contraptions/Portal/Portal.gd index 4b67cd6..ba583cd 100644 --- a/src/Contraptions/Portal/Portal.gd +++ b/src/Contraptions/Portal/Portal.gd @@ -19,16 +19,14 @@ func update_level_achievements() -> void: levelProgress["kills"] = levelState.kills levelProgress["deaths"] = levelState.deaths levelProgress["frees"] = levelState.frees - - progress_dict[levelName] = levelProgress - # if !progress_dict.has(levelName): - # progress_dict[levelName] = levelProgress - # else: - # progress_dict[levelName]["currency"] = progress_dict[levelName]["currency"] + levelState.currency - # progress_dict[levelName]["kills"] = progress_dict[levelName]["kills"] + levelState.kills - # progress_dict[levelName]["deaths"] = progress_dict[levelName]["deaths"] + levelState.deaths - # progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + levelState.frees + if !progress_dict.has(levelName): + progress_dict[levelName] = levelProgress + else: + progress_dict[levelName]["currency"] = progress_dict[levelName]["currency"] + levelState.currency + progress_dict[levelName]["kills"] = progress_dict[levelName]["kills"] + levelState.kills + progress_dict[levelName]["deaths"] = progress_dict[levelName]["deaths"] + levelState.deaths + progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + levelState.frees GlobalState.set_progress(progress_dict) diff --git a/src/Contraptions/Triggers/ElevatorButton.gd b/src/Contraptions/Triggers/ElevatorButton.gd index 8aaaffe..f406785 100644 --- a/src/Contraptions/Triggers/ElevatorButton.gd +++ b/src/Contraptions/Triggers/ElevatorButton.gd @@ -7,7 +7,7 @@ onready var elevator = get_node("./Portal") onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") onready var unactivatable_timer := $Timer -var activatable = true +var activatable = false func _process(delta): if activatable && Input.is_action_just_released("interact"): @@ -25,12 +25,12 @@ func selfActivate(): func _on_ActivatorArea_area_entered(area:Area2D) -> void: - if area.is_in_group("player"): + $Label.visible = true activatable = true func _on_ActivatorArea_area_exited(area:Area2D) -> void: - if area.is_in_group("player"): unactivatable_timer.start() func _on_Timer_timeout(): + $Label.visible = false activatable = false diff --git a/src/Contraptions/Triggers/ElevatorButton.tscn b/src/Contraptions/Triggers/ElevatorButton.tscn index b79d3f5..9ef9564 100644 --- a/src/Contraptions/Triggers/ElevatorButton.tscn +++ b/src/Contraptions/Triggers/ElevatorButton.tscn @@ -89,6 +89,7 @@ anims/onning = SubResource( 13 ) unique_name_in_owner = true position = Vector2( 0, -6 ) collision_layer = 24 +monitorable = false [node name="ActivatorAreaShape" type="CollisionShape2D" parent="ActivatorArea"] unique_name_in_owner = true @@ -96,8 +97,18 @@ position = Vector2( 0, 3 ) shape = SubResource( 18 ) [node name="Timer" type="Timer" parent="."] -wait_time = 0.1 +wait_time = 0.333 one_shot = true +[node name="Label" type="Label" parent="."] +visible = false +margin_left = -5.0 +margin_top = -26.0 +margin_right = 13.0 +margin_bottom = -12.0 +rect_scale = Vector2( 0.590909, 0.627907 ) +text = "[e]" + [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"] diff --git a/src/Contraptions/Triggers/WhyButton.gd b/src/Contraptions/Triggers/WhyButton.gd index f0ea3d7..5598c9c 100644 --- a/src/Contraptions/Triggers/WhyButton.gd +++ b/src/Contraptions/Triggers/WhyButton.gd @@ -1,10 +1,12 @@ extends Node2D -onready var buttonPlayer = $"%ButtonPlayer" -onready var activatorArea = $"%ActivatorArea" -onready var indicator1Player = $"%Indicator1Player" -onready var indicator2Player = $"%Indicator2Player" -onready var indicator3Player = $"%Indicator3Player" +signal button_pushed + +onready var buttonPlayer = $Button/ButtonPlayer +onready var activatorArea = $ActivatorArea +onready var indicator1Player = $Indicator1/Indicator1Player +onready var indicator2Player = $Indicator2/Indicator2Player +onready var indicator3Player = $Indicator3/Indicator3Player export var buttonID: int; @@ -14,6 +16,7 @@ func selfActivate(): buttonPlayer.play("pushing") #TODO dis importante activatorArea.set_deferred("monitoring", false) + emit_signal("button_pushed") func activateIDIndicator(id: int): var selfPlayerString = "indicator"+String(id)+"Player" diff --git a/src/Contraptions/Triggers/WhyButton.tscn b/src/Contraptions/Triggers/WhyButton.tscn index 9c16982..8781620 100644 --- a/src/Contraptions/Triggers/WhyButton.tscn +++ b/src/Contraptions/Triggers/WhyButton.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=12 format=2] [ext_resource path="res://src/Contraptions/Triggers/WhyButton.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] -[sub_resource type="Animation" id=2] +[sub_resource type="Animation" id=20] resource_name = "pushing" length = 0.5 tracks/0/type = "value" @@ -20,7 +20,7 @@ tracks/0/keys = { "values": [ 0.0, 1.0, 2.0 ] } -[sub_resource type="Animation" id=6] +[sub_resource type="Animation" id=21] length = 0.1 tracks/0/type = "value" tracks/0/path = NodePath(".:frame") @@ -113,28 +113,25 @@ tracks/0/keys = { "values": [ 1.0, 2.0, 3.0, 4.0 ] } -[sub_resource type="RectangleShape2D" id=4] +[sub_resource type="RectangleShape2D" id=22] extents = Vector2( 4, 1 ) -[sub_resource type="RectangleShape2D" id=3] -extents = Vector2( 6, 1 ) - [node name="WhyButton" type="Node2D"] +position = Vector2( 488, 336 ) script = ExtResource( 1 ) +buttonID = 2 [node name="Button" type="Sprite" parent="."] position = Vector2( 0, -6 ) texture = ExtResource( 2 ) hframes = 2 vframes = 2 -frame = 2 __meta__ = { "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PVNwcml0ZS9BbmltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvbmV1dHJhbCBvYmplY3QvYnV0dG9uLmFzZXByaXRlCmxheWVyfD0Kb3BfZXhwfD1GYWxzZQpvX2ZvbGRlcnw9Cm9fbmFtZXw9Cm9ubHlfdmlzaWJsZXw9RmFsc2UKb19leF9wfD0K" } [node name="ButtonPlayer" type="AnimationPlayer" parent="Button"] -unique_name_in_owner = true -anims/pushing = SubResource( 2 ) +anims/pushing = SubResource( 20 ) [node name="Indicator1" type="Sprite" parent="."] position = Vector2( -3, -1 ) @@ -148,8 +145,7 @@ __meta__ = { } [node name="Indicator1Player" type="AnimationPlayer" parent="Indicator1"] -unique_name_in_owner = true -anims/offing = SubResource( 6 ) +anims/offing = SubResource( 21 ) anims/onning = SubResource( 8 ) [node name="Indicator2" type="Sprite" parent="."] @@ -158,13 +154,11 @@ z_index = 1 texture = ExtResource( 3 ) hframes = 3 vframes = 3 -frame = 4 __meta__ = { "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUluZGljYXRvcjIvQW5pbWF0aW9uUGxheWVyCnNvdXJjZXw9cmVzOi8vYXNzZXRzL25ldXRyYWwgb2JqZWN0L2J1dHRvblN0YXRlSW5kaWNhdG9yLmFzZXByaXRlCmxheWVyfD0Kb3BfZXhwfD1GYWxzZQpvX2ZvbGRlcnw9Cm9fbmFtZXw9Cm9ubHlfdmlzaWJsZXw9RmFsc2UKb19leF9wfD0K" } [node name="Indicator2Player" type="AnimationPlayer" parent="Indicator2"] -unique_name_in_owner = true anims/offing = SubResource( 10 ) anims/onning = SubResource( 13 ) @@ -180,27 +174,16 @@ __meta__ = { } [node name="Indicator3Player" type="AnimationPlayer" parent="Indicator3"] -unique_name_in_owner = true anims/offing = SubResource( 14 ) anims/onning = SubResource( 19 ) [node name="ActivatorArea" type="Area2D" parent="."] -unique_name_in_owner = true -position = Vector2( 0, -6 ) -collision_layer = 24 - -[node name="ActivatorAreaShape" type="CollisionShape2D" parent="ActivatorArea"] -unique_name_in_owner = true -position = Vector2( 0, 3 ) -shape = SubResource( 4 ) - -[node name="ButtonBody" type="StaticBody2D" parent="."] -unique_name_in_owner = true position = Vector2( 0, -6 ) collision_layer = 64 +monitorable = false -[node name="CollisionShape2D" type="CollisionShape2D" parent="ButtonBody"] -position = Vector2( 0, 5 ) -shape = SubResource( 3 ) +[node name="ActivatorAreaShape" type="CollisionShape2D" parent="ActivatorArea"] +position = Vector2( 0, 3 ) +shape = SubResource( 22 ) [connection signal="area_entered" from="ActivatorArea" to="." method="_on_ActivatorArea_area_entered"] diff --git a/src/Contraptions/VendingMachine.gd b/src/Contraptions/VendingMachine.gd new file mode 100644 index 0000000..492977a --- /dev/null +++ b/src/Contraptions/VendingMachine.gd @@ -0,0 +1,34 @@ +extends Node2D + +onready var activatorArea = $"%ActivatorArea" +onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var blobby := $"../%Blobby" +onready var unactivatable_timer := $Timer + +var activatable = false + + +func _process(delta): + # TODO Global currency count?? Maybe just level intern currency + if activatable && Input.is_action_just_released("interact") && levelState.currency >= 3: + levelState.currency -= 3 + selfActivate() + +func selfActivate(): + #TODO Is a event for blobby himself + blobby.get_node("BubbleShieldViewport/IridescenceBall").visible = true + #TODO dis importante + activatorArea.set_deferred("monitoring", false) + + +func _on_ActivatorArea_area_entered(area:Area2D) -> void: + $Label.visible = true + activatable = true + +func _on_ActivatorArea_area_exited(area:Area2D) -> void: + unactivatable_timer.start() + +func _on_Timer_timeout(): + $Label.visible = false + activatable = false diff --git a/src/Contraptions/VendingMachine.tscn b/src/Contraptions/VendingMachine.tscn new file mode 100644 index 0000000..b885d24 --- /dev/null +++ b/src/Contraptions/VendingMachine.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://assets/contraption/ShieldVendingMachine.png" type="Texture" id=1] +[ext_resource path="res://src/Contraptions/VendingMachine.gd" type="Script" id=2] + +[sub_resource type="CircleShape2D" id=1] +radius = 18.0 + +[node name="VendingMachine" type="Node2D"] +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +z_index = -1 +texture = ExtResource( 1 ) + +[node name="ActivatorArea" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2( 0, -6 ) +collision_layer = 24 +monitorable = false + +[node name="ActivatorAreaShape" type="CollisionShape2D" parent="ActivatorArea"] +unique_name_in_owner = true +position = Vector2( 0, 3 ) +shape = SubResource( 1 ) + +[node name="Timer" type="Timer" parent="."] +wait_time = 0.333 +one_shot = true + +[node name="Label" type="Label" parent="."] +visible = false +margin_left = -5.0 +margin_top = -26.0 +margin_right = 13.0 +margin_bottom = -12.0 +rect_scale = Vector2( 0.590909, 0.627907 ) +text = "[e]" + +[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"] diff --git a/src/Environment/ShaderGrass.gd b/src/Environment/ShaderGrass.gd index d57afe7..faec8c5 100644 --- a/src/Environment/ShaderGrass.gd +++ b/src/Environment/ShaderGrass.gd @@ -7,9 +7,9 @@ var last_distance: Vector2 = Vector2(100,100) # TODO Incorporate other enteties and highlight mass differences var time = 0 var radius = 15 -var v_radius = 15 -var draft_radius = 20 -var interact_power = 0.04 +export var v_radius = 15 +export var draft_radius = 20 +export var interact_power = 0.04 var rand = rand_range(1,1.2) var displacement_coeff: Vector2 = Vector2(1.0,0) var saved_displacement diff --git a/src/Environment/ShaderGrass.tscn b/src/Environment/ShaderGrass.tscn index a22acd6..90efe5a 100644 --- a/src/Environment/ShaderGrass.tscn +++ b/src/Environment/ShaderGrass.tscn @@ -11,6 +11,9 @@ [node name="ShaderGrass" type="Node2D"] script = ExtResource( 2 ) +v_radius = 20 +draft_radius = 30 +interact_power = 0.06 [node name="StraightStraw" type="Polygon2D" parent="."] material = ExtResource( 3 ) diff --git a/src/Levels/01 Level.tscn b/src/Levels/01 Level.tscn index b00c0c2..0c58a9b 100644 --- a/src/Levels/01 Level.tscn +++ b/src/Levels/01 Level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=16 format=2] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=1] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=2] @@ -9,7 +9,11 @@ [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=7] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=8] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=9] +[ext_resource path="res://src/Contraptions/VendingMachine.tscn" type="PackedScene" id=10] +[ext_resource path="res://src/NeutralObjects/Coin.tscn" type="PackedScene" id=11] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=12] +[ext_resource path="res://src/Environment/ShaderGrass.tscn" type="PackedScene" id=13] +[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=14] [sub_resource type="AnimationNodeStateMachinePlayback" id=4] @@ -45,13 +49,14 @@ wait_time = 20.0 drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 9 +frame = 13 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 6 +frame = 10 [node name="Blobby" parent="." instance=ExtResource( 2 )] unique_name_in_owner = true +material = null position = Vector2( -70, -1.90735e-06 ) scale = Vector2( 0.878906, 0.936025 ) @@ -99,14 +104,98 @@ position = Vector2( 684, 12 ) rotation = 1.57079 [node name="Terminal" parent="." instance=ExtResource( 6 )] -position = Vector2( 109, -24 ) +position = Vector2( 1382, -96 ) [node name="Portal" parent="Terminal" instance=ExtResource( 5 )] visible = false -position = Vector2( 1379, -96 ) +position = Vector2( 108, -18 ) monitoring = false next_scene = ExtResource( 4 ) +[node name="Coin" parent="." instance=ExtResource( 11 )] +position = Vector2( -37, -14 ) + +[node name="Coin2" parent="." instance=ExtResource( 11 )] +position = Vector2( 3.05176e-05, -15 ) + +[node name="Coin3" parent="." instance=ExtResource( 11 )] +position = Vector2( 46, -14 ) + +[node name="VendingMachine" parent="." instance=ExtResource( 10 )] +position = Vector2( 335, -84 ) + +[node name="ShaderGrass" parent="." instance=ExtResource( 13 )] +position = Vector2( 729, -12 ) + +[node name="ShaderGrass2" parent="." instance=ExtResource( 13 )] +position = Vector2( 735, -14 ) + +[node name="ShaderGrass3" parent="." instance=ExtResource( 13 )] +position = Vector2( 740, -12 ) + +[node name="ShaderGrass4" parent="." instance=ExtResource( 13 )] +position = Vector2( 748, -12 ) + +[node name="ShaderGrass5" parent="." instance=ExtResource( 13 )] +position = Vector2( 754, -14 ) + +[node name="ShaderGrass6" parent="." instance=ExtResource( 13 )] +position = Vector2( 759, -12 ) + +[node name="ShaderGrass7" parent="." instance=ExtResource( 13 )] +position = Vector2( 766, -12 ) + +[node name="ShaderGrass8" parent="." instance=ExtResource( 13 )] +position = Vector2( 772, -14 ) + +[node name="ShaderGrass9" parent="." instance=ExtResource( 13 )] +position = Vector2( 777, -12 ) + +[node name="ShaderGrass10" parent="." instance=ExtResource( 13 )] +position = Vector2( 782, -12 ) + +[node name="ShaderGrass11" parent="." instance=ExtResource( 13 )] +position = Vector2( 788, -14 ) + +[node name="ShaderGrass12" parent="." instance=ExtResource( 13 )] +position = Vector2( 793, -12 ) + +[node name="ShaderGrass13" parent="." instance=ExtResource( 13 )] +position = Vector2( 799, -12 ) + +[node name="ShaderGrass14" parent="." instance=ExtResource( 13 )] +position = Vector2( 805, -14 ) + +[node name="ShaderGrass15" parent="." instance=ExtResource( 13 )] +position = Vector2( 810, -12 ) + +[node name="ShaderGrass16" parent="." instance=ExtResource( 13 )] +position = Vector2( 815, -12 ) + +[node name="ShaderGrass17" parent="." instance=ExtResource( 13 )] +position = Vector2( 821, -14 ) + +[node name="ShaderGrass18" parent="." instance=ExtResource( 13 )] +position = Vector2( 826, -12 ) + +[node name="ShaderGrass19" parent="." instance=ExtResource( 13 )] +position = Vector2( 831, -12 ) + +[node name="ShaderGrass20" parent="." instance=ExtResource( 13 )] +position = Vector2( 837, -14 ) + +[node name="ShaderGrass21" parent="." instance=ExtResource( 13 )] +position = Vector2( 842, -12 ) + +[node name="FlyingLaserCutter" parent="." instance=ExtResource( 14 )] +position = Vector2( 1007, -160 ) +rotation = 1.5708 + +[node name="FlyingLaserCutter2" parent="." instance=ExtResource( 14 )] +position = Vector2( 1068, -159 ) +rotation = 1.5708 + +[connection signal="tree_exiting" from="." to="LevelState" method="_on_Level_tree_exiting"] [connection signal="timeout" from="UserInterface/HUD/HUDOverlay/GetBackTimer/Timer" to="UserInterface/HUD" method="_on_Timer_timeout"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] diff --git a/src/Levels/02 Level.tscn b/src/Levels/02 Level.tscn index 709ba98..031c87a 100644 --- a/src/Levels/02 Level.tscn +++ b/src/Levels/02 Level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=2] +[gd_scene load_steps=19 format=2] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=1] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=2] @@ -7,10 +7,12 @@ [ext_resource path="res://src/Platforms/FlyingPlatform.gd" type="Script" id=5] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=6] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=7] +[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=8] [ext_resource path="res://assets/contraption/FlyingPlatformClean.png" type="Texture" id=9] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=10] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=11] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=12] +[ext_resource path="res://src/ObstacleObjects/Mine.tscn" type="PackedScene" id=13] [sub_resource type="AnimationNodeStateMachinePlayback" id=4] @@ -86,12 +88,6 @@ wait_time = 20.0 [node name="BlobbyCam" parent="." instance=ExtResource( 12 )] -[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 12 - -[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 3 - [node name="Blobby" parent="." instance=ExtResource( 2 )] unique_name_in_owner = true position = Vector2( 36, -24 ) @@ -100,8 +96,12 @@ scale = Vector2( 0.878906, 0.936025 ) [node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 4 ) -[node name="Portal" parent="." instance=ExtResource( 6 )] -position = Vector2( 744, -288 ) +[node name="Terminal" parent="." instance=ExtResource( 8 )] +position = Vector2( 648, -264 ) + +[node name="Portal" parent="Terminal" instance=ExtResource( 6 )] +visible = false +position = Vector2( 96, -24 ) next_scene = ExtResource( 4 ) [node name="FlyingPlatform" type="Node2D" parent="."] @@ -164,6 +164,15 @@ pause_mode = 2 playback_process_mode = 0 anims/Horizontal = SubResource( 6 ) +[node name="Mine" parent="." instance=ExtResource( 13 )] +position = Vector2( 39, -192 ) + +[node name="Mine2" parent="." instance=ExtResource( 13 )] +position = Vector2( 75, -192 ) + +[node name="Mine3" parent="." instance=ExtResource( 13 )] +position = Vector2( 108, -192 ) + [node name="TileMap" type="TileMap" parent="."] unique_name_in_owner = true tile_set = ExtResource( 1 ) diff --git a/src/Levels/03 Level.tscn b/src/Levels/03 Level.tscn index 9391446..a3277e9 100644 --- a/src/Levels/03 Level.tscn +++ b/src/Levels/03 Level.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=52 format=2] +[gd_scene load_steps=54 format=2] +[ext_resource path="res://src/Contraptions/Triggers/WhyButton.tscn" type="PackedScene" id=1] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=2] [ext_resource path="res://src/Platforms/DropThroughPlatform.tscn" type="PackedScene" id=3] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=4] @@ -45,6 +46,7 @@ [ext_resource path="res://src/Actors/Enemies/Beings/BoundFrog.tscn" type="PackedScene" id=44] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=45] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=46] +[ext_resource path="res://src/Contraptions/Triggers/ElevatorButton.tscn" type="PackedScene" id=47] [sub_resource type="AnimationNodeStateMachinePlayback" id=4] @@ -139,11 +141,15 @@ shape = SubResource( 3 ) position = Vector2( 0, 1.5 ) z_index = -1 frames = SubResource( 5 ) -frame = 7 +frame = 10 playing = true -[node name="Portal" parent="." instance=ExtResource( 42 )] -position = Vector2( 768, 120 ) +[node name="Terminal" parent="." instance=ExtResource( 47 )] +position = Vector2( 695, 144 ) + +[node name="Portal" parent="Terminal" instance=ExtResource( 42 )] +visible = false +position = Vector2( 73, -24 ) [node name="TileMap" type="TileMap" parent="."] unique_name_in_owner = true @@ -161,7 +167,7 @@ tile_data = PoolIntArray( -1, 1610612751, 0, -65536, 1610612746, 0, -65535, 1610 tile_data = PoolIntArray( 851970, 1, 0, 851971, 0, 0, 851973, 0, 0, 851975, 2, 0 ) [node name="Flyer" parent="." instance=ExtResource( 41 )] -position = Vector2( 698, 294 ) +position = Vector2( 496, 152 ) max_speed = 120 [node name="StateLabel" parent="Flyer" index="1"] @@ -177,13 +183,24 @@ movement_radius = 4 [node name="FlyingPlatformClean" parent="." instance=ExtResource( 43 )] position = Vector2( 496, 220 ) +[node name="WhyButton" parent="." instance=ExtResource( 1 )] +position = Vector2( 632, 336 ) + +[node name="Indicator1" parent="WhyButton" index="1"] +visible = false + +[node name="Indicator3" parent="WhyButton" index="3"] +visible = false + [connection signal="ready" from="." to="BoundFrog" method="_on_Level_ready"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="area_exited" from="Spring/SpringPlatform/SpringSkin" to="Spring/SpringPlatform" method="_on_SpringSkin_area_exited"] [connection signal="area_entered" from="Spring/SpringPlatform/EnteringVelocityDetector" to="Spring/SpringPlatform" method="_on_EnteringVelocityDetector_area_entered"] +[connection signal="button_pushed" from="WhyButton" to="BoundFrog" method="_on_WhyButton_button_pushed"] [editable path="UserInterface"] [editable path="UserInterface/HUD"] [editable path="Blobby"] [editable path="Flyer"] [editable path="FlyingPlatformClean"] +[editable path="WhyButton"] diff --git a/src/Utilities/LevelState.gd b/src/Utilities/LevelState.gd index cb41675..48e5a55 100644 --- a/src/Utilities/LevelState.gd +++ b/src/Utilities/LevelState.gd @@ -1,6 +1,7 @@ extends Node onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelName := get_tree().get_current_scene().get_name() #TODO Easteregg pls var currency: = 0 setget set_currency @@ -32,3 +33,23 @@ func set_frees(value: int) -> void: func set_dead(value: bool) -> void: is_dead = value + +func _on_Level_tree_exiting() -> void: + var progress_dict : Dictionary = GlobalState.progress_dict + var levelProgress : Dictionary = {} + + levelProgress["currency"] = currency + levelProgress["kills"] = kills + levelProgress["deaths"] = deaths + levelProgress["frees"] = frees + + if !progress_dict.has(levelName): + progress_dict[levelName] = levelProgress + else: + progress_dict[levelName]["currency"] = progress_dict[levelName]["currency"] + currency + progress_dict[levelName]["kills"] = progress_dict[levelName]["kills"] + kills + progress_dict[levelName]["deaths"] = progress_dict[levelName]["deaths"] + deaths + progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + frees + + GlobalState.set_progress(progress_dict) + pass # Replace with function body.