Camera Overhaul (preliminary)

This commit is contained in:
Jakob Feldmann 2023-01-16 21:07:48 +01:00
parent 35b525dff9
commit 9b3676fe2c
9 changed files with 201 additions and 79 deletions

View File

@ -69,6 +69,7 @@ window=false
grav=false grav=false
layer=false layer=false
viewport=true viewport=true
physics=false
[importer_defaults] [importer_defaults]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=114 format=2] [gd_scene load_steps=115 format=2]
[ext_resource path="res://assets/blobby/blobby-effects-spritesheet.png" type="Texture" id=1] [ext_resource path="res://assets/blobby/blobby-effects-spritesheet.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3] [ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3]
@ -254,6 +254,8 @@ priority = 0
[sub_resource type="AnimationNodeStateMachineTransition" id=137] [sub_resource type="AnimationNodeStateMachineTransition" id=137]
[sub_resource type="AnimationNodeStateMachineTransition" id=189]
[sub_resource type="AnimationNodeStateMachine" id=47] [sub_resource type="AnimationNodeStateMachine" id=47]
states/duckTurn/node = SubResource( 126 ) states/duckTurn/node = SubResource( 126 )
states/duckTurn/position = Vector2( 1795.54, 241 ) states/duckTurn/position = Vector2( 1795.54, 241 )
@ -266,7 +268,7 @@ states/idleTurn/position = Vector2( 1375.54, -193.991 )
states/idling/node = SubResource( 116 ) states/idling/node = SubResource( 116 )
states/idling/position = Vector2( 1375.54, -54 ) states/idling/position = Vector2( 1375.54, -54 )
states/jumpToFall/node = SubResource( 119 ) states/jumpToFall/node = SubResource( 119 )
states/jumpToFall/position = Vector2( 1795.54, 343.009 ) states/jumpToFall/position = Vector2( 1795.54, 306.009 )
states/jumping/node = SubResource( 125 ) states/jumping/node = SubResource( 125 )
states/jumping/position = Vector2( 1375.54, 117.009 ) states/jumping/position = Vector2( 1375.54, 117.009 )
states/runToJump/node = SubResource( 146 ) states/runToJump/node = SubResource( 146 )
@ -281,9 +283,9 @@ states/wallslideToJump/node = SubResource( 136 )
states/wallslideToJump/position = Vector2( 1375.54, 343.009 ) states/wallslideToJump/position = Vector2( 1375.54, 343.009 )
states/wallsliding/node = SubResource( 96 ) states/wallsliding/node = SubResource( 96 )
states/wallsliding/position = Vector2( 1795.54, 493.009 ) states/wallsliding/position = Vector2( 1795.54, 493.009 )
transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ) ] transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ), "jumping", "wallsliding", SubResource( 189 ) ]
start_node = "idling" start_node = "idling"
graph_offset = Vector2( 1098.54, -360.991 ) graph_offset = Vector2( 995.54, 69.009 )
[sub_resource type="AnimationNodeStateMachinePlayback" id=48] [sub_resource type="AnimationNodeStateMachinePlayback" id=48]

View File

@ -2,15 +2,29 @@ extends Camera2D
var horizontal_facing = 0 var horizontal_facing = 0
var vertical_facing = 0 var vertical_facing = 0
var camera_horizontal_shift = 90
var camera_vertical_shift = 0 var camera_vertical_shift = 0
var time: float = 0 var move_time: float = 0
var slow_time: float = 0
var original_limit_left: int
var original_limit_right: int
var original_limit_bottom: int
var original_limit_top: int
var camera_is_panning: bool = false
var target_offset: Vector2 = Vector2(0,0)
onready var tween = $ShiftTween export var camera_horizontal_shift = 80
export var offset_reset_seconds := 1
export var offset_adapt_seconds := 0.8
onready var tween = $OffsetTween
onready var shiftLeft = $CameraAnimationPlayer.get_animation("shiftingLeft")
onready var shiftRight = $CameraAnimationPlayer.get_animation("shiftingRight")
onready var shiftCenter = $CameraAnimationPlayer.get_animation("shiftingCenter")
onready var anim_player = $CameraAnimationPlayer
onready var original_x_zoom = zoom.x onready var original_x_zoom = zoom.x
onready var original_y_zoom = zoom.y onready var original_y_zoom = zoom.y
onready var blobby = get_node("%Blobby") onready var blobby = get_node("%Blobby")
onready var prev_camera_pos onready var screen_rect = Vector2(ProjectSettings.get_setting("display/window/size/width") * zoom.x, ProjectSettings.get_setting("display/window/size/height") * zoom.y )
var image = Image.new() var image = Image.new()
var texture = ImageTexture.new() var texture = ImageTexture.new()
@ -19,17 +33,25 @@ var texture = ImageTexture.new()
# Requires "TileMap" to be a sibling of blobby # Requires "TileMap" to be a sibling of blobby
func _ready(): func _ready():
_set_boundaries() _set_boundaries()
print(screen_rect)
self.position = blobby.global_position self.position = blobby.global_position
prev_camera_pos = get_camera_screen_center()
offset.x = -camera_horizontal_shift if zoom.x == original_x_zoom else 0
image.create(128, 2, false, Image.FORMAT_RGBAH) image.create(128, 2, false, Image.FORMAT_RGBAH)
_update_lighting_shader() _update_lighting_shader()
# TODO Trigger when needed
get_node("LightAnimationPlayer").play("Pulsing") get_node("LightAnimationPlayer").play("Pulsing")
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
if(!GlobalState.is_dead): if(!GlobalState.is_dead):
time += delta #print(get_camera_screen_center().x - blobby.global_position.x)
_adapt_to_movement() var player_vel = blobby.velocity
if(abs(player_vel.x) >= blobby.max_velocity["walk"]):
move_time += delta
slow_time = 0
else:
slow_time += delta
move_time = 0
_adapt_to_movement(player_vel)
#TODO Do this via a event or let it be to track blobbies movement better #TODO Do this via a event or let it be to track blobbies movement better
else: else:
self.position = blobby.global_position self.position = blobby.global_position
@ -44,11 +66,14 @@ func _set_boundaries():
# New pngs -> completely new tiles and rebuild map # New pngs -> completely new tiles and rebuild map
var rect = tilemap.get_used_rect() var rect = tilemap.get_used_rect()
var cell_size = tilemap.cell_size var cell_size = tilemap.cell_size
limit_right = rect.end.x * cell_size.x - camera_horizontal_shift limit_right = rect.end.x * cell_size.x
limit_left = rect.position.x * cell_size.x + camera_horizontal_shift limit_left = rect.position.x * cell_size.x
# TODO: When vertical scrolling is fixed limit_top = rect.position.y * cell_size.y
limit_top = rect.position.y * cell_size.y #+ camera_vertical_shift limit_bottom = rect.end.y * cell_size.y
limit_bottom = rect.end.y * cell_size.y #- camera_vertical_shift original_limit_left = limit_left
original_limit_right = limit_right
original_limit_top = limit_top
original_limit_bottom = limit_bottom
var screen_size = get_viewport_rect() var screen_size = get_viewport_rect()
var h_pixels = limit_right - limit_left var h_pixels = limit_right - limit_left
var v_pixels = limit_bottom - limit_top var v_pixels = limit_bottom - limit_top
@ -61,41 +86,52 @@ func _set_boundaries():
zoom.x = zoom.y zoom.x = zoom.y
# TODO Smoothing the camera limits in godot ruins this still? # TODO Smoothing the camera limits in godot ruins this still?
func _adapt_to_movement(): func _adapt_to_movement(velocity: Vector2) -> void:
# TODO Adapt this to movement speed var offset_track
var target_offset: Vector2 = Vector2(0,0) if(move_time >= offset_adapt_seconds && !anim_player.is_playing()):
var tween_v = false target_offset.x = camera_horizontal_shift * sign(velocity.x)
var tween_h = false if(sign(velocity.x) < 0):
# TODO Make smarter offset_track = shiftLeft.find_track(".:offset")
if(time > 0.1): shiftLeft.track_set_key_value(offset_track, 0, offset)
time = 0.0 shiftLeft.track_set_key_value(offset_track, 1, target_offset)
var cam_offset = get_camera_screen_center() - prev_camera_pos limit_left = original_limit_left + camera_horizontal_shift
var new_h_facing = sign(cam_offset.x) anim_player.play("shiftingLeft")
if new_h_facing != 0 && horizontal_facing != new_h_facing: else:
horizontal_facing = new_h_facing offset_track = shiftRight.find_track(".:offset")
target_offset.x = camera_horizontal_shift * horizontal_facing shiftRight.track_set_key_value(offset_track, 0, offset)
tween_h = true shiftRight.track_set_key_value(offset_track, 1, target_offset)
limit_right = original_limit_right - camera_horizontal_shift
# var new_v_facing = sign(cam_offset.y) anim_player.play("shiftingRight")
# if new_v_facing != 0 && vertical_facing != new_v_facing: if(slow_time >= offset_reset_seconds):
# vertical_facing = new_v_facing var center = get_camera_screen_center()
# target_offset.x = offset.x if !new_h_facing else target_offset.x var left_edge_pos = center.x - screen_rect.x/2 + camera_horizontal_shift
# target_offset.y = camera_vertical_shift * vertical_facing var right_edge_pos = center.x + screen_rect.x/2 - camera_horizontal_shift
# tween_v = true print("left_edge")
print(left_edge_pos)
prev_camera_pos = get_camera_screen_center() print("limit_left")
if ((tween_h || tween_v )): print(limit_left)
#TODO Motion may be too complex print("right_edge")
tween.interpolate_property( print(right_edge_pos)
self, print("limit_right")
"offset", print(limit_right)
offset, if(left_edge_pos > limit_left && limit_right > right_edge_pos && !anim_player.is_playing()):
target_offset, target_offset.x = 0
1.2, offset_track = shiftCenter.find_track(".:offset")
Tween.TRANS_SINE, shiftCenter.track_set_key_value(offset_track, 0, offset)
Tween.EASE_OUT shiftCenter.track_set_key_value(offset_track, 1, target_offset)
) var limit_left_track = shiftCenter.find_track(".:limit_left")
tween.start() var limit_right_track = shiftCenter.find_track(".:limit_right")
var limit_top_track = shiftCenter.find_track(".:limit_top")
var limit_bottom_track = shiftCenter.find_track(".:limit_bottom")
shiftCenter.track_set_key_value(limit_left_track, 0, limit_left)
shiftCenter.track_set_key_value(limit_right_track, 0, limit_right)
shiftCenter.track_set_key_value(limit_top_track, 0, limit_top)
shiftCenter.track_set_key_value(limit_bottom_track, 0, limit_bottom)
shiftCenter.track_set_key_value(limit_left_track, 1, original_limit_left)
shiftCenter.track_set_key_value(limit_right_track, 1,original_limit_right)
shiftCenter.track_set_key_value(limit_top_track, 1, original_limit_top)
shiftCenter.track_set_key_value(limit_bottom_track, 1, original_limit_bottom)
anim_player.play("shiftingCenter")
position = blobby.position position = blobby.position
func _death_cam(): func _death_cam():

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=47 format=2] [gd_scene load_steps=50 format=2]
[ext_resource path="res://src/Actors/BlobbyCam.gd" type="Script" id=1] [ext_resource path="res://src/Actors/BlobbyCam.gd" type="Script" id=1]
[ext_resource path="res://assets/environment/background/Asteroids-Near.png" type="Texture" id=2] [ext_resource path="res://assets/environment/background/Asteroids-Near.png" type="Texture" id=2]
@ -303,6 +303,102 @@ tracks/9/keys = {
"values": [ false ] "values": [ false ]
} }
[sub_resource type="Animation" id=11]
resource_name = "shiftingCenter"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath(".:limit_left")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ -10000000, -10000000 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath(".:limit_top")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ -10000000, -10000000 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath(".:limit_right")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ 10000000, 10000000 ]
}
tracks/4/type = "value"
tracks/4/path = NodePath(".:limit_bottom")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ 10000000, 10000000 ]
}
[sub_resource type="Animation" id=12]
resource_name = "shiftingLeft"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
[sub_resource type="Animation" id=13]
resource_name = "shiftingRight"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
[sub_resource type="Animation" id=9] [sub_resource type="Animation" id=9]
resource_name = "Pulsing" resource_name = "Pulsing"
length = 3.33 length = 3.33
@ -409,18 +505,20 @@ zoom = Vector2( 0.75, 0.75 )
process_mode = 0 process_mode = 0
drag_margin_h_enabled = true drag_margin_h_enabled = true
drag_margin_v_enabled = true drag_margin_v_enabled = true
drag_margin_left = 0.1 drag_margin_left = 0.05
drag_margin_top = 0.0 drag_margin_top = 0.0
drag_margin_right = 0.1 drag_margin_right = 0.05
drag_margin_bottom = 0.0 editor_draw_drag_margin = true
editor_draw_screen = false
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="ShiftTween" type="Tween" parent="."] [node name="OffsetTween" type="Tween" parent="."]
[node name="CameraAnimationPlayer" type="AnimationPlayer" parent="."] [node name="CameraAnimationPlayer" type="AnimationPlayer" parent="."]
anims/RESET = SubResource( 5 ) anims/RESET = SubResource( 5 )
anims/deathCam = SubResource( 6 ) anims/deathCam = SubResource( 6 )
anims/shiftingCenter = SubResource( 11 )
anims/shiftingLeft = SubResource( 12 )
anims/shiftingRight = SubResource( 13 )
[node name="LightAnimationPlayer" type="AnimationPlayer" parent="."] [node name="LightAnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../ParallaxBackground/ParallaxLayer4") root_node = NodePath("../ParallaxBackground/ParallaxLayer4")
@ -511,10 +609,10 @@ texture = ExtResource( 8 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] [node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
visible = false visible = false
frames = SubResource( 7 ) frames = SubResource( 7 )
frame = 10 frame = 6
playing = true playing = true
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] [node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
frames = SubResource( 8 ) frames = SubResource( 8 )
frame = 1 frame = 11
playing = true playing = true

View File

@ -23,7 +23,7 @@ func _on_LevelTemplate_ready() -> void:
# Executes on frog death # Executes on frog death
# The old switchero # The old switchero
func _on_WhatAreFrog_child_exiting_tree(node:Node) -> void: func _on_WhatAreFrog_child_exiting_tree(_node:Node) -> void:
if(is_first_signal): if(is_first_signal):
var anchor = RopeAnchor.instance() var anchor = RopeAnchor.instance()
anchor.mode = 0 anchor.mode = 0

View File

@ -54,7 +54,7 @@ cast_to = Vector2( 0, -13 )
collision_mask = 56 collision_mask = 56
[node name="Orientation" type="RayCast2D" parent="."] [node name="Orientation" type="RayCast2D" parent="."]
cast_to = Vector2( 1, 0 ) cast_to = Vector2( -1, 0 )
collision_mask = 0 collision_mask = 0
collide_with_bodies = false collide_with_bodies = false

View File

@ -5,4 +5,3 @@
[node name="Rope" type="Node2D"] [node name="Rope" type="Node2D"]
z_index = -1 z_index = -1
script = ExtResource( 1 ) script = ExtResource( 1 )
rope_tightness = 0.5

View File

@ -29,9 +29,6 @@ wait_time = 20.0
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 1 frame = 1
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 11
[node name="Blobby" parent="." instance=ExtResource( 2 )] [node name="Blobby" parent="." instance=ExtResource( 2 )]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 ) position = Vector2( -70, -1.90735e-06 )

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=15 format=2] [gd_scene load_steps=13 format=2]
[ext_resource path="res://src/Utilities/GameplaySignalManager.gd" type="Script" id=1] [ext_resource path="res://src/Utilities/GameplaySignalManager.gd" type="Script" id=1]
[ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=2] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=2]
@ -11,8 +11,6 @@
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=9] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=9]
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=10] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=10]
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=11] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=11]
[ext_resource path="res://src/Actors/Enemies/Beings/BoundFrog.tscn" type="PackedScene" id=12]
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=13]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4] [sub_resource type="AnimationNodeStateMachinePlayback" id=4]
@ -34,10 +32,7 @@ cell_size = Vector2( 24, 24 )
collision_layer = 8 collision_layer = 8
collision_mask = 8 collision_mask = 8
format = 1 format = 1
tile_data = PoolIntArray( 131099, -1073741822, 0, 262139, -1610612734, 0, 196635, -1073741822, 0, 327675, -1610612734, 0, 262171, -1073741822, 0, 393211, -1610612734, 0, 327707, -1073741822, 0, 458747, -1610612734, 0, 393243, -1073741822, 0, 524283, -1610612734, 0, 458779, -1073741822, 0, 589819, -1610612734, 0, 524315, -1073741822, 0, 655355, -1610612734, 0, 589851, -1073741822, 0, 720891, -1610612734, 0, 655387, -1073741822, 0, 786427, -1610612734, 0, 720923, -1073741822, 0, 851963, -1610612734, 0, 786459, -1073741822, 0, 917499, -1610612734, 0, 851995, -1073741822, 0, 983036, 2, 0, 983037, 2, 0, 983038, 2, 0, 983039, 2, 0, 917504, 2, 0, 917505, 2, 0, 917506, 2, 0, 917507, 2, 0, 917508, 2, 0, 917509, 2, 0, 917510, 2, 0, 917511, 2, 0, 917512, 2, 0, 917513, 2, 0, 917514, 2, 0, 917515, 2, 0, 917516, 2, 0, 917517, 2, 0, 917518, 2, 0, 917519, 2, 0, 917520, 2, 0, 917521, 2, 0, 917522, 2, 0, 917523, 2, 0, 917524, 2, 0, 917525, 2, 0, 917526, 2, 0, 917527, 2, 0, 917528, 2, 0, 917529, 2, 0, 917530, 2, 0 ) tile_data = PoolIntArray( 65531, -1610612734, 0, 51, -1073741822, 0, 131067, -1610612734, 0, 65587, -1073741822, 0, 196603, -1610612734, 0, 131123, -1073741822, 0, 262139, -1610612734, 0, 196659, -1073741822, 0, 327675, -1610612734, 0, 262195, -1073741822, 0, 393211, -1610612734, 0, 327731, -1073741822, 0, 458747, -1610612734, 0, 393267, -1073741822, 0, 524283, -1610612734, 0, 458803, -1073741822, 0, 589819, -1610612734, 0, 524339, -1073741822, 0, 655355, -1610612734, 0, 589875, -1073741822, 0, 720891, -1610612734, 0, 655411, -1073741822, 0, 786427, -1610612734, 0, 720947, -1073741822, 0, 851963, -1610612734, 0, 786483, -1073741822, 0, 917499, -1610612734, 0, 852019, -1073741822, 0, 983036, 2, 0, 983037, 2, 0, 983038, 2, 0, 983039, 2, 0, 917504, 2, 0, 917505, 2, 0, 917506, 2, 0, 917507, 2, 0, 917508, 2, 0, 917509, 2, 0, 917510, 2, 0, 917511, 2, 0, 917512, 2, 0, 917513, 2, 0, 917514, 2, 0, 917515, 2, 0, 917516, 2, 0, 917517, 2, 0, 917518, 2, 0, 917519, 2, 0, 917520, 2, 0, 917521, 2, 0, 917522, 2, 0, 917523, 2, 0, 917524, 2, 0, 917525, 2, 0, 917526, 2, 0, 917527, 2, 0, 917528, 2, 0, 917529, 2, 0, 917530, 2, 0, 917531, 2, 0, 917532, 2, 0, 917533, 2, 0, 917534, 2, 0, 917535, 2, 0, 917536, 2, 0, 917537, 2, 0, 917538, 2, 0, 917539, 2, 0, 917540, 2, 0, 917541, 2, 0, 917542, 2, 0, 917543, 2, 0, 917544, 2, 0, 917545, 2, 0, 917546, 2, 0, 917547, 2, 0, 917548, 2, 0, 917549, 2, 0, 917550, 2, 0, 917551, 2, 0, 917552, 2, 0, 917553, 2, 0, 917554, 2, 0 )
[node name="Spikes" parent="." instance=ExtResource( 13 )]
position = Vector2( 252, 323 )
[node name="BlobbyCam" parent="." instance=ExtResource( 11 )] [node name="BlobbyCam" parent="." instance=ExtResource( 11 )]
@ -49,9 +44,6 @@ scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] [node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 ) parameters/playback = SubResource( 4 )
[node name="BoundFrog" parent="." instance=ExtResource( 12 )]
position = Vector2( 200, 323 )
[node name="Collectibles" type="Node2D" parent="."] [node name="Collectibles" type="Node2D" parent="."]
visible = false visible = false
@ -114,7 +106,6 @@ next_scene = ExtResource( 6 )
[node name="GameplaySignalManager" type="Node2D" parent="."] [node name="GameplaySignalManager" type="Node2D" parent="."]
script = ExtResource( 1 ) script = ExtResource( 1 )
[connection signal="ready" from="." to="BoundFrog" method="_on_LevelTemplate_ready"]
[connection signal="timeout" from="UserInterface/HUD/HUDOverlay/GetBackTimer/Timer" to="GameplaySignalManager" method="_on_Timer_timeout"] [connection signal="timeout" from="UserInterface/HUD/HUDOverlay/GetBackTimer/Timer" to="GameplaySignalManager" method="_on_Timer_timeout"]
[connection signal="getback_timer_up" from="GameplaySignalManager" to="Blobby" method="_on_GameplaySignalManager_getback_timer_up"] [connection signal="getback_timer_up" from="GameplaySignalManager" to="Blobby" method="_on_GameplaySignalManager_getback_timer_up"]
[connection signal="terminal_activated" from="GameplaySignalManager" to="UserInterface/HUD" method="_on_SignalManager_terminal_activated"] [connection signal="terminal_activated" from="GameplaySignalManager" to="UserInterface/HUD" method="_on_SignalManager_terminal_activated"]
@ -122,8 +113,6 @@ script = ExtResource( 1 )
[editable path="UserInterface"] [editable path="UserInterface"]
[editable path="UserInterface/HUD"] [editable path="UserInterface/HUD"]
[editable path="Blobby"] [editable path="Blobby"]
[editable path="BoundFrog"]
[editable path="BoundFrog/RopeAnchor"]
[editable path="TreeWhyButtons"] [editable path="TreeWhyButtons"]
[editable path="TreeWhyButtons/WhyButton1"] [editable path="TreeWhyButtons/WhyButton1"]
[editable path="TreeWhyButtons/WhyButton2"] [editable path="TreeWhyButtons/WhyButton2"]