From ec5c67930c2411ec5144d36996be78b96e822511 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Sun, 28 May 2023 20:11:11 +0200 Subject: [PATCH] feat: proto Input Menu, Savefile mit Resource erstellt --- .../basic_tileset_blobb-jakob-remix.png | Bin 0 -> 5933 bytes ...basic_tileset_blobb-jakob-remix.png.import | 35 +++ assets/environment/galletcity_tiles.png | Bin 3531 -> 0 bytes assets/ui/Screenshot 2023-05-23 160521.png | Bin 0 -> 96345 bytes .../Screenshot 2023-05-23 160521.png.import} | 6 +- project.godot | 10 +- savefile.tres | 187 +++++++++++++ src/Actors/Actor.gd | 4 +- src/Actors/BlobbyCam.tscn | 4 +- src/Actors/Enemies/Beings/BoundFrog.gd | 4 +- src/Autoload/GlobalState.gd | 30 -- src/Autoload/GlobalState.tscn | 15 +- src/Autoload/InputMapLoader.tscn | 6 + src/Autoload/SaveManager.gd | 19 ++ src/Autoload/SaveManager.tscn | 6 + src/BenefitialObjects/SavePoint.gd | 2 +- src/Contraptions/GateBlock.gd | 4 +- src/Contraptions/Portal/Portal.gd | 4 +- src/Contraptions/Triggers/ElevatorButton.gd | 2 +- src/Contraptions/VendingMachine.gd | 4 +- src/Environment/Tileset.tres | 29 ++ src/Levels/1 Tut Level.tscn | 83 +++++- src/Levels/2 Tut Level.tscn | 8 +- src/Levels/Actual Level 3.tscn | 5 +- src/StateMachines/StateMachine.gd | 4 +- .../Buttons/MenuNavigationButton.gd | 12 + .../Screens/ControlsMenu/ActionKeyList.gd | 13 + .../Screens/ControlsMenu/ControlsMenu.gd | 28 ++ .../Screens/ControlsMenu/ControlsMenu.tscn | 257 ++++++++++++++++++ .../Screens/ControlsMenu/InputLine.gd | 14 + .../Screens/ControlsMenu/InputLine.tscn | 45 +++ .../Screens/ControlsMenu/InputMapper.gd | 58 ++++ .../Screens/ControlsMenu/KeySelectMenu.gd | 21 ++ .../Screens/ControlsMenu/ProfilesMenu.gd | 7 + .../Screens/ControlsMenu/Reset.gd | 7 + .../Screens/ControlsMenu/SaveButton.gd | 6 + src/UserInterface/Screens/HUD.gd | 6 +- src/UserInterface/Screens/MainScreen.tscn | 24 +- src/Utilities/GlobalState.gd | 46 ++++ src/Utilities/GlobalStateResource.gd | 7 + src/Utilities/InputMapLoader.gd | 4 + src/Utilities/LevelState.gd | 15 +- src/Utilities/SignalManager.gd | 1 + src/transparency.gdshader | 8 + 44 files changed, 974 insertions(+), 76 deletions(-) create mode 100644 assets/environment/blocks/basic_tileset_blobb-jakob-remix.png create mode 100644 assets/environment/blocks/basic_tileset_blobb-jakob-remix.png.import delete mode 100644 assets/environment/galletcity_tiles.png create mode 100644 assets/ui/Screenshot 2023-05-23 160521.png rename assets/{environment/galletcity_tiles.png.import => ui/Screenshot 2023-05-23 160521.png.import} (66%) create mode 100644 savefile.tres delete mode 100644 src/Autoload/GlobalState.gd create mode 100644 src/Autoload/InputMapLoader.tscn create mode 100644 src/Autoload/SaveManager.gd create mode 100644 src/Autoload/SaveManager.tscn create mode 100644 src/Environment/Tileset.tres create mode 100644 src/UserInterface/Buttons/MenuNavigationButton.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn create mode 100644 src/UserInterface/Screens/ControlsMenu/InputLine.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/InputLine.tscn create mode 100644 src/UserInterface/Screens/ControlsMenu/InputMapper.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/Reset.gd create mode 100644 src/UserInterface/Screens/ControlsMenu/SaveButton.gd create mode 100644 src/Utilities/GlobalState.gd create mode 100644 src/Utilities/GlobalStateResource.gd create mode 100644 src/Utilities/InputMapLoader.gd create mode 100644 src/transparency.gdshader diff --git a/assets/environment/blocks/basic_tileset_blobb-jakob-remix.png b/assets/environment/blocks/basic_tileset_blobb-jakob-remix.png new file mode 100644 index 0000000000000000000000000000000000000000..c842fd42cbaa4e37d85b0a934e6d0631e8b7c2c4 GIT binary patch literal 5933 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 diff --git a/assets/ui/Screenshot 2023-05-23 160521.png b/assets/ui/Screenshot 2023-05-23 160521.png new file mode 100644 index 0000000000000000000000000000000000000000..da2510d1c4e50e12e65fe3e5bfa1edaf45802ad4 GIT binary patch literal 96345 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 Y0A(RRJ+#eWHUIzs07*qoM6N<$f_amhw*UYD literal 0 HcmV?d00001 diff --git a/assets/environment/galletcity_tiles.png.import b/assets/ui/Screenshot 2023-05-23 160521.png.import similarity index 66% rename from assets/environment/galletcity_tiles.png.import rename to assets/ui/Screenshot 2023-05-23 160521.png.import index e6a0b33..b348662 100644 --- a/assets/environment/galletcity_tiles.png.import +++ b/assets/ui/Screenshot 2023-05-23 160521.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/galletcity_tiles.png-9e378740b558af86060a286a7fa827d0.stex" +path="res://.import/Screenshot 2023-05-23 160521.png-6de2cfec0cf07091a47ad2ca582bc327.stex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/environment/galletcity_tiles.png" -dest_files=[ "res://.import/galletcity_tiles.png-9e378740b558af86060a286a7fa827d0.stex" ] +source_file="res://assets/ui/Screenshot 2023-05-23 160521.png" +dest_files=[ "res://.import/Screenshot 2023-05-23 160521.png-6de2cfec0cf07091a47ad2ca582bc327.stex" ] [params] diff --git a/project.godot b/project.godot index 571fe74..b0205d9 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://src/Actors/Enemies/Beings/Enemy.gd" }, { +"base": "Resource", +"class": "GlobalStateResource", +"language": "GDScript", +"path": "res://src/Utilities/GlobalStateResource.gd" +}, { "base": "Node2D", "class": "LevelTemplate", "language": "GDScript", @@ -42,6 +47,7 @@ _global_script_classes=[ { _global_script_class_icons={ "Actor": "", "Enemy": "", +"GlobalStateResource": "", "LevelTemplate": "", "RayCastDebugLines": "", "RayCaster": "", @@ -57,6 +63,7 @@ config/icon="res://icon.png" [autoload] GlobalState="*res://src/Autoload/GlobalState.tscn" +SaveManager="*res://src/Autoload/SaveManager.gd" [debug] @@ -69,7 +76,7 @@ window/size/height=360 window/size/test_width=1920 window/size/test_height=1080 window/stretch/mode="2d" -window/stretch/aspect="keep" +window/stretch/aspect="expand" [editor_plugins] @@ -115,7 +122,6 @@ ogg_vorbis={ ui_accept={ "deadzone": 0.5, "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777222,"physical_scancode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) ] diff --git a/savefile.tres b/savefile.tres new file mode 100644 index 0000000..10cec0c --- /dev/null +++ b/savefile.tres @@ -0,0 +1,187 @@ +[gd_resource type="Resource" load_steps=50 format=2] + +[ext_resource path="res://src/Utilities/GlobalStateResource.gd" type="Script" id=1] + +[sub_resource type="InputEventKey" id=1] +scancode = 16777237 + +[sub_resource type="InputEventJoypadButton" id=2] +button_index = 1 + +[sub_resource type="InputEventMouseButton" id=3] +button_index = 1 + +[sub_resource type="InputEventJoypadButton" id=4] +button_index = 13 + +[sub_resource type="InputEventJoypadMotion" id=5] +axis = 1 +axis_value = 1.0 + +[sub_resource type="InputEventKey" id=6] +physical_scancode = 83 + +[sub_resource type="InputEventKey" id=7] +physical_scancode = 16777234 + +[sub_resource type="InputEventKey" id=8] +physical_scancode = 69 + +[sub_resource type="InputEventKey" id=9] +physical_scancode = 16777221 + +[sub_resource type="InputEventJoypadButton" id=10] +button_index = 2 + +[sub_resource type="InputEventKey" id=11] +scancode = 32 + +[sub_resource type="InputEventJoypadButton" id=12] + +[sub_resource type="InputEventKey" id=13] +physical_scancode = 16777232 + +[sub_resource type="InputEventJoypadMotion" id=14] +axis_value = -1.0 + +[sub_resource type="InputEventKey" id=15] +scancode = 65 + +[sub_resource type="InputEventJoypadButton" id=16] +device = -1 +button_index = 14 + +[sub_resource type="InputEventKey" id=17] +physical_scancode = 16777231 + +[sub_resource type="InputEventKey" id=18] +scancode = 68 + +[sub_resource type="InputEventJoypadMotion" id=19] +axis_value = 1.0 + +[sub_resource type="InputEventJoypadButton" id=20] +device = -1 +button_index = 15 + +[sub_resource type="InputEventKey" id=21] +physical_scancode = 16777233 + +[sub_resource type="InputEventKey" id=22] +scancode = 16777217 + +[sub_resource type="InputEventJoypadButton" id=23] +button_index = 11 + +[sub_resource type="InputEventKey" id=24] +scancode = 16777221 + +[sub_resource type="InputEventKey" id=25] +scancode = 32 + +[sub_resource type="InputEventJoypadButton" id=26] + +[sub_resource type="InputEventKey" id=27] +scancode = 16777217 + +[sub_resource type="InputEventJoypadButton" id=28] +button_index = 1 + +[sub_resource type="InputEventKey" id=29] +scancode = 16777234 + +[sub_resource type="InputEventJoypadButton" id=30] +button_index = 13 + +[sub_resource type="InputEventKey" id=31] +scancode = 16777230 + +[sub_resource type="InputEventKey" id=32] +scancode = 16777218 + +[sub_resource type="InputEventKey" id=33] +shift = true +scancode = 16777218 + +[sub_resource type="InputEventKey" id=34] +scancode = 16777229 + +[sub_resource type="InputEventKey" id=35] +scancode = 16777231 + +[sub_resource type="InputEventJoypadButton" id=36] +button_index = 14 + +[sub_resource type="InputEventKey" id=37] +scancode = 16777236 + +[sub_resource type="InputEventKey" id=38] +scancode = 16777235 + +[sub_resource type="InputEventKey" id=39] +scancode = 16777233 + +[sub_resource type="InputEventJoypadButton" id=40] +button_index = 15 + +[sub_resource type="InputEventKey" id=41] +scancode = 32 + +[sub_resource type="InputEventJoypadButton" id=42] +button_index = 3 + +[sub_resource type="InputEventKey" id=43] +scancode = 16777232 + +[sub_resource type="InputEventJoypadButton" id=44] +button_index = 12 + +[sub_resource type="InputEventKey" id=45] +physical_scancode = 87 + +[sub_resource type="InputEventKey" id=46] +physical_scancode = 16777232 + +[sub_resource type="InputEventJoypadMotion" id=47] +axis = 1 +axis_value = -1.0 + +[sub_resource type="InputEventJoypadButton" id=48] +button_index = 12 + +[resource] +script = ExtResource( 1 ) +progress_dict = { +"Level 1": { +"currency": 0, +"deaths": 0, +"frees": 0, +"kills": 0 +} +} +wallet = 0 +input_map = { +"boost_move": [ SubResource( 1 ), SubResource( 2 ) ], +"click": [ SubResource( 3 ) ], +"duck": [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ) ], +"interact": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ) ], +"jump": [ SubResource( 11 ), SubResource( 12 ), SubResource( 13 ) ], +"move_left": [ SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 17 ) ], +"move_right": [ SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ) ], +"pause": [ SubResource( 22 ), SubResource( 23 ) ], +"ui_accept": [ SubResource( 24 ), SubResource( 25 ), SubResource( 26 ) ], +"ui_cancel": [ SubResource( 27 ), SubResource( 28 ) ], +"ui_down": [ SubResource( 29 ), SubResource( 30 ) ], +"ui_end": [ SubResource( 31 ) ], +"ui_focus_next": [ SubResource( 32 ) ], +"ui_focus_prev": [ SubResource( 33 ) ], +"ui_home": [ SubResource( 34 ) ], +"ui_left": [ SubResource( 35 ), SubResource( 36 ) ], +"ui_page_down": [ SubResource( 37 ) ], +"ui_page_up": [ SubResource( 38 ) ], +"ui_right": [ SubResource( 39 ), SubResource( 40 ) ], +"ui_select": [ SubResource( 41 ), SubResource( 42 ) ], +"ui_up": [ SubResource( 43 ), SubResource( 44 ) ], +"up": [ SubResource( 45 ), SubResource( 46 ), SubResource( 47 ), SubResource( 48 ) ] +} +show_tutorial = false diff --git a/src/Actors/Actor.gd b/src/Actors/Actor.gd index bd06c48..08a9d40 100644 --- a/src/Actors/Actor.gd +++ b/src/Actors/Actor.gd @@ -3,8 +3,8 @@ class_name Actor #TODO Split the blobby specific parts up from this -onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") const PhysicsConst = preload("res://src/Utilities/Physic/PhysicsConst.gd") diff --git a/src/Actors/BlobbyCam.tscn b/src/Actors/BlobbyCam.tscn index 383b9c7..d7bfc1e 100644 --- a/src/Actors/BlobbyCam.tscn +++ b/src/Actors/BlobbyCam.tscn @@ -980,10 +980,10 @@ texture = ExtResource( 8 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] visible = false frames = SubResource( 7 ) -frame = 1 +frame = 13 playing = true [node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] frames = SubResource( 8 ) -frame = 6 +frame = 4 playing = true diff --git a/src/Actors/Enemies/Beings/BoundFrog.gd b/src/Actors/Enemies/Beings/BoundFrog.gd index 7d3440e..9c3d298 100644 --- a/src/Actors/Enemies/Beings/BoundFrog.gd +++ b/src/Actors/Enemies/Beings/BoundFrog.gd @@ -3,8 +3,8 @@ extends Node2D # Is given in blocks export var movement_radius = 6 onready var tilemap: TileMap = $"%TileMap" -onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") var Rope = preload("res://src/Contraptions/Rope/Rope.tscn") var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn") diff --git a/src/Autoload/GlobalState.gd b/src/Autoload/GlobalState.gd deleted file mode 100644 index 874ad82..0000000 --- a/src/Autoload/GlobalState.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends Node - -var progress_dict := {} setget set_progress, get_progress -var wallet := 0 setget set_wallet - -func set_progress(value) -> void: - progress_dict = value - -func get_progress() -> Dictionary: - return progress_dict - -func set_savepoint(levelName: String, position: Vector2) -> void: - if(!progress_dict.has(levelName)): - progress_dict[levelName] = {} - progress_dict[levelName]["savepoint"] = position - -func get_property_value(levelName: String, propertyName: String) -> int: - if progress_dict.has(levelName) && progress_dict[levelName].has(propertyName): - return progress_dict[levelName][propertyName] - else: - return 0 - -func get_savepoint(levelName: String) -> Vector2: - if progress_dict.has(levelName) && progress_dict[levelName].has("savepoint"): - return progress_dict[levelName]["savepoint"] - else: - return Vector2() - -func set_wallet(value) -> void: - wallet = value diff --git a/src/Autoload/GlobalState.tscn b/src/Autoload/GlobalState.tscn index f107903..287ac0d 100644 --- a/src/Autoload/GlobalState.tscn +++ b/src/Autoload/GlobalState.tscn @@ -1,6 +1,17 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=4 format=2] -[ext_resource path="res://src/Autoload/GlobalState.gd" type="Script" id=1] +[ext_resource path="res://src/Utilities/GlobalState.gd" type="Script" id=1] +[ext_resource path="res://src/Utilities/GlobalStateResource.gd" type="Script" id=2] + +[sub_resource type="Resource" id=1] +script = ExtResource( 2 ) +progress_dict = { +} +wallet = 0 +input_map = { +} +show_tutorial = false [node name="GlobalState" type="Node"] script = ExtResource( 1 ) +gsr = SubResource( 1 ) diff --git a/src/Autoload/InputMapLoader.tscn b/src/Autoload/InputMapLoader.tscn new file mode 100644 index 0000000..fbdaf18 --- /dev/null +++ b/src/Autoload/InputMapLoader.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/Utilities/InputMapLoader.gd" type="Script" id=1] + +[node name="InputMapLoader" type="Node"] +script = ExtResource( 1 ) diff --git a/src/Autoload/SaveManager.gd b/src/Autoload/SaveManager.gd new file mode 100644 index 0000000..b21abbb --- /dev/null +++ b/src/Autoload/SaveManager.gd @@ -0,0 +1,19 @@ +extends Node + +export var save_location: String = "res://savefile.tres" +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") + +func _ready() -> void: + load_initial_save() + +func load_initial_save() -> void: + var initial_state = load(save_location) + if !initial_state: + initial_state = GlobalStateResource.new() + GlobalState.gsr = initial_state + GlobalState.reinstate() + +func save_default() -> void: + for action in InputMap.get_actions(): + GlobalState.gsr.input_map[action] = InputMap.get_action_list(action) + ResourceSaver.save(save_location, GlobalState.gsr) diff --git a/src/Autoload/SaveManager.tscn b/src/Autoload/SaveManager.tscn new file mode 100644 index 0000000..eb78244 --- /dev/null +++ b/src/Autoload/SaveManager.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/Autoload/SaveManager.gd" type="Script" id=1] + +[node name="SaveManager" type="Node"] +script = ExtResource( 1 ) diff --git a/src/BenefitialObjects/SavePoint.gd b/src/BenefitialObjects/SavePoint.gd index 296f8df..08e1136 100644 --- a/src/BenefitialObjects/SavePoint.gd +++ b/src/BenefitialObjects/SavePoint.gd @@ -1,6 +1,6 @@ extends Node2D -onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") func _ready() -> void: if(GlobalState.get_savepoint(levelState.levelName) == global_position + Vector2(0,18)): diff --git a/src/Contraptions/GateBlock.gd b/src/Contraptions/GateBlock.gd index 8d33c61..c7408db 100644 --- a/src/Contraptions/GateBlock.gd +++ b/src/Contraptions/GateBlock.gd @@ -1,7 +1,7 @@ extends StaticBody2D -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 signalManager := get_tree().root.get_child(2).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") export var locked := true diff --git a/src/Contraptions/Portal/Portal.gd b/src/Contraptions/Portal/Portal.gd index 957403a..4ffdbcd 100644 --- a/src/Contraptions/Portal/Portal.gd +++ b/src/Contraptions/Portal/Portal.gd @@ -2,8 +2,8 @@ tool extends Area2D onready var anim_player: AnimationPlayer = $AnimationPlayer -onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") onready var levelName := get_tree().get_current_scene().get_name() export(String, FILE, "*.tscn") var next_scene diff --git a/src/Contraptions/Triggers/ElevatorButton.gd b/src/Contraptions/Triggers/ElevatorButton.gd index c8d55b1..6e18769 100644 --- a/src/Contraptions/Triggers/ElevatorButton.gd +++ b/src/Contraptions/Triggers/ElevatorButton.gd @@ -4,7 +4,7 @@ onready var buttonPlayer = $"%ButtonPlayer" onready var activatorArea = $"%ActivatorArea" onready var indicatorPlayer = $"%IndicatorPlayer" onready var elevator = get_node("./Portal") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") onready var unactivatable_timer := $Timer onready var get_back_timer := $GetBackTimer diff --git a/src/Contraptions/VendingMachine.gd b/src/Contraptions/VendingMachine.gd index 95790cf..b4394de 100644 --- a/src/Contraptions/VendingMachine.gd +++ b/src/Contraptions/VendingMachine.gd @@ -1,8 +1,8 @@ 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 signalManager := get_tree().root.get_child(2).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") onready var blobby := $"../%Blobby" onready var unactivatable_timer := $Timer export var cost := 3 diff --git a/src/Environment/Tileset.tres b/src/Environment/Tileset.tres new file mode 100644 index 0000000..a4b3d3a --- /dev/null +++ b/src/Environment/Tileset.tres @@ -0,0 +1,29 @@ +[gd_resource type="TileSet" load_steps=3 format=2] + +[ext_resource path="res://assets/environment/blocks/GreenhouseInner.png" type="Texture" id=1] + +[sub_resource type="ConvexPolygonShape2D" id=5] +points = PoolVector2Array( 0, 24, 24, 24, 24, 0, 0, 0 ) + +[resource] +0/name = "GreenhouseInner.png 0" +0/texture = ExtResource( 1 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 0, 0, 24, 24 ) +0/tile_mode = 0 +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape = SubResource( 5 ) +0/shape_one_way = false +0/shape_one_way_margin = 1.0 +0/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 5 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +0/z_index = 0 diff --git a/src/Levels/1 Tut Level.tscn b/src/Levels/1 Tut Level.tscn index 76e15cb..cfb142d 100644 --- a/src/Levels/1 Tut Level.tscn +++ b/src/Levels/1 Tut Level.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=15 format=2] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=1] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=3] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=4] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=5] +[ext_resource path="res://assets/environment/blocks/basic_tileset_blobb-jakob-remix.png" type="Texture" id=6] [ext_resource path="res://src/Environment/ShaderGrass.tscn" type="PackedScene" id=7] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=8] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=9] @@ -12,6 +13,74 @@ [sub_resource type="AnimationNodeStateMachinePlayback" id=4] +[sub_resource type="ConvexPolygonShape2D" id=12] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=13] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="TileSet" id=11] +0/name = "basic_tileset_blobb-jakob-remix.png 0" +0/texture = ExtResource( 6 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 16, 0, 16, 16 ) +0/tile_mode = 1 +0/autotile/bitmask_mode = 0 +0/autotile/bitmask_flags = [ ] +0/autotile/icon_coordinate = Vector2( 0, 0 ) +0/autotile/tile_size = Vector2( 16, 16 ) +0/autotile/spacing = 0 +0/autotile/occluder_map = [ ] +0/autotile/navpoly_map = [ ] +0/autotile/priority_map = [ ] +0/autotile/z_index_map = [ ] +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape = SubResource( 12 ) +0/shape_one_way = false +0/shape_one_way_margin = 1.0 +0/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 12 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +0/z_index = 0 +1/name = "basic_tileset_blobb-jakob-remix.png 1" +1/texture = ExtResource( 6 ) +1/tex_offset = Vector2( 0, 0 ) +1/modulate = Color( 1, 1, 1, 1 ) +1/region = Rect2( 32, 0, 16, 16 ) +1/tile_mode = 1 +1/autotile/bitmask_mode = 0 +1/autotile/bitmask_flags = [ ] +1/autotile/icon_coordinate = Vector2( 0, 0 ) +1/autotile/tile_size = Vector2( 16, 16 ) +1/autotile/spacing = 0 +1/autotile/occluder_map = [ ] +1/autotile/navpoly_map = [ ] +1/autotile/priority_map = [ ] +1/autotile/z_index_map = [ ] +1/occluder_offset = Vector2( 0, 0 ) +1/navigation_offset = Vector2( 0, 0 ) +1/shape_offset = Vector2( 0, 0 ) +1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +1/shape = SubResource( 13 ) +1/shape_one_way = false +1/shape_one_way_margin = 1.0 +1/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 13 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +1/z_index = 0 + [node name="Level 1" type="Node2D"] script = ExtResource( 10 ) __meta__ = { @@ -43,8 +112,11 @@ visible = true [node name="Emitter3" parent="BlobbyCam/ParallaxBackground/ParallaxLayer4" index="1"] visible = true +[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] +frame = 2 + [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 4 +frame = 5 [node name="Blobby" parent="." instance=ExtResource( 9 )] unique_name_in_owner = true @@ -354,6 +426,13 @@ scale = Vector2( 1, 1.5 ) position = Vector2( 240, -7 ) scale = Vector2( 1, 1.5 ) +[node name="TileMap2" type="TileMap" parent="."] +tile_set = SubResource( 11 ) +cell_size = Vector2( 16, 16 ) +cell_quadrant_size = 8 +cell_custom_transform = Transform2D( 16, 0, 0, 16, 0, 0 ) +format = 1 + [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [editable path="SignalManager"] diff --git a/src/Levels/2 Tut Level.tscn b/src/Levels/2 Tut Level.tscn index 2045735..c1ab5cf 100644 --- a/src/Levels/2 Tut Level.tscn +++ b/src/Levels/2 Tut Level.tscn @@ -108,7 +108,7 @@ collision_layer = 8 collision_mask = 8 bake_navigation = true format = 1 -tile_data = PoolIntArray( -1310652, 7, 0, -1310651, -1610612729, 0, -1245116, -1073741822, 0, -1245115, -1610612734, 0, -1179580, -1073741822, 0, -1179579, -1610612734, 0, -1114044, -1073741822, 0, -1114043, -1610612734, 0, -1048508, -1073741822, 0, -1048507, -1610612734, 0, -1048418, -1073741822, 0, -1048417, -1073741814, 0, -1048416, 11, 0, -917510, -1073741813, 0, -917509, -1610612726, 0, -917508, -1610612734, 0, -982972, -1073741822, 0, -982971, -1610612734, 0, -982882, -1073741822, 0, -982881, -1073741814, 0, -982880, 11, 0, -851974, -1073741813, 0, -851973, -1610612726, 0, -851972, -1610612734, 0, -917436, -1073741822, 0, -917435, -1610612734, 0, -917346, -1073741822, 0, -917345, -1073741814, 0, -917344, 11, 0, -786438, -1073741813, 0, -786437, -1610612726, 0, -786436, -1610612734, 0, -851900, -1073741822, 0, -851899, -1610612734, 0, -851810, -1073741822, 0, -851809, -1073741814, 0, -851808, 11, 0, -720902, -1073741813, 0, -720901, -1610612726, 0, -720900, -1610612734, 0, -786364, -1073741822, 0, -786363, -1610612734, 0, -786274, -1073741822, 0, -786273, -1073741814, 0, -786272, 11, 0, -655366, -1073741813, 0, -655365, -1610612726, 0, -655364, -1610612734, 0, -720842, 7, 0, -720841, 2, 0, -720840, 2, 0, -720828, -1073741822, 0, -720827, -1610612734, 0, -720738, -1073741822, 0, -720737, -1073741814, 0, -720736, 11, 0, -589830, -1073741813, 0, -589829, -1610612726, 0, -589828, -1610612734, 0, -655306, -1073741822, 0, -655305, -1610612734, 0, -655292, -1073741817, 0, -655291, 1610612743, 0, -655202, -1073741822, 0, -655201, -1073741814, 0, -655200, 11, 0, -524294, -1073741813, 0, -524293, -1610612726, 0, -524292, -1610612734, 0, -589770, -1073741822, 0, -589769, -1610612734, 0, -589761, 7, 0, -589760, -1610612729, 0, -589666, -1073741822, 0, -589665, -1073741814, 0, -589664, 11, 0, -458758, 11, 0, -458757, -1610612726, 0, -458756, -1610612734, 0, -524234, -1073741822, 0, -524233, 1610612739, 0, -524232, 2, 0, -524231, 2, 0, -524225, -1073741822, 0, -524224, -1610612734, 0, -524159, 7, 0, -524158, 2, 0, -524157, 2, 0, -524156, 2, 0, -524155, -1610612729, 0, -524149, 7, 0, -524148, 2, 0, -524147, 2, 0, -524146, 2, 0, -524145, 2, 0, -524144, -1610612729, 0, -524130, -1073741822, 0, -524129, -1073741814, 0, -524128, 11, 0, -393222, 11, 0, -393221, -1610612726, 0, -393220, -1610612734, 0, -458698, -1073741822, 0, -458697, -1610612734, 0, -458689, -1073741822, 0, -458688, -1610612734, 0, -458625, 7, 0, -458624, 2, 0, -458623, 1610612739, 0, -458622, 1610612738, 0, -458621, 1610612738, 0, -458620, 1610612738, 0, -458619, 1610612743, 0, -458613, -1073741817, 0, -458612, 1610612738, 0, -458611, 1610612738, 0, -458610, 1610612738, 0, -458609, 1610612738, 0, -458608, -1610612733, 0, -458607, -1610612729, 0, -458594, -1073741822, 0, -458593, -1073741814, 0, -458592, 11, 0, -327686, 11, 0, -327685, -1610612726, 0, -327684, -1610612734, 0, -393162, -1073741822, 0, -393161, -1610612734, 0, -393155, 2, 0, -393154, 2, 0, -393153, 1610612739, 0, -393152, -1610612734, 0, -393120, 2, 0, -393119, 2, 0, -393118, 2, 0, -393093, 7, 0, -393092, 2, 0, -393091, 2, 0, -393090, 2, 0, -393089, 1610612739, 0, -393088, 1610612739, 0, -393087, 1610612743, 0, -393072, -1073741822, 0, -393071, -1610612734, 0, -393058, -1073741822, 0, -393057, -1073741814, 0, -393056, 11, 0, -262150, 11, 0, -262149, -1610612726, 0, -262148, -1610612734, 0, -327647, 7, 0, -327646, 2, 0, -327645, -1610612729, 0, -327626, -1073741822, 0, -327625, -1610612734, 0, -327617, -1073741822, 0, -327616, -1610612734, 0, -327557, -1073741822, 0, -327556, 1610612739, 0, -327555, 1610612739, 0, -327554, 1610612739, 0, -327553, 1610612739, 0, -327552, -1610612734, 0, -327536, -1073741822, 0, -327535, -1610612734, 0, -327522, -1073741822, 0, -327521, -1073741814, 0, -327520, 11, 0, -196614, 11, 0, -196613, -1610612726, 0, -196612, -1610612734, 0, -262111, -1073741822, 0, -262110, 1, 0, -262109, -1610612734, 0, -262090, -1073741822, 0, -262089, 1610612739, 0, -262088, 2, 0, -262087, 2, 0, -262081, -1073741822, 0, -262080, -1610612734, 0, -262041, 7, 0, -262040, -1610612729, 0, -262025, 7, 0, -262024, 2, 0, -262023, 2, 0, -262022, 2, 0, -262021, 1610612739, 0, -262020, 1610612739, 0, -262019, 1610612739, 0, -262018, 1610612739, 0, -262017, 1610612739, 0, -262016, -1610612734, 0, -262000, -1073741822, 0, -261999, -1610612734, 0, -261986, -1073741822, 0, -261985, -1073741814, 0, -261984, 11, 0, -131078, 11, 0, -131077, -1610612726, 0, -131076, -1610612734, 0, -196583, 2, 0, -196582, 2, 0, -196581, 2, 0, -196580, 2, 0, -196579, 2, 0, -196575, -1073741822, 0, -196574, 3, 0, -196573, -1610612734, 0, -196554, -1073741822, 0, -196553, -1610612734, 0, -196545, -1073741822, 0, -196544, -1610612734, 0, -196522, 7, 0, -196521, 2, 0, -196520, 2, 0, -196519, -1610612729, 0, -196513, 7, 0, -196512, 2, 0, -196511, 2, 0, -196510, 2, 0, -196509, -1610612729, 0, -196505, -1073741817, 0, -196504, 1610612743, 0, -196494, 7, 0, -196493, 2, 0, -196492, 2, 0, -196491, 2, 0, -196490, 2, 0, -196489, 1610612739, 0, -196488, 1610612739, 0, -196487, 1610612739, 0, -196486, 1610612739, 0, -196485, 1610612739, 0, -196484, 1610612739, 0, -196483, 1610612739, 0, -196482, 1610612739, 0, -196481, 1610612739, 0, -196480, -1610612734, 0, -196464, -1073741822, 0, -196463, -1610612734, 0, -196450, -1073741822, 0, -196449, -1073741814, 0, -196448, 11, 0, -65542, 11, 0, -65541, -1610612726, 0, -65540, -1610612734, 0, -131039, -1073741822, 0, -131038, 1, 0, -131037, -1610612734, 0, -131032, 7, 0, -131031, 2, 0, -131030, 2, 0, -131029, -1610612729, 0, -131018, -1073741817, 0, -131017, 1610612743, 0, -131011, 2, 0, -131010, 2, 0, -131009, 1610612739, 0, -131008, -1610612734, 0, -130989, 7, 0, -130988, 2, 0, -130987, 2, 0, -130986, 3, 0, -130985, 3, 0, -130984, 3, 0, -130983, 3, 0, -130982, 2, 0, -130981, 2, 0, -130980, 2, 0, -130979, 2, 0, -130978, 2, 0, -130977, 3, 0, -130976, 3, 0, -130975, 3, 0, -130974, 3, 0, -130973, -1610612734, 0, -130960, 7, 0, -130959, 2, 0, -130958, 1610612738, 0, -130957, 1610612738, 0, -130956, 1610612738, 0, -130955, 1610612738, 0, -130954, 1610612738, 0, -130953, 1610612738, 0, -130952, 1610612738, 0, -130951, 1610612738, 0, -130950, 1610612738, 0, -130949, 1610612738, 0, -130948, 1610612738, 0, -130947, 1610612738, 0, -130946, 1610612738, 0, -130945, 1610612738, 0, -130944, 1610612743, 0, -130928, -1073741817, 0, -130927, 1610612743, 0, -130914, -1073741822, 0, -130913, -1073741814, 0, -130912, 11, 0, -6, 11, 0, -5, -1610612726, 0, -4, -1610612734, 0, -65517, 7, 0, -65516, 2, 0, -65515, 2, 0, -65514, -1610612729, 0, -65503, -1073741822, 0, -65502, 3, 0, -65501, -1610612734, 0, -65496, -1073741822, 0, -65495, 3, 0, -65494, 3, 0, -65493, -1610612734, 0, -65473, -1073741822, 0, -65472, -1610612734, 0, -65457, 7, 0, -65456, 2, 0, -65455, 2, 0, -65454, 2, 0, -65453, 3, 0, -65452, 3, 0, -65451, 3, 0, -65450, 3, 0, -65449, 3, 0, -65448, 3, 0, -65447, 3, 0, -65446, 3, 0, -65445, 3, 0, -65444, 3, 0, -65443, 3, 0, -65442, 3, 0, -65441, 3, 0, -65440, 3, 0, -65439, 3, 0, -65438, 3, 0, -65437, -1610612734, 0, -65378, -1073741822, 0, -65377, -1073741814, 0, -65376, 11, 0, 65530, 11, 0, 65531, -1610612726, 0, 65532, 1610612739, 0, 65533, 2, 0, 65534, 2, 0, 65535, 2, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 4, 2, 0, 5, 2, 0, 6, 2, 0, 7, 2, 0, 8, 2, 0, 9, 2, 0, 10, 2, 0, 11, 2, 0, 12, 2, 0, 13, 2, 0, 14, 2, 0, 15, 2, 0, 16, 2, 0, 17, 2, 0, 18, 2, 0, 19, 3, 0, 20, 3, 0, 21, 3, 0, 22, 1610612739, 0, 23, 2, 0, 24, 2, 0, 25, 2, 0, 26, 2, 0, 27, 2, 0, 28, 2, 0, 29, 2, 0, 30, 2, 0, 31, 2, 0, 32, 2, 0, 33, 3, 0, 34, 1, 0, 35, -1610612734, 0, 40, -1073741822, 0, 41, 3, 0, 42, 3, 0, 43, 3, 0, 44, 2, 0, 45, 2, 0, 46, 2, 0, 47, 2, 0, 48, 2, 0, 49, 2, 0, 50, 2, 0, 51, 2, 0, 52, 2, 0, 53, 2, 0, 54, 2, 0, 55, 2, 0, 56, 2, 0, 57, 2, 0, 58, 2, 0, 59, 2, 0, 60, 2, 0, 61, 2, 0, 62, 2, 0, 63, 3, 0, 64, 3, 0, 65, 2, 0, 66, 2, 0, 67, 2, 0, 68, 2, 0, 69, 2, 0, 70, 2, 0, 71, 2, 0, 72, 2, 0, 73, 2, 0, 74, 2, 0, 75, 2, 0, 76, 2, 0, 77, 2, 0, 78, 2, 0, 79, 3, 0, 80, 3, 0, 81, 3, 0, 82, 3, 0, 83, 3, 0, 84, 1610612739, 0, 85, 1610612739, 0, 86, 1610612739, 0, 87, 1610612739, 0, 88, 1610612739, 0, 89, 1610612739, 0, 90, 1610612739, 0, 91, 1610612739, 0, 92, 1610612739, 0, 93, 1610612739, 0, 94, 1610612739, 0, 95, 1610612739, 0, 96, 1610612739, 0, 97, 1610612739, 0, 98, 1610612739, 0, 99, 1610612739, 0, 100, 2, 0, 101, 2, 0, 102, 2, 0, 103, 2, 0, 104, 2, 0, 105, 2, 0, 106, 2, 0, 107, 2, 0, 108, 2, 0, 109, 2, 0, 110, 2, 0, 111, 2, 0, 112, 2, 0, 113, 2, 0, 114, 2, 0, 115, 2, 0, 116, 2, 0, 117, 2, 0, 118, 2, 0, 119, 2, 0, 120, 2, 0, 121, 2, 0, 122, 2, 0, 123, 2, 0, 124, 2, 0, 125, 2, 0, 126, 2, 0, 127, 2, 0, 128, 2, 0, 129, 2, 0, 130, 2, 0, 131, 2, 0, 132, 2, 0, 133, 2, 0, 134, 2, 0, 135, 2, 0, 136, 2, 0, 137, 2, 0, 138, 2, 0, 139, 2, 0, 140, 2, 0, 141, 2, 0, 142, 2, 0, 143, 2, 0, 144, 2, 0, 145, 2, 0, 146, 2, 0, 147, 2, 0, 148, 2, 0, 149, 2, 0, 150, 2, 0, 151, 2, 0, 152, 2, 0, 153, 2, 0, 154, 2, 0, 155, 2, 0, 156, 2, 0, 157, 2, 0, 158, -1073741821, 0, 159, -1073741814, 0, 160, 11, 0, 131066, 11, 0, 131067, -1610612721, 0, 131068, 10, 0, 131069, 10, 0, 131070, 10, 0, 131071, 10, 0, 65536, 10, 0, 65537, 10, 0, 65538, 10, 0, 65539, 10, 0, 65540, 10, 0, 65541, 10, 0, 65542, 10, 0, 65543, 10, 0, 65544, 10, 0, 65545, 10, 0, 65546, 10, 0, 65547, 10, 0, 65548, 10, 0, 65549, 10, 0, 65550, 10, 0, 65551, 10, 0, 65552, 10, 0, 65553, 10, 0, 65554, 10, 0, 65555, 10, 0, 65556, 12, 0, 65557, 10, 0, 65558, 12, 0, 65559, 10, 0, 65560, 10, 0, 65561, 10, 0, 65562, 10, 0, 65563, 10, 0, 65564, 10, 0, 65565, 10, 0, 65566, 10, 0, 65567, 10, 0, 65568, 10, 0, 65569, 10, 0, 65570, 10, 0, 65571, 10, 0, 65576, 10, 0, 65577, 10, 0, 65578, 12, 0, 65579, 10, 0, 65580, 10, 0, 65581, 10, 0, 65582, 10, 0, 65583, 10, 0, 65584, 10, 0, 65585, 10, 0, 65586, 10, 0, 65587, 10, 0, 65588, 10, 0, 65589, 10, 0, 65590, 10, 0, 65591, 10, 0, 65592, 10, 0, 65593, 10, 0, 65594, 10, 0, 65595, 10, 0, 65596, 10, 0, 65597, 10, 0, 65598, 10, 0, 65599, 10, 0, 65600, 12, 0, 65601, 10, 0, 65602, 10, 0, 65603, 10, 0, 65604, 10, 0, 65605, 10, 0, 65606, 10, 0, 65607, 10, 0, 65608, 10, 0, 65609, 10, 0, 65610, 10, 0, 65611, 10, 0, 65612, 10, 0, 65613, 10, 0, 65614, 10, 0, 65615, 10, 0, 65616, 10, 0, 65617, 10, 0, 65618, 10, 0, 65619, 10, 0, 65620, 10, 0, 65621, 10, 0, 65622, 10, 0, 65623, 10, 0, 65624, 10, 0, 65625, 10, 0, 65626, 10, 0, 65627, 10, 0, 65628, 10, 0, 65629, 10, 0, 65630, 10, 0, 65631, 10, 0, 65632, 10, 0, 65633, 10, 0, 65634, 10, 0, 65635, 10, 0, 65636, 10, 0, 65637, 10, 0, 65638, 10, 0, 65639, 10, 0, 65640, 10, 0, 65641, 10, 0, 65642, 10, 0, 65643, 10, 0, 65644, 10, 0, 65645, 10, 0, 65646, 10, 0, 65647, 10, 0, 65648, 10, 0, 65649, 10, 0, 65650, 10, 0, 65651, 10, 0, 65652, 10, 0, 65653, 10, 0, 65654, 10, 0, 65655, 10, 0, 65656, 10, 0, 65657, 10, 0, 65658, 10, 0, 65659, 10, 0, 65660, 10, 0, 65661, 10, 0, 65662, 10, 0, 65663, 10, 0, 65664, 10, 0, 65665, 10, 0, 65666, 10, 0, 65667, 10, 0, 65668, 10, 0, 65669, 10, 0, 65670, 10, 0, 65671, 10, 0, 65672, 10, 0, 65673, 10, 0, 65674, 10, 0, 65675, 10, 0, 65676, 10, 0, 65677, 10, 0, 65678, 10, 0, 65679, 10, 0, 65680, 10, 0, 65681, 10, 0, 65682, 10, 0, 65683, 10, 0, 65684, 10, 0, 65685, 10, 0, 65686, 10, 0, 65687, 10, 0, 65688, 10, 0, 65689, 10, 0, 65690, 10, 0, 65691, 10, 0, 65692, 10, 0, 65693, 10, 0, 65694, 10, 0, 65695, 15, 0, 65696, 11, 0 ) +tile_data = PoolIntArray( -1310652, 7, 0, -1310651, -1610612729, 0, -1245116, -1073741822, 0, -1245115, -1610612734, 0, -1179580, -1073741822, 0, -1179579, -1610612734, 0, -1114044, -1073741822, 0, -1114043, -1610612734, 0, -1048508, -1073741822, 0, -1048507, -1610612734, 0, -1048418, -1073741822, 0, -1048417, -1073741814, 0, -1048416, 11, 0, -917510, -1073741813, 0, -917509, -1610612726, 0, -917508, -1610612734, 0, -982972, -1073741822, 0, -982971, -1610612734, 0, -982882, -1073741822, 0, -982881, -1073741814, 0, -982880, 11, 0, -851974, -1073741813, 0, -851973, -1610612726, 0, -851972, -1610612734, 0, -917436, -1073741822, 0, -917435, -1610612734, 0, -917346, -1073741822, 0, -917345, -1073741814, 0, -917344, 11, 0, -786438, -1073741813, 0, -786437, -1610612726, 0, -786436, -1610612734, 0, -851900, -1073741822, 0, -851899, -1610612734, 0, -851810, -1073741822, 0, -851809, -1073741814, 0, -851808, 11, 0, -720902, -1073741813, 0, -720901, -1610612726, 0, -720900, -1610612734, 0, -786364, -1073741822, 0, -786363, -1610612734, 0, -786274, -1073741822, 0, -786273, -1073741814, 0, -786272, 11, 0, -655366, -1073741813, 0, -655365, -1610612726, 0, -655364, -1610612734, 0, -720842, 7, 0, -720841, 2, 0, -720840, 2, 0, -720828, -1073741822, 0, -720827, -1610612734, 0, -720738, -1073741822, 0, -720737, -1073741814, 0, -720736, 11, 0, -589830, -1073741813, 0, -589829, -1610612726, 0, -589828, -1610612734, 0, -655306, -1073741822, 0, -655305, -1610612734, 0, -655292, -1073741817, 0, -655291, 1610612743, 0, -655202, -1073741822, 0, -655201, -1073741814, 0, -655200, 11, 0, -524294, -1073741813, 0, -524293, -1610612726, 0, -524292, -1610612734, 0, -589770, -1073741822, 0, -589769, -1610612734, 0, -589762, 2, 0, -589761, 2, 0, -589760, -1610612729, 0, -589666, -1073741822, 0, -589665, -1073741814, 0, -589664, 11, 0, -458758, 11, 0, -458757, -1610612726, 0, -458756, -1610612734, 0, -524234, -1073741822, 0, -524233, 1610612739, 0, -524232, 2, 0, -524231, 2, 0, -524225, -1073741822, 0, -524224, -1610612734, 0, -524159, 7, 0, -524158, 2, 0, -524157, 2, 0, -524156, 2, 0, -524155, -1610612729, 0, -524149, 7, 0, -524148, 2, 0, -524147, 2, 0, -524146, 2, 0, -524145, 2, 0, -524144, -1610612729, 0, -524130, -1073741822, 0, -524129, -1073741814, 0, -524128, 11, 0, -393222, 11, 0, -393221, -1610612726, 0, -393220, -1610612734, 0, -458698, -1073741822, 0, -458697, -1610612734, 0, -458689, -1073741822, 0, -458688, -1610612734, 0, -458625, 7, 0, -458624, 2, 0, -458623, 1610612739, 0, -458622, 1610612738, 0, -458621, 1610612738, 0, -458620, 1610612738, 0, -458619, 1610612743, 0, -458613, -1073741817, 0, -458612, 1610612738, 0, -458611, 1610612738, 0, -458610, 1610612738, 0, -458609, 1610612738, 0, -458608, -1610612733, 0, -458607, -1610612729, 0, -458594, -1073741822, 0, -458593, -1073741814, 0, -458592, 11, 0, -327686, 11, 0, -327685, -1610612726, 0, -327684, -1610612734, 0, -393162, -1073741822, 0, -393161, -1610612734, 0, -393155, 2, 0, -393154, 2, 0, -393153, 1610612739, 0, -393152, -1610612734, 0, -393120, 2, 0, -393119, 2, 0, -393118, 2, 0, -393093, 7, 0, -393092, 2, 0, -393091, 2, 0, -393090, 2, 0, -393089, 1610612739, 0, -393088, 1610612739, 0, -393087, 1610612743, 0, -393072, -1073741822, 0, -393071, -1610612734, 0, -393058, -1073741822, 0, -393057, -1073741814, 0, -393056, 11, 0, -262150, 11, 0, -262149, -1610612726, 0, -262148, -1610612734, 0, -327647, 7, 0, -327646, 2, 0, -327645, -1610612729, 0, -327626, -1073741822, 0, -327625, -1610612734, 0, -327617, -1073741822, 0, -327616, -1610612734, 0, -327557, -1073741822, 0, -327556, 1610612739, 0, -327555, 1610612739, 0, -327554, 1610612739, 0, -327553, 1610612739, 0, -327552, -1610612734, 0, -327536, -1073741822, 0, -327535, -1610612734, 0, -327522, -1073741822, 0, -327521, -1073741814, 0, -327520, 11, 0, -196614, 11, 0, -196613, -1610612726, 0, -196612, -1610612734, 0, -262111, -1073741822, 0, -262110, 1, 0, -262109, -1610612734, 0, -262090, -1073741822, 0, -262089, 1610612739, 0, -262088, 2, 0, -262087, 2, 0, -262081, -1073741822, 0, -262080, -1610612734, 0, -262041, 7, 0, -262040, -1610612729, 0, -262025, 7, 0, -262024, 2, 0, -262023, 2, 0, -262022, 2, 0, -262021, 1610612739, 0, -262020, 1610612739, 0, -262019, 1610612739, 0, -262018, 1610612739, 0, -262017, 1610612739, 0, -262016, -1610612734, 0, -262000, -1073741822, 0, -261999, -1610612734, 0, -261986, -1073741822, 0, -261985, -1073741814, 0, -261984, 11, 0, -131078, 11, 0, -131077, -1610612726, 0, -131076, -1610612734, 0, -196583, 2, 0, -196582, 2, 0, -196581, 2, 0, -196580, 2, 0, -196579, 2, 0, -196575, -1073741822, 0, -196574, 3, 0, -196573, -1610612734, 0, -196554, -1073741822, 0, -196553, -1610612734, 0, -196545, -1073741822, 0, -196544, -1610612734, 0, -196522, 7, 0, -196521, 2, 0, -196520, 2, 0, -196519, -1610612729, 0, -196513, 7, 0, -196512, 2, 0, -196511, 2, 0, -196510, 2, 0, -196509, -1610612729, 0, -196505, -1073741817, 0, -196504, 1610612743, 0, -196494, 7, 0, -196493, 2, 0, -196492, 2, 0, -196491, 2, 0, -196490, 2, 0, -196489, 1610612739, 0, -196488, 1610612739, 0, -196487, 1610612739, 0, -196486, 1610612739, 0, -196485, 1610612739, 0, -196484, 1610612739, 0, -196483, 1610612739, 0, -196482, 1610612739, 0, -196481, 1610612739, 0, -196480, -1610612734, 0, -196464, -1073741822, 0, -196463, -1610612734, 0, -196450, -1073741822, 0, -196449, -1073741814, 0, -196448, 11, 0, -65542, 11, 0, -65541, -1610612726, 0, -65540, -1610612734, 0, -131039, -1073741822, 0, -131038, 1, 0, -131037, -1610612734, 0, -131032, 7, 0, -131031, 2, 0, -131030, 2, 0, -131029, -1610612729, 0, -131018, -1073741817, 0, -131017, 1610612743, 0, -131011, 2, 0, -131010, 2, 0, -131009, 1610612739, 0, -131008, -1610612734, 0, -130989, 7, 0, -130988, 2, 0, -130987, 2, 0, -130986, 3, 0, -130985, 3, 0, -130984, 3, 0, -130983, 3, 0, -130982, 2, 0, -130981, 2, 0, -130980, 2, 0, -130979, 2, 0, -130978, 2, 0, -130977, 3, 0, -130976, 3, 0, -130975, 3, 0, -130974, 3, 0, -130973, -1610612734, 0, -130960, 7, 0, -130959, 2, 0, -130958, 1610612738, 0, -130957, 1610612738, 0, -130956, 1610612738, 0, -130955, 1610612738, 0, -130954, 1610612738, 0, -130953, 1610612738, 0, -130952, 1610612738, 0, -130951, 1610612738, 0, -130950, 1610612738, 0, -130949, 1610612738, 0, -130948, 1610612738, 0, -130947, 1610612738, 0, -130946, 1610612738, 0, -130945, 1610612738, 0, -130944, 1610612743, 0, -130928, -1073741817, 0, -130927, 1610612743, 0, -130914, -1073741822, 0, -130913, -1073741814, 0, -130912, 11, 0, -6, 11, 0, -5, -1610612726, 0, -4, -1610612734, 0, -65517, 7, 0, -65516, 2, 0, -65515, 2, 0, -65514, -1610612729, 0, -65503, -1073741822, 0, -65502, 3, 0, -65501, -1610612734, 0, -65496, -1073741822, 0, -65495, 3, 0, -65494, 3, 0, -65493, -1610612734, 0, -65473, -1073741822, 0, -65472, -1610612734, 0, -65457, 7, 0, -65456, 2, 0, -65455, 2, 0, -65454, 2, 0, -65453, 3, 0, -65452, 3, 0, -65451, 3, 0, -65450, 3, 0, -65449, 3, 0, -65448, 3, 0, -65447, 3, 0, -65446, 3, 0, -65445, 3, 0, -65444, 3, 0, -65443, 3, 0, -65442, 3, 0, -65441, 3, 0, -65440, 3, 0, -65439, 3, 0, -65438, 3, 0, -65437, -1610612734, 0, -65378, -1073741822, 0, -65377, -1073741814, 0, -65376, 11, 0, 65530, 11, 0, 65531, -1610612726, 0, 65532, 1610612739, 0, 65533, 2, 0, 65534, 2, 0, 65535, 2, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 4, 2, 0, 5, 2, 0, 6, 2, 0, 7, 2, 0, 8, 2, 0, 9, 2, 0, 10, 2, 0, 11, 2, 0, 12, 2, 0, 13, 2, 0, 14, 2, 0, 15, 2, 0, 16, 2, 0, 17, 2, 0, 18, 2, 0, 19, 3, 0, 20, 3, 0, 21, 3, 0, 22, 1610612739, 0, 23, 2, 0, 24, 2, 0, 25, 2, 0, 26, 2, 0, 27, 2, 0, 28, 2, 0, 29, 2, 0, 30, 2, 0, 31, 2, 0, 32, 2, 0, 33, 3, 0, 34, 1, 0, 35, -1610612734, 0, 40, -1073741822, 0, 41, 3, 0, 42, 3, 0, 43, 3, 0, 44, 2, 0, 45, 2, 0, 46, 2, 0, 47, 2, 0, 48, 2, 0, 49, 2, 0, 50, 2, 0, 51, 2, 0, 52, 2, 0, 53, 2, 0, 54, 2, 0, 55, 2, 0, 56, 2, 0, 57, 2, 0, 58, 2, 0, 59, 2, 0, 60, 2, 0, 61, 2, 0, 62, 2, 0, 63, 3, 0, 64, 3, 0, 65, 2, 0, 66, 2, 0, 67, 2, 0, 68, 2, 0, 69, 2, 0, 70, 2, 0, 71, 2, 0, 72, 2, 0, 73, 2, 0, 74, 2, 0, 75, 2, 0, 76, 2, 0, 77, 2, 0, 78, 2, 0, 79, 3, 0, 80, 3, 0, 81, 3, 0, 82, 3, 0, 83, 3, 0, 84, 1610612739, 0, 85, 1610612739, 0, 86, 1610612739, 0, 87, 1610612739, 0, 88, 1610612739, 0, 89, 1610612739, 0, 90, 1610612739, 0, 91, 1610612739, 0, 92, 1610612739, 0, 93, 1610612739, 0, 94, 1610612739, 0, 95, 1610612739, 0, 96, 1610612739, 0, 97, 1610612739, 0, 98, 1610612739, 0, 99, 1610612739, 0, 100, 2, 0, 101, 2, 0, 102, 2, 0, 103, 2, 0, 104, 2, 0, 105, 2, 0, 106, 2, 0, 107, 2, 0, 108, 2, 0, 109, 2, 0, 110, 2, 0, 111, 2, 0, 112, 2, 0, 113, 2, 0, 114, 2, 0, 115, 2, 0, 116, 2, 0, 117, 2, 0, 118, 2, 0, 119, 2, 0, 120, 2, 0, 121, 2, 0, 122, 2, 0, 123, 2, 0, 124, 2, 0, 125, 2, 0, 126, 2, 0, 127, 2, 0, 128, 2, 0, 129, 2, 0, 130, 2, 0, 131, 2, 0, 132, 2, 0, 133, 2, 0, 134, 2, 0, 135, 2, 0, 136, 2, 0, 137, 2, 0, 138, 2, 0, 139, 2, 0, 140, 2, 0, 141, 2, 0, 142, 2, 0, 143, 2, 0, 144, 2, 0, 145, 2, 0, 146, 2, 0, 147, 2, 0, 148, 2, 0, 149, 2, 0, 150, 2, 0, 151, 2, 0, 152, 2, 0, 153, 2, 0, 154, 2, 0, 155, 2, 0, 156, 2, 0, 157, 2, 0, 158, -1073741821, 0, 159, -1073741814, 0, 160, 11, 0, 131066, 11, 0, 131067, -1610612721, 0, 131068, 10, 0, 131069, 10, 0, 131070, 10, 0, 131071, 10, 0, 65536, 10, 0, 65537, 10, 0, 65538, 10, 0, 65539, 10, 0, 65540, 10, 0, 65541, 10, 0, 65542, 10, 0, 65543, 10, 0, 65544, 10, 0, 65545, 10, 0, 65546, 10, 0, 65547, 10, 0, 65548, 10, 0, 65549, 10, 0, 65550, 10, 0, 65551, 10, 0, 65552, 10, 0, 65553, 10, 0, 65554, 10, 0, 65555, 10, 0, 65556, 12, 0, 65557, 10, 0, 65558, 12, 0, 65559, 10, 0, 65560, 10, 0, 65561, 10, 0, 65562, 10, 0, 65563, 10, 0, 65564, 10, 0, 65565, 10, 0, 65566, 10, 0, 65567, 10, 0, 65568, 10, 0, 65569, 10, 0, 65570, 10, 0, 65571, 10, 0, 65576, 10, 0, 65577, 10, 0, 65578, 12, 0, 65579, 10, 0, 65580, 10, 0, 65581, 10, 0, 65582, 10, 0, 65583, 10, 0, 65584, 10, 0, 65585, 10, 0, 65586, 10, 0, 65587, 10, 0, 65588, 10, 0, 65589, 10, 0, 65590, 10, 0, 65591, 10, 0, 65592, 10, 0, 65593, 10, 0, 65594, 10, 0, 65595, 10, 0, 65596, 10, 0, 65597, 10, 0, 65598, 10, 0, 65599, 10, 0, 65600, 12, 0, 65601, 10, 0, 65602, 10, 0, 65603, 10, 0, 65604, 10, 0, 65605, 10, 0, 65606, 10, 0, 65607, 10, 0, 65608, 10, 0, 65609, 10, 0, 65610, 10, 0, 65611, 10, 0, 65612, 10, 0, 65613, 10, 0, 65614, 10, 0, 65615, 10, 0, 65616, 10, 0, 65617, 10, 0, 65618, 10, 0, 65619, 10, 0, 65620, 10, 0, 65621, 10, 0, 65622, 10, 0, 65623, 10, 0, 65624, 10, 0, 65625, 10, 0, 65626, 10, 0, 65627, 10, 0, 65628, 10, 0, 65629, 10, 0, 65630, 10, 0, 65631, 10, 0, 65632, 10, 0, 65633, 10, 0, 65634, 10, 0, 65635, 10, 0, 65636, 10, 0, 65637, 10, 0, 65638, 10, 0, 65639, 10, 0, 65640, 10, 0, 65641, 10, 0, 65642, 10, 0, 65643, 10, 0, 65644, 10, 0, 65645, 10, 0, 65646, 10, 0, 65647, 10, 0, 65648, 10, 0, 65649, 10, 0, 65650, 10, 0, 65651, 10, 0, 65652, 10, 0, 65653, 10, 0, 65654, 10, 0, 65655, 10, 0, 65656, 10, 0, 65657, 10, 0, 65658, 10, 0, 65659, 10, 0, 65660, 10, 0, 65661, 10, 0, 65662, 10, 0, 65663, 10, 0, 65664, 10, 0, 65665, 10, 0, 65666, 10, 0, 65667, 10, 0, 65668, 10, 0, 65669, 10, 0, 65670, 10, 0, 65671, 10, 0, 65672, 10, 0, 65673, 10, 0, 65674, 10, 0, 65675, 10, 0, 65676, 10, 0, 65677, 10, 0, 65678, 10, 0, 65679, 10, 0, 65680, 10, 0, 65681, 10, 0, 65682, 10, 0, 65683, 10, 0, 65684, 10, 0, 65685, 10, 0, 65686, 10, 0, 65687, 10, 0, 65688, 10, 0, 65689, 10, 0, 65690, 10, 0, 65691, 10, 0, 65692, 10, 0, 65693, 10, 0, 65694, 10, 0, 65695, 15, 0, 65696, 11, 0 ) [node name="Decor2" type="Node2D" parent="."] position = Vector2( 595, -12 ) @@ -228,19 +228,19 @@ position = Vector2( 756, -15 ) z_index = -1 [node name="AnimatedSprite" parent="Coin" index="2"] -frame = 235 +frame = 301 [node name="Coin2" parent="." instance=ExtResource( 11 )] position = Vector2( 744, -120 ) [node name="AnimatedSprite" parent="Coin2" index="2"] -frame = 166 +frame = 232 [node name="Coin3" parent="." instance=ExtResource( 11 )] position = Vector2( 1320, -282 ) [node name="AnimatedSprite" parent="Coin3" index="2"] -frame = 166 +frame = 232 [node name="Coin4" parent="." instance=ExtResource( 11 )] position = Vector2( 2340, -156 ) diff --git a/src/Levels/Actual Level 3.tscn b/src/Levels/Actual Level 3.tscn index 8519db0..1a01454 100644 --- a/src/Levels/Actual Level 3.tscn +++ b/src/Levels/Actual Level 3.tscn @@ -113,11 +113,8 @@ 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 = 7 - [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 3 +frame = 11 [node name="Blobby" parent="." instance=ExtResource( 5 )] unique_name_in_owner = true diff --git a/src/StateMachines/StateMachine.gd b/src/StateMachines/StateMachine.gd index c7de971..0a1fe6c 100644 --- a/src/StateMachines/StateMachine.gd +++ b/src/StateMachines/StateMachine.gd @@ -11,8 +11,8 @@ var states = {} onready var parent = get_parent() # Scene Singletons -onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") # Basic process flow for every SM diff --git a/src/UserInterface/Buttons/MenuNavigationButton.gd b/src/UserInterface/Buttons/MenuNavigationButton.gd new file mode 100644 index 0000000..5540193 --- /dev/null +++ b/src/UserInterface/Buttons/MenuNavigationButton.gd @@ -0,0 +1,12 @@ +extends Button + +export(String, FILE) var next_screen_path: = "" +onready var selected_screen_base_path: String = "res://src/UserInterface/Screens" + +func _on_button_up() -> void: + get_tree().change_scene(next_screen_path) + get_tree().get_current_scene().queue_free() + get_tree().paused = false + +func _get_configuration_warning() -> String: + return "next_scene_path must be set for the button to work" if next_screen_path == "" else "" diff --git a/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd b/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd new file mode 100644 index 0000000..6a63cfd --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd @@ -0,0 +1,13 @@ +extends Control + +const InputLine = preload("res://src/UserInterface/Screens/ControlsMenu/InputLine.tscn") + +func clear(): + for child in get_children(): + child.free() + +func add_input_line(action_name, key, is_customizable=false): + var line = InputLine.instance() + line.initialize(action_name, key, is_customizable) + add_child(line) + return line diff --git a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd new file mode 100644 index 0000000..4416c18 --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd @@ -0,0 +1,28 @@ +extends Control + +onready var _action_list = $"%ActionKeyList" + +func _ready(): + $InputMapper.connect('profile_changed', self, 'rebuild') + $ProfilesMenu.initialize($InputMapper) + $InputMapper.change_profile($ProfilesMenu.selected) + +func rebuild(input_profile, is_customizable=false): + _action_list.clear() + for input_action in input_profile.keys(): + var line = _action_list.add_input_line(input_action, \ + input_profile[input_action], is_customizable) + if is_customizable: + line.connect('change_button_pressed', self, \ + '_on_InputLine_change_button_pressed', [input_action, line]) + +func _on_InputLine_change_button_pressed(action_name, line): + set_process_input(false) + + $KeySelectMenu.open() + var key_scancode = yield($KeySelectMenu, "key_selected") + $InputMapper.change_action_key(action_name, key_scancode) + line.update_key(key_scancode) + + set_process_input(true) + diff --git a/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn new file mode 100644 index 0000000..4ae11f7 --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn @@ -0,0 +1,257 @@ +[gd_scene load_steps=23 format=2] + +[ext_resource path="res://assets/ui/Screenshot 2023-05-23 160521.png" type="Texture" id=1] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd" type="Script" id=2] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/ActionKeyList.gd" type="Script" id=3] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/InputMapper.gd" type="Script" id=4] +[ext_resource path="res://assets/meta/ui_theme.tres" type="Theme" id=5] +[ext_resource path="res://assets/meta/montserrat_extrabold.otf" type="DynamicFontData" id=6] +[ext_resource path="res://assets/environment/background/space.png" type="Texture" id=7] +[ext_resource path="res://assets/environment/background/Spaceship-Wall.png" type="Texture" id=8] +[ext_resource path="res://src/transparency.gdshader" type="Shader" id=9] +[ext_resource path="res://assets/sounds/EpsonStart.ogg" type="AudioStream" id=10] +[ext_resource path="res://src/UserInterface/Buttons/MenuNavigationButton.gd" type="Script" id=11] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/ControlsMenu.gd" type="Script" id=12] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd" type="Script" id=13] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/SaveButton.gd" type="Script" id=14] +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/Reset.gd" type="Script" id=15] + +[sub_resource type="DynamicFont" id=1] +size = 42 +font_data = ExtResource( 6 ) + +[sub_resource type="ShaderMaterial" id=6] +shader = ExtResource( 9 ) +shader_param/transparency = 0.1 + +[sub_resource type="DynamicFont" id=2] +font_data = ExtResource( 6 ) + +[sub_resource type="DynamicFont" id=3] +font_data = ExtResource( 6 ) + +[sub_resource type="DynamicFont" id=4] +font_data = ExtResource( 6 ) + +[sub_resource type="ShaderMaterial" id=8] +shader = ExtResource( 9 ) +shader_param/transparency = 0.778 + +[sub_resource type="DynamicFont" id=7] +size = 20 +font_data = ExtResource( 6 ) + +[node name="ControlsMenu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +theme = ExtResource( 5 ) +script = ExtResource( 12 ) + +[node name="InputMapper" type="Node" parent="."] +script = ExtResource( 4 ) + +[node name="background" type="TextureRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource( 7 ) +expand = true +stretch_mode = 1 + +[node name="background2" type="TextureRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource( 8 ) +expand = true +stretch_mode = 1 + +[node name="ProfilesMenu" type="OptionButton" parent="."] +anchor_left = 0.5 +anchor_top = 0.165 +anchor_right = 0.5 +anchor_bottom = 0.165 +margin_left = -14.5 +margin_right = 14.5 +margin_bottom = 19.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource( 2 ) + +[node name="Titel" type="Label" parent="."] +anchor_left = 0.5 +anchor_right = 0.5 +margin_left = -170.0 +margin_right = 170.0 +margin_bottom = 52.0 +grow_horizontal = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +custom_fonts/font = SubResource( 1 ) +text = "Controlls Menu" +align = 1 +valign = 1 + +[node name="TextureRect" type="TextureRect" parent="Titel"] +material = SubResource( 6 ) +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -39.0 +margin_top = -3.0 +margin_right = 251.0 +margin_bottom = 265.0 +rect_scale = Vector2( 0.0627026, 0.0522158 ) +texture = ExtResource( 1 ) + +[node name="KeymapViewer" type="VBoxContainer" parent="."] +anchor_left = 0.1 +anchor_top = 0.3 +anchor_right = 0.9 +anchor_bottom = 0.75 +margin_left = -20.0 +margin_top = -20.0 +margin_right = 20.0 +margin_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Headers" type="HBoxContainer" parent="KeymapViewer"] +margin_right = 552.0 +margin_bottom = 21.0 +size_flags_horizontal = 3 + +[node name="Action" type="Label" parent="KeymapViewer/Headers"] +margin_right = 242.0 +margin_bottom = 21.0 +grow_horizontal = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +custom_fonts/font = SubResource( 2 ) +text = "Action" +valign = 1 + +[node name="Control" type="Label" parent="KeymapViewer/Headers"] +margin_left = 246.0 +margin_right = 305.0 +margin_bottom = 21.0 +grow_horizontal = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +custom_fonts/font = SubResource( 3 ) +text = "Button" +align = 1 +valign = 1 + +[node name="Change" type="Label" parent="KeymapViewer/Headers"] +margin_left = 309.0 +margin_right = 552.0 +margin_bottom = 21.0 +grow_horizontal = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +custom_fonts/font = SubResource( 4 ) +text = "Edit" +align = 2 +valign = 1 + +[node name="ScrollContainer" type="ScrollContainer" parent="KeymapViewer"] +margin_top = 25.0 +margin_right = 552.0 +margin_bottom = 202.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ActionKeyList" type="VBoxContainer" parent="KeymapViewer/ScrollContainer"] +unique_name_in_owner = true +margin_right = 552.0 +margin_bottom = 177.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 3 ) + +[node name="Back" type="Button" parent="."] +anchor_left = 0.05 +anchor_top = 0.95 +anchor_right = 0.05 +anchor_bottom = 0.95 +margin_top = -25.0 +margin_right = 75.0 +grow_horizontal = 2 +grow_vertical = 2 +rect_min_size = Vector2( 40, 20 ) +input_pass_on_modal_close_click = false +size_flags_horizontal = 0 +size_flags_vertical = 0 +text = "Back" +script = ExtResource( 11 ) +next_screen_path = "res://src/UserInterface/Screens/MainScreen.tscn" + +[node name="Reset" type="Button" parent="."] +anchor_left = 0.5 +anchor_top = 0.95 +anchor_right = 0.5 +anchor_bottom = 0.95 +margin_left = -37.5 +margin_top = -25.0 +margin_right = 37.5 +grow_horizontal = 2 +grow_vertical = 2 +rect_min_size = Vector2( 40, 20 ) +input_pass_on_modal_close_click = false +size_flags_horizontal = 0 +size_flags_vertical = 0 +text = "Reset" +script = ExtResource( 15 ) + +[node name="Save" type="Button" parent="."] +anchor_left = 0.95 +anchor_top = 0.95 +anchor_right = 0.95 +anchor_bottom = 0.95 +margin_left = -75.0 +margin_top = -25.0 +grow_horizontal = 2 +grow_vertical = 2 +rect_min_size = Vector2( 40, 20 ) +input_pass_on_modal_close_click = false +size_flags_horizontal = 0 +size_flags_vertical = 0 +text = "Save" +script = ExtResource( 14 ) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 10 ) +volume_db = -10.065 +autoplay = true +bus = "Music" + +[node name="KeySelectMenu" type="Panel" parent="."] +visible = false +material = SubResource( 8 ) +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 13 ) + +[node name="Prompt" type="Label" parent="KeySelectMenu"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -170.0 +margin_top = -26.0 +margin_right = 170.0 +margin_bottom = 26.0 +grow_horizontal = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +custom_fonts/font = SubResource( 7 ) +text = "Press a key (ESC to cancel)" +align = 1 +valign = 1 + +[connection signal="button_up" from="Back" to="Back" method="_on_button_up"] +[connection signal="button_up" from="Reset" to="Reset" method="_on_button_up"] +[connection signal="button_up" from="Save" to="Save" method="_on_button_up"] diff --git a/src/UserInterface/Screens/ControlsMenu/InputLine.gd b/src/UserInterface/Screens/ControlsMenu/InputLine.gd new file mode 100644 index 0000000..9debd3d --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/InputLine.gd @@ -0,0 +1,14 @@ +extends HBoxContainer + +signal change_button_pressed + +func initialize(action_name, key, can_change): + $Action.text = action_name.capitalize() + $Key.text = OS.get_scancode_string(key) + $ChangeButton.disabled = !can_change + +func update_key(scancode): + $Key.text = OS.get_scancode_string(scancode) + +func _on_ChangeButton_pressed(): + emit_signal('change_button_pressed') diff --git a/src/UserInterface/Screens/ControlsMenu/InputLine.tscn b/src/UserInterface/Screens/ControlsMenu/InputLine.tscn new file mode 100644 index 0000000..fcf41fe --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/InputLine.tscn @@ -0,0 +1,45 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/UserInterface/Screens/ControlsMenu/InputLine.gd" type="Script" id=1] + +[node name="InputLine" type="HBoxContainer"] +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +margin_top = -10.0 +margin_bottom = 10.0 +script = ExtResource( 1 ) + +[node name="Action" type="Label" parent="."] +margin_right = 287.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Up" +valign = 1 + +[node name="Key" type="Label" parent="."] +margin_left = 291.0 +margin_right = 578.0 +margin_bottom = 20.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +text = "W Key" +valign = 1 + +[node name="ChangeButton" type="Button" parent="."] +margin_left = 582.0 +margin_right = 640.0 +margin_bottom = 20.0 +grow_horizontal = 0 +grow_vertical = 0 +rect_min_size = Vector2( 40, 20 ) +input_pass_on_modal_close_click = false +size_flags_horizontal = 0 +size_flags_vertical = 0 +text = "Change" +icon_align = 1 + +[connection signal="pressed" from="ChangeButton" to="." method="_on_ChangeButton_pressed"] diff --git a/src/UserInterface/Screens/ControlsMenu/InputMapper.gd b/src/UserInterface/Screens/ControlsMenu/InputMapper.gd new file mode 100644 index 0000000..244783e --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/InputMapper.gd @@ -0,0 +1,58 @@ +extends Node + +signal profile_changed(new_profile, is_customizable) + +var current_profile_id = 0 + +var profiles = { + 0: 'keyboard', + 1: 'controller', + 2: 'keyboard_default', + 3: 'controller_default', +} + +var keyboard_default = { + 'move_up': KEY_UP, + 'move_down': KEY_DOWN, + 'move_left': KEY_LEFT, + 'move_right': KEY_RIGHT +} + +var controller_default = { + 'move_up': KEY_W, + 'move_down': KEY_S, + 'move_left': KEY_A, + 'move_right': KEY_D +} + +var keyboard = keyboard_default +var controller = controller_default + +func change_profile(id): + current_profile_id = id + var profile = get(profiles[id]) + var is_customizable = true if id < 2 else false + + for action_name in profile.keys(): + change_action_key(action_name, profile[action_name]) + emit_signal('profile_changed', profile, is_customizable) + return profile + +func change_action_key(action_name, key_scancode): + erase_action_events(action_name) + + var new_event = InputEventKey.new() + new_event.set_scancode(key_scancode) + InputMap.action_add_event(action_name, new_event) + get_selected_profile()[action_name] = key_scancode + +func erase_action_events(action_name): + var input_events = InputMap.get_action_list(action_name) + for event in input_events: + InputMap.action_erase_event(action_name, event) + +func get_selected_profile(): + return get(profiles[current_profile_id]) + +func _on_ProfilesMenu_item_selected(ID): + change_profile(ID) diff --git a/src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd b/src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd new file mode 100644 index 0000000..fe4c336 --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/KeySelectMenu.gd @@ -0,0 +1,21 @@ +extends Panel + +signal key_selected(scancode) + +func _ready(): + set_process_input(false) + +func _input(event): + if !event.is_pressed(): + return + if event.scancode != 16777217: + emit_signal("key_selected", event.scancode) + close() + +func open(): + show() + set_process_input(true) + +func close(): + hide() + set_process_input(false) diff --git a/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd b/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd new file mode 100644 index 0000000..b7fa2dd --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/ProfilesMenu.gd @@ -0,0 +1,7 @@ +extends OptionButton + +func initialize(input_mapper): + for profile_index in input_mapper.profiles: + var profile_name = input_mapper.profiles[profile_index].capitalize() + add_item(profile_name, profile_index) + self.connect("item_selected", input_mapper, "_on_ProfilesMenu_item_selected") diff --git a/src/UserInterface/Screens/ControlsMenu/Reset.gd b/src/UserInterface/Screens/ControlsMenu/Reset.gd new file mode 100644 index 0000000..5af0636 --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/Reset.gd @@ -0,0 +1,7 @@ +extends Button + +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") + +func _on_button_up() -> void: + InputMap.load_from_globals() + SaveManager.save_default() diff --git a/src/UserInterface/Screens/ControlsMenu/SaveButton.gd b/src/UserInterface/Screens/ControlsMenu/SaveButton.gd new file mode 100644 index 0000000..28a4bac --- /dev/null +++ b/src/UserInterface/Screens/ControlsMenu/SaveButton.gd @@ -0,0 +1,6 @@ +extends Button + +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") + +func _on_button_up() -> void: + SaveManager.save_default() diff --git a/src/UserInterface/Screens/HUD.gd b/src/UserInterface/Screens/HUD.gd index f06a766..f763578 100644 --- a/src/UserInterface/Screens/HUD.gd +++ b/src/UserInterface/Screens/HUD.gd @@ -7,8 +7,8 @@ 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(1).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(2).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") func _ready(): @@ -38,7 +38,7 @@ func _zoom_timer() -> void: func update_interface() -> void: - var wallet = GlobalState.wallet + levelState.currency + var wallet = GlobalState.gsr.wallet + levelState.currency currency.text = "Orbs: %s" % wallet kills.text = "Kills: %s" % levelState.kills diff --git a/src/UserInterface/Screens/MainScreen.tscn b/src/UserInterface/Screens/MainScreen.tscn index cb1ccf3..6c98e13 100644 --- a/src/UserInterface/Screens/MainScreen.tscn +++ b/src/UserInterface/Screens/MainScreen.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=14 format=2] [ext_resource path="res://src/UserInterface/Buttons/QuitButton.tscn" type="PackedScene" id=1] [ext_resource path="res://src/UserInterface/Buttons/Titel.tscn" type="PackedScene" id=2] @@ -9,6 +9,13 @@ [ext_resource path="res://src/UserInterface/Screens/LevelSelectButtonGroup.tres" type="ButtonGroup" id=7] [ext_resource path="res://assets/environment/background/Spaceship-Wall.png" type="Texture" id=8] [ext_resource path="res://assets/sounds/EpsonStart.ogg" type="AudioStream" id=9] +[ext_resource path="res://src/UserInterface/Buttons/MenuNavigationButton.gd" type="Script" id=10] +[ext_resource path="res://assets/meta/montserrat_extrabold.otf" type="DynamicFontData" id=11] +[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=12] + +[sub_resource type="DynamicFont" id=1] +size = 69 +font_data = ExtResource( 11 ) [node name="MainScreen" type="Control"] anchor_right = 1.0 @@ -18,6 +25,8 @@ size_flags_horizontal = 0 size_flags_vertical = 0 theme = ExtResource( 5 ) +[node name="SignalManager" parent="." instance=ExtResource( 12 )] + [node name="background" type="TextureRect" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 @@ -41,6 +50,7 @@ margin_bottom = 85.0 grow_horizontal = 2 size_flags_horizontal = 2 size_flags_vertical = 2 +custom_fonts/font = SubResource( 1 ) text = "bobbi" [node name="MenuContainer" type="HBoxContainer" parent="."] @@ -60,14 +70,22 @@ size_flags_horizontal = 3 [node name="PlayButton" parent="MenuContainer/Buttons" instance=ExtResource( 3 )] margin_right = 296.0 -margin_bottom = 48.0 +margin_bottom = 30.0 next_scene_path = "res://src/Levels/Actual Level 1.tscn" +[node name="Controlls" parent="MenuContainer/Buttons" instance=ExtResource( 3 )] +margin_top = 34.0 +margin_right = 296.0 +margin_bottom = 65.0 +text = "Controls" +script = ExtResource( 10 ) +next_screen_path = "res://src/UserInterface/Screens/ControlsMenu/ControlsMenu.tscn" + [node name="QuitButton" parent="MenuContainer/Buttons" instance=ExtResource( 1 )] anchor_left = 0.0 anchor_right = 0.0 margin_left = 0.0 -margin_top = 52.0 +margin_top = 69.0 margin_right = 296.0 margin_bottom = 100.0 diff --git a/src/Utilities/GlobalState.gd b/src/Utilities/GlobalState.gd new file mode 100644 index 0000000..892321d --- /dev/null +++ b/src/Utilities/GlobalState.gd @@ -0,0 +1,46 @@ +extends Node + +#export(Dictionary) var progress_dict := {} setget set_progress, get_progress +#export(int) var wallet := 0 setget set_wallet +#export(Dictionary) var input_map +#export(bool) var show_tutorial +export(Resource) var gsr + +func set_progress(value) -> void: + gsr.progress_dict = value + SaveManager.save_default() + +func get_progress() -> Dictionary: + return gsr.progress_dict + +func set_savepoint(levelName: String, position: Vector2) -> void: + if(!gsr.progress_dict.has(levelName)): + gsr.progress_dict[levelName] = {} + gsr.progress_dict[levelName]["savepoint"] = position + 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] + else: + return 0 + +func get_savepoint(levelName: String) -> Vector2: + if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("savepoint"): + return gsr.progress_dict[levelName]["savepoint"] + else: + return Vector2() + +# TODO This is permanent immediatly +func set_wallet(value) -> void: + gsr.wallet = value + SaveManager.save_default() + +func reinstate() -> void: + if gsr.input_map.size() <= 1: + InputMap.load_from_globals() + + for action in gsr.input_map: + InputMap.action_erase_events(action) + for input_event in gsr.input_map[action]: + InputMap.action_add_event(action, input_event) diff --git a/src/Utilities/GlobalStateResource.gd b/src/Utilities/GlobalStateResource.gd new file mode 100644 index 0000000..d499b53 --- /dev/null +++ b/src/Utilities/GlobalStateResource.gd @@ -0,0 +1,7 @@ +extends Resource +class_name GlobalStateResource + +export(Dictionary) var progress_dict := {} +export(int) var wallet := 0 +export(Dictionary) var input_map +export(bool) var show_tutorial diff --git a/src/Utilities/InputMapLoader.gd b/src/Utilities/InputMapLoader.gd new file mode 100644 index 0000000..ae12560 --- /dev/null +++ b/src/Utilities/InputMapLoader.gd @@ -0,0 +1,4 @@ +extends Node + + + diff --git a/src/Utilities/LevelState.gd b/src/Utilities/LevelState.gd index cdb6d1a..cd8b7e4 100644 --- a/src/Utilities/LevelState.gd +++ b/src/Utilities/LevelState.gd @@ -1,6 +1,6 @@ extends Node -onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") +onready var signalManager := get_tree().root.get_child(2).get_node("%SignalManager") onready var levelName := get_tree().get_current_scene().get_name() #TODO Easteregg pls @@ -20,6 +20,9 @@ func reset() -> void: kills = 0 currency = 0 frees = 0 + # TODO Maybe not the place for this? + if GlobalState.gsr.progress_dict.has(levelName): + GlobalState.gsr.progress_dict[levelName].erase("savepoint") func set_currency(value: int) -> void: currency = value @@ -42,14 +45,14 @@ func set_dead(value: bool) -> 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: - if GlobalState.wallet + currency < cost: + if GlobalState.gsr.wallet + currency < cost: return false var remainder = currency - cost if remainder >= 0: currency = remainder else: currency = 0 - GlobalState.set_wallet(GlobalState.wallet + remainder) + GlobalState.set_wallet(GlobalState.gsr.wallet + remainder) return true @@ -74,11 +77,9 @@ func update_global_state() -> void: 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 - # TODO This is not the best place for this - progress_dict[levelName].erase("savepoint") - - GlobalState.set_wallet(GlobalState.wallet + currency) + # TODO Wallet is independant from progress_dict because??? + GlobalState.set_wallet(GlobalState.gsr.wallet + currency) GlobalState.set_progress(progress_dict) func player_dying(animation_number: int = 0) -> void: diff --git a/src/Utilities/SignalManager.gd b/src/Utilities/SignalManager.gd index 12e28f8..9fd2642 100644 --- a/src/Utilities/SignalManager.gd +++ b/src/Utilities/SignalManager.gd @@ -7,6 +7,7 @@ signal currency_updated() signal kills_updated() signal frees_updated() signal player_died(animation_number) +# TODO The persisting process could be cancelled when the level is unloaded signal level_completed() signal power_up_collected(kind) signal got_stomped() diff --git a/src/transparency.gdshader b/src/transparency.gdshader new file mode 100644 index 0000000..6a09628 --- /dev/null +++ b/src/transparency.gdshader @@ -0,0 +1,8 @@ +shader_type canvas_item; + +uniform float transparency : hint_range(0.0, 1.0) = 0.5; + +void fragment() { + COLOR = texture(TEXTURE, UV); + COLOR.a = transparency; +} \ No newline at end of file