Compare commits
7 Commits
2763b57b40
...
b0c5798328
Author | SHA1 | Date |
---|---|---|
Felipe M | b0c5798328 | |
Felipe M | c5a54977ac | |
Felipe M | 847670821d | |
Felipe M | d4acde846c | |
Felipe M | ad7cb69355 | |
Felipe M | 2b90d087c4 | |
Felipe M | bdd9f2ea2c |
|
@ -0,0 +1,3 @@
|
|||
[gd_resource type="Resource" format=2]
|
||||
|
||||
[resource]
|
|
@ -6,3 +6,12 @@ func _ready():
|
|||
var parent = get_parent()
|
||||
if parent is WORLD:
|
||||
parent.currentLevel = self
|
||||
|
||||
func save():
|
||||
var data = {
|
||||
"filename": get_filename(),
|
||||
"parent": get_parent().get_path(),
|
||||
"position_x": position.x,
|
||||
"position_y": position.y
|
||||
}
|
||||
return data
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
[ext_resource path="res://Levels/Level.gd" type="Script" id=1]
|
||||
[ext_resource path="res://Scenes/TileMap.tscn" type="PackedScene" id=2]
|
||||
|
||||
[node name="Level" type="Node2D"]
|
||||
[node name="Level" type="Node2D" groups=[
|
||||
"Persists",
|
||||
]]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="TileMap" parent="." instance=ExtResource( 2 )]
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://Levels/Level.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://Levels/Door.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Levels/DoorConnections/00_link_01.tres" type="Resource" id=3]
|
||||
[ext_resource path="res://Scenes/Objects/SaveStation.tscn" type="PackedScene" id=4]
|
||||
|
||||
[node name="Level_00" instance=ExtResource( 1 )]
|
||||
|
||||
[node name="TileMap" parent="." index="0"]
|
||||
tile_data = PoolIntArray( 0, 0, 4, 1, 0, 196609, 2, 0, 196609, 3, 0, 196609, 4, 0, 196609, 5, 0, 196609, 6, 0, 196609, 7, 0, 196609, 8, 0, 196609, 9, 0, 196609, 10, 0, 196609, 11, 0, 196609, 12, 0, 196609, 13, 0, 196609, 14, 0, 196609, 15, 0, 196609, 16, 0, 196609, 17, 0, 196609, 18, 0, 196609, 19, 0, 7, 65536, 0, 65539, 65555, 0, 65539, 131072, 0, 65539, 131091, 0, 65539, 196608, 0, 65539, 196627, 0, 65539, 262144, 0, 65539, 262163, 0, 65539, 327680, 0, 65539, 327699, 0, 65539, 393216, 0, 65539, 393235, 0, 65539, 458752, 0, 65539, 458771, 0, 131075, 524288, 0, 65539, 589824, 0, 65539, 655360, 0, 196612, 655361, 0, 196609, 655362, 0, 196609, 655363, 0, 196609, 655364, 0, 196609, 655365, 0, 196609, 655366, 0, 196609, 655367, 0, 196609, 655368, 0, 196609, 655369, 0, 196609, 655370, 0, 196609, 655371, 0, 196609, 655372, 0, 196609, 655373, 0, 196609, 655374, 0, 196609, 655375, 0, 196609, 655376, 0, 196609, 655377, 0, 196609, 655378, 0, 196609, 655379, 0, 196610 )
|
||||
tile_data = PoolIntArray( 0, 0, 4, 1, 0, 196609, 2, 0, 196609, 3, 0, 196609, 4, 0, 196609, 5, 0, 196609, 6, 0, 196609, 7, 0, 196609, 8, 0, 196609, 9, 0, 196609, 10, 0, 196609, 11, 0, 196609, 12, 0, 196609, 13, 0, 196609, 14, 0, 196609, 15, 0, 196609, 16, 0, 196609, 17, 0, 196609, 18, 0, 196609, 19, 0, 7, 65536, 0, 65539, 65555, 0, 65539, 131072, 0, 65539, 131091, 0, 65539, 262142, 0, 4, 262143, 0, 196609, 196608, 0, 196615, 196627, 0, 65539, 327678, 0, 65539, 262163, 0, 65539, 393214, 0, 65539, 327699, 0, 65539, 458750, 0, 65539, 393235, 0, 65539, 524286, 0, 196612, 524287, 0, 196609, 458752, 0, 7, 458771, 0, 131075, 524288, 0, 65539, 589824, 0, 65539, 655360, 0, 196612, 655361, 0, 196609, 655362, 0, 196609, 655363, 0, 196609, 655364, 0, 196609, 655365, 0, 196609, 655366, 0, 196609, 655367, 0, 196609, 655368, 0, 196609, 655369, 0, 196609, 655370, 0, 196609, 655371, 0, 196609, 655372, 0, 196609, 655373, 0, 196609, 655374, 0, 196609, 655375, 0, 196609, 655376, 0, 196609, 655377, 0, 196609, 655378, 0, 196609, 655379, 0, 196610 )
|
||||
|
||||
[node name="Door" parent="." index="1" instance=ExtResource( 2 )]
|
||||
position = Vector2( 312, 144 )
|
||||
connection = ExtResource( 3 )
|
||||
new_level_path = "res://Levels/Level_01.tscn"
|
||||
|
||||
[node name="SaveStation" parent="." index="2" instance=ExtResource( 4 )]
|
||||
position = Vector2( 215, 160 )
|
||||
scale = Vector2( 0.998604, 1 )
|
||||
|
|
|
@ -1,16 +1,30 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://Levels/Door.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://Levels/Level.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Levels/DoorConnections/00_link_01.tres" type="Resource" id=3]
|
||||
[ext_resource path="res://Levels/DoorConnections/01_99.tres" type="Resource" id=4]
|
||||
[ext_resource path="res://Scenes/Player/MissilesPowerup.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://Scenes/Objects/SaveStation.tscn" type="PackedScene" id=6]
|
||||
|
||||
[node name="Level_01" instance=ExtResource( 2 )]
|
||||
|
||||
[node name="TileMap" parent="." index="0"]
|
||||
tile_data = PoolIntArray( 393216, 0, 4, 393217, 0, 196609, 393218, 0, 196609, 393219, 0, 196609, 393220, 0, 196609, 393221, 0, 7, 458752, 0, 131075, 458757, 0, 131075, 655360, 0, 196608, 655361, 0, 196609, 655362, 0, 196609, 655363, 0, 196609, 655364, 0, 196609, 655365, 0, 196610 )
|
||||
|
||||
[node name="InDoor" parent="." index="1" instance=ExtResource( 1 )]
|
||||
[node name="OutDoor" parent="." index="1" instance=ExtResource( 1 )]
|
||||
position = Vector2( 88, 144 )
|
||||
connection = ExtResource( 4 )
|
||||
new_level_path = "res://Levels/Level_99.tscn"
|
||||
|
||||
[node name="SaveStation" parent="OutDoor" index="2" instance=ExtResource( 6 )]
|
||||
position = Vector2( -26, 16 )
|
||||
|
||||
[node name="InDoor" parent="." index="2" instance=ExtResource( 1 )]
|
||||
position = Vector2( 8, 144 )
|
||||
scale = Vector2( -1, 1 )
|
||||
connection = ExtResource( 3 )
|
||||
new_level_path = "res://Levels/Level_00.tscn"
|
||||
|
||||
[node name="MissilesPowerup" parent="." index="3" instance=ExtResource( 5 )]
|
||||
position = Vector2( 25, 146 )
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
extends "res://Levels/Level.gd"
|
||||
|
||||
onready var Boss = $BossEnemy
|
||||
onready var DoorLock = $DoorLock
|
||||
onready var Trigger = $Trigger
|
||||
|
||||
const PLAYER_BIT = 0
|
||||
|
||||
func set_door_lock(value):
|
||||
DoorLock.visible = value
|
||||
DoorLock.set_collision_mask_bit(PLAYER_BIT, value)
|
||||
|
||||
func _on_Trigger_triggered():
|
||||
set_door_lock(true)
|
||||
|
||||
func _on_BossEnemy_died():
|
||||
set_door_lock(false)
|
|
@ -0,0 +1,72 @@
|
|||
[gd_scene load_steps=9 format=2]
|
||||
|
||||
[ext_resource path="res://Levels/Level.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://Scenes/Enemies/BossEnemy.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Levels/Door.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://Levels/DoorConnections/01_99.tres" type="Resource" id=4]
|
||||
[ext_resource path="res://Scenes/Objects/Spikes.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://Levels/Level_99.gd" type="Script" id=6]
|
||||
[ext_resource path="res://Scenes/World/Trigger.tscn" type="PackedScene" id=7]
|
||||
[ext_resource path="res://Scenes/TileMap.tscn" type="PackedScene" id=8]
|
||||
|
||||
[node name="Level_99" instance=ExtResource( 1 )]
|
||||
script = ExtResource( 6 )
|
||||
|
||||
[node name="Door" parent="." index="0" instance=ExtResource( 3 )]
|
||||
position = Vector2( -8, 16 )
|
||||
scale = Vector2( -1, 1 )
|
||||
connection = ExtResource( 4 )
|
||||
new_level_path = "res://Levels/Level_01.tscn"
|
||||
|
||||
[node name="BossEnemy" parent="." index="1" instance=ExtResource( 2 )]
|
||||
position = Vector2( 242, -25 )
|
||||
|
||||
[node name="EnemyStats" parent="BossEnemy" index="6"]
|
||||
max_health = 5
|
||||
|
||||
[node name="TileMap" parent="." index="2"]
|
||||
tile_data = PoolIntArray( -589821, 0, 4, -589820, 0, 196609, -589819, 0, 196609, -589818, 0, 196609, -589817, 0, 196609, -589816, 0, 196609, -589815, 0, 196609, -589814, 0, 196609, -589813, 0, 196609, -589812, 0, 196609, -589811, 0, 196609, -589810, 0, 196609, -589809, 0, 196609, -589808, 0, 196609, -589807, 0, 7, -524286, 0, 4, -524285, 0, 196615, -524271, 0, 196612, -524270, 0, 7, -458750, 0, 65539, -458734, 0, 65539, -393215, 0, 4, -393214, 0, 196615, -393198, 0, 196612, -393197, 0, 7, -327679, 0, 65539, -327661, 0, 65539, -262144, 0, 4, -262143, 0, 196615, -262125, 0, 196612, -262124, 0, 7, -196608, 0, 65539, -196588, 0, 65539, -131072, 0, 65539, -131052, 0, 65539, -1, 0, 196608, -65536, 0, 196615, -65516, 0, 65539, 20, 0, 65539, 65556, 0, 65539, 196607, 0, 196608, 131072, 0, 7, 131091, 0, 4, 131092, 0, 196615, 196608, 0, 196612, 196609, 0, 7, 196612, 0, 0, 196613, 0, 1, 196614, 0, 2, 196616, 0, 0, 196617, 0, 2, 196621, 0, 3, 196623, 0, 3, 196626, 0, 4, 196627, 0, 196615, 262145, 0, 196612, 262146, 0, 196609, 262147, 0, 196609, 262148, 0, 196614, 262149, 0, 131073, 262150, 0, 196613, 262151, 0, 196609, 262152, 0, 196614, 262153, 0, 196613, 262154, 0, 196609, 262155, 0, 196609, 262156, 0, 196609, 262157, 0, 196616, 262158, 0, 196609, 262159, 0, 196616, 262160, 0, 196609, 262161, 0, 196609, 262162, 0, 196615 )
|
||||
|
||||
[node name="Spikes" type="Node2D" parent="." index="3"]
|
||||
|
||||
[node name="Spikes" parent="Spikes" index="0" instance=ExtResource( 5 )]
|
||||
position = Vector2( 32, -48 )
|
||||
rotation = 1.5708
|
||||
|
||||
[node name="Spikes2" parent="Spikes" index="1" instance=ExtResource( 5 )]
|
||||
position = Vector2( 32, -16 )
|
||||
rotation = 1.5708
|
||||
|
||||
[node name="Spikes3" parent="Spikes" index="2" instance=ExtResource( 5 )]
|
||||
position = Vector2( 32, -32 )
|
||||
rotation = 1.5708
|
||||
|
||||
[node name="Spikes4" parent="Spikes" index="3" instance=ExtResource( 5 )]
|
||||
position = Vector2( 304, -22 )
|
||||
rotation = -1.5708
|
||||
|
||||
[node name="Spikes5" parent="Spikes" index="4" instance=ExtResource( 5 )]
|
||||
position = Vector2( 304, 10 )
|
||||
rotation = -1.5708
|
||||
|
||||
[node name="Spikes6" parent="Spikes" index="5" instance=ExtResource( 5 )]
|
||||
position = Vector2( 304, -6 )
|
||||
rotation = -1.5708
|
||||
|
||||
[node name="DoorLock" parent="." index="4" instance=ExtResource( 8 )]
|
||||
visible = false
|
||||
collision_layer = 0
|
||||
tile_data = PoolIntArray( 65535, 0, 3, 42, 0, 196611, 131071, 0, 131075 )
|
||||
|
||||
[node name="Trigger" parent="." index="5" instance=ExtResource( 7 )]
|
||||
|
||||
[node name="Collision" parent="Trigger" index="0"]
|
||||
position = Vector2( 12, 16 )
|
||||
|
||||
[connection signal="died" from="BossEnemy" to="." method="_on_BossEnemy_died"]
|
||||
[connection signal="triggered" from="Trigger" to="." method="_on_Trigger_triggered"]
|
||||
|
||||
[editable path="BossEnemy"]
|
||||
[editable path="BossEnemy/Hurtbox"]
|
||||
[editable path="BossEnemy/Hitbox"]
|
||||
[editable path="Trigger"]
|
|
@ -0,0 +1,42 @@
|
|||
extends Node
|
||||
|
||||
const save_path = "user://savegame.save"
|
||||
|
||||
var is_loading = false
|
||||
|
||||
func save_game():
|
||||
print("Saving game")
|
||||
var save_game = File.new()
|
||||
save_game.open(save_path, File.WRITE)
|
||||
var persistingNodes = get_tree().get_nodes_in_group("Persists")
|
||||
for node in persistingNodes:
|
||||
var nodeData = node.save()
|
||||
save_game.store_line(to_json(nodeData))
|
||||
save_game.close()
|
||||
|
||||
func load_game():
|
||||
var save_game = File.new()
|
||||
|
||||
if not save_game.file_exists(save_path):
|
||||
return
|
||||
|
||||
var persistingNodes = get_tree().get_nodes_in_group("Persists")
|
||||
for node in persistingNodes:
|
||||
node.queue_free()
|
||||
|
||||
save_game.open(save_path, File.READ)
|
||||
while not save_game.eof_reached():
|
||||
var current_line = save_game.get_line()
|
||||
if current_line == "":
|
||||
continue
|
||||
current_line = parse_json(current_line)
|
||||
if current_line != null:
|
||||
var newNode = load(current_line["filename"]).instance()
|
||||
get_node(current_line["parent"]).add_child(newNode, true)
|
||||
newNode.position = Vector2(current_line["position_x"], current_line["position_y"])
|
||||
for property in current_line.keys():
|
||||
if property != "filename" and property != "parent" and property != "position_x" and property != "position_y":
|
||||
newNode.set(property, current_line[property])
|
||||
|
||||
save_game.close()
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
extends "res://Scenes/Enemies/Enemy.gd"
|
||||
|
||||
var MainInstances = ResourceLoader.MainInstances
|
||||
|
||||
const Bullet = preload("res://Scenes/Objects/EnemyBullet.tscn")
|
||||
|
||||
export (int) var ACCELERATION = 70
|
||||
|
||||
onready var rightWallCheck = $RightWallCheck
|
||||
onready var leftWallCheck = $LeftWallCheck
|
||||
|
||||
func _process(delta):
|
||||
chase_player(delta)
|
||||
|
||||
func chase_player(delta):
|
||||
var player = MainInstances.Player
|
||||
if player != null: # We not dead
|
||||
var direction_to_move = sign(player.global_position.x - global_position.x)
|
||||
motion.x += ACCELERATION * delta * direction_to_move
|
||||
motion.x = clamp(motion.x, -MAX_SPEED, MAX_SPEED)
|
||||
global_position.x += motion.x * delta
|
||||
rotation_degrees = lerp(rotation_degrees, (motion.x / MAX_SPEED) * 10, 0.3)
|
||||
|
||||
if rightWallCheck.is_colliding() and motion.x > 0:
|
||||
motion.x *= -0.5
|
||||
|
||||
if rightWallCheck.is_colliding() and motion.x <= 0:
|
||||
motion.x *= -0.5
|
||||
|
||||
func fire_bullet() -> void:
|
||||
var bullet = Utils.instance_scene_on_main(Bullet, global_position)
|
||||
var velocity = Vector2.DOWN * 50
|
||||
velocity = velocity.rotated(deg2rad(rand_range(-30, 30)))
|
||||
bullet.velocity = velocity
|
||||
|
||||
func _on_Timer_timeout():
|
||||
fire_bullet()
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=9 format=2]
|
||||
[gd_scene load_steps=14 format=2]
|
||||
|
||||
[ext_resource path="res://Scenes/Enemies/Enemy.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://Assets/Enemies/BossEnemyHead.png" type="Texture" id=2]
|
||||
|
@ -8,10 +8,820 @@
|
|||
[ext_resource path="res://Assets/Enemies/BossEnemyLeg1.png" type="Texture" id=6]
|
||||
[ext_resource path="res://Assets/Enemies/BossEnemyLeg2.png" type="Texture" id=7]
|
||||
[ext_resource path="res://Assets/Enemies/BossEnemyLeg3.png" type="Texture" id=8]
|
||||
[ext_resource path="res://Scenes/Enemies/BossEnemy.gd" type="Script" id=9]
|
||||
|
||||
[sub_resource type="Animation" id=1]
|
||||
resource_name = "Base"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("Sprite/RightLowerLeg/MiddleSegment:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12.1781, 2.94854 ) ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("Sprite/RightLowerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 25.0 ]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/path = NodePath("Sprite/RightLowerLeg:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 9, 0 ) ]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/path = NodePath("Sprite/RightLowerLeg:rotation_degrees")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 15.0 ]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 6, 10 ) ]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 15.0 ]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment/EndPoint:position")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 3, 5 ) ]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment/EndPoint:rotation_degrees")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -6, 10 ) ]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment:position")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -9, 3 ) ]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/path = NodePath("Sprite/LeftUpperLeg:position")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -12, -12 ) ]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/path = NodePath("Sprite/LeftUpperLeg:rotation_degrees")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/14/type = "value"
|
||||
tracks/14/path = NodePath("Sprite/RightUpeerLeg:position")
|
||||
tracks/14/interp = 1
|
||||
tracks/14/loop_wrap = true
|
||||
tracks/14/imported = false
|
||||
tracks/14/enabled = true
|
||||
tracks/14/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12, -12 ) ]
|
||||
}
|
||||
tracks/15/type = "value"
|
||||
tracks/15/path = NodePath("Sprite/RightUpeerLeg:rotation_degrees")
|
||||
tracks/15/interp = 1
|
||||
tracks/15/loop_wrap = true
|
||||
tracks/15/imported = false
|
||||
tracks/15/enabled = true
|
||||
tracks/15/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/16/type = "value"
|
||||
tracks/16/path = NodePath("Sprite:position")
|
||||
tracks/16/interp = 1
|
||||
tracks/16/loop_wrap = true
|
||||
tracks/16/imported = false
|
||||
tracks/16/enabled = true
|
||||
tracks/16/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 0, 0 ) ]
|
||||
}
|
||||
tracks/17/type = "value"
|
||||
tracks/17/path = NodePath("Sprite:rotation_degrees")
|
||||
tracks/17/interp = 1
|
||||
tracks/17/loop_wrap = true
|
||||
tracks/17/imported = false
|
||||
tracks/17/enabled = true
|
||||
tracks/17/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/18/type = "value"
|
||||
tracks/18/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/18/interp = 1
|
||||
tracks/18/loop_wrap = true
|
||||
tracks/18/imported = false
|
||||
tracks/18/enabled = true
|
||||
tracks/18/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 6, 10 ) ]
|
||||
}
|
||||
tracks/19/type = "value"
|
||||
tracks/19/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/19/interp = 1
|
||||
tracks/19/loop_wrap = true
|
||||
tracks/19/imported = false
|
||||
tracks/19/enabled = true
|
||||
tracks/19/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 15.0 ]
|
||||
}
|
||||
tracks/20/type = "value"
|
||||
tracks/20/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment:position")
|
||||
tracks/20/interp = 1
|
||||
tracks/20/loop_wrap = true
|
||||
tracks/20/imported = false
|
||||
tracks/20/enabled = true
|
||||
tracks/20/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12, 3 ) ]
|
||||
}
|
||||
tracks/21/type = "value"
|
||||
tracks/21/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/21/interp = 1
|
||||
tracks/21/loop_wrap = true
|
||||
tracks/21/imported = false
|
||||
tracks/21/enabled = true
|
||||
tracks/21/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/22/type = "value"
|
||||
tracks/22/path = NodePath("Sprite/RightWing:rotation_degrees")
|
||||
tracks/22/interp = 1
|
||||
tracks/22/loop_wrap = true
|
||||
tracks/22/imported = false
|
||||
tracks/22/enabled = true
|
||||
tracks/22/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 180.0 ]
|
||||
}
|
||||
tracks/23/type = "value"
|
||||
tracks/23/path = NodePath("Sprite/RightWing:position")
|
||||
tracks/23/interp = 1
|
||||
tracks/23/loop_wrap = true
|
||||
tracks/23/imported = false
|
||||
tracks/23/enabled = true
|
||||
tracks/23/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 50, -19 ) ]
|
||||
}
|
||||
tracks/24/type = "value"
|
||||
tracks/24/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment/EndPoint:position")
|
||||
tracks/24/interp = 1
|
||||
tracks/24/loop_wrap = true
|
||||
tracks/24/imported = false
|
||||
tracks/24/enabled = true
|
||||
tracks/24/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -3, 5 ) ]
|
||||
}
|
||||
tracks/25/type = "value"
|
||||
tracks/25/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment/EndPoint:rotation_degrees")
|
||||
tracks/25/interp = 1
|
||||
tracks/25/loop_wrap = true
|
||||
tracks/25/imported = false
|
||||
tracks/25/enabled = true
|
||||
tracks/25/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/26/type = "value"
|
||||
tracks/26/path = NodePath("Sprite/LeftWing:position")
|
||||
tracks/26/interp = 1
|
||||
tracks/26/loop_wrap = true
|
||||
tracks/26/imported = false
|
||||
tracks/26/enabled = true
|
||||
tracks/26/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -8, -19 ) ]
|
||||
}
|
||||
tracks/27/type = "value"
|
||||
tracks/27/path = NodePath("Sprite/LeftWing:rotation_degrees")
|
||||
tracks/27/interp = 1
|
||||
tracks/27/loop_wrap = true
|
||||
tracks/27/imported = false
|
||||
tracks/27/enabled = true
|
||||
tracks/27/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/28/type = "value"
|
||||
tracks/28/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment/EndPoint:position")
|
||||
tracks/28/interp = 1
|
||||
tracks/28/loop_wrap = true
|
||||
tracks/28/imported = false
|
||||
tracks/28/enabled = true
|
||||
tracks/28/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 3, 5 ) ]
|
||||
}
|
||||
tracks/29/type = "value"
|
||||
tracks/29/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment/EndPoint:rotation_degrees")
|
||||
tracks/29/interp = 1
|
||||
tracks/29/loop_wrap = true
|
||||
tracks/29/imported = false
|
||||
tracks/29/enabled = true
|
||||
tracks/29/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
tracks/30/type = "value"
|
||||
tracks/30/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/30/interp = 1
|
||||
tracks/30/loop_wrap = true
|
||||
tracks/30/imported = false
|
||||
tracks/30/enabled = true
|
||||
tracks/30/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -6, 10 ) ]
|
||||
}
|
||||
tracks/31/type = "value"
|
||||
tracks/31/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/31/interp = 1
|
||||
tracks/31/loop_wrap = true
|
||||
tracks/31/imported = false
|
||||
tracks/31/enabled = true
|
||||
tracks/31/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ -20.0 ]
|
||||
}
|
||||
tracks/32/type = "value"
|
||||
tracks/32/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment:position")
|
||||
tracks/32/interp = 1
|
||||
tracks/32/loop_wrap = true
|
||||
tracks/32/imported = false
|
||||
tracks/32/enabled = true
|
||||
tracks/32/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -12, 3 ) ]
|
||||
}
|
||||
tracks/33/type = "value"
|
||||
tracks/33/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/33/interp = 1
|
||||
tracks/33/loop_wrap = true
|
||||
tracks/33/imported = false
|
||||
tracks/33/enabled = true
|
||||
tracks/33/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ -25.0 ]
|
||||
}
|
||||
tracks/34/type = "value"
|
||||
tracks/34/path = NodePath("Sprite/LeftLowerLeg:position")
|
||||
tracks/34/interp = 1
|
||||
tracks/34/loop_wrap = true
|
||||
tracks/34/imported = false
|
||||
tracks/34/enabled = true
|
||||
tracks/34/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -9, 4.76837e-07 ) ]
|
||||
}
|
||||
tracks/35/type = "value"
|
||||
tracks/35/path = NodePath("Sprite/LeftLowerLeg:rotation_degrees")
|
||||
tracks/35/interp = 1
|
||||
tracks/35/loop_wrap = true
|
||||
tracks/35/imported = false
|
||||
tracks/35/enabled = true
|
||||
tracks/35/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ -15.0 ]
|
||||
}
|
||||
tracks/36/type = "value"
|
||||
tracks/36/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment/EndPoint:position")
|
||||
tracks/36/interp = 1
|
||||
tracks/36/loop_wrap = true
|
||||
tracks/36/imported = false
|
||||
tracks/36/enabled = true
|
||||
tracks/36/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -3, 5 ) ]
|
||||
}
|
||||
tracks/37/type = "value"
|
||||
tracks/37/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment/EndPoint:rotation_degrees")
|
||||
tracks/37/interp = 1
|
||||
tracks/37/loop_wrap = true
|
||||
tracks/37/imported = false
|
||||
tracks/37/enabled = true
|
||||
tracks/37/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=2]
|
||||
resource_name = "Fly"
|
||||
length = 0.8
|
||||
loop = true
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("Sprite/LeftWing:rotation_degrees")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/keys = {
|
||||
"times": PoolRealArray( 0, 0.200945 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 45.0, -75.0 ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("Sprite/RightWing:rotation_degrees")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0, 0.200945 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ -45.0, 75.0 ]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/path = NodePath("Sprite:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/keys = {
|
||||
"times": PoolRealArray( 0.1, 0.3 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 0, 1 ), Vector2( 0, -2 ) ]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/path = NodePath("Sprite/Head:position")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.4 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 0, -7.5 ), Vector2( 0, -9 ) ]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.799098 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 6, 10 ), Vector2( 6, 10 ) ]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.798708 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 15.0, 23.7776 ]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment:position")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.798708 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12, 3 ), Vector2( 12, 3 ) ]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/path = NodePath("Sprite/RightUpeerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.798708 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0, 48.9747 ]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/path = NodePath("Sprite/RightUpeerLeg:position")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.798708 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12, -12 ), Vector2( 12, -12 ) ]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/path = NodePath("Sprite/RightUpeerLeg:rotation_degrees")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.798708 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0, -37.2612 ]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -6, 10 ), Vector2( -6, 10 ), Vector2( -6, 10 ) ]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0, -22.0, -22.0 ]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment:position")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -9, 3 ), Vector2( -9, 3 ), Vector2( -9, 3 ) ]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/path = NodePath("Sprite/LeftUpperLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0, -45.7629, -55.584 ]
|
||||
}
|
||||
tracks/14/type = "value"
|
||||
tracks/14/path = NodePath("Sprite/LeftUpperLeg:position")
|
||||
tracks/14/interp = 1
|
||||
tracks/14/loop_wrap = true
|
||||
tracks/14/imported = false
|
||||
tracks/14/enabled = true
|
||||
tracks/14/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -12, -12 ), Vector2( -12, -12 ), Vector2( -12, -12 ) ]
|
||||
}
|
||||
tracks/15/type = "value"
|
||||
tracks/15/path = NodePath("Sprite/LeftUpperLeg:rotation_degrees")
|
||||
tracks/15/interp = 1
|
||||
tracks/15/loop_wrap = true
|
||||
tracks/15/imported = false
|
||||
tracks/15/enabled = true
|
||||
tracks/15/keys = {
|
||||
"times": PoolRealArray( 0.2, 0.8, 0.800658 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 0.0, 45.025, 52.2154 ]
|
||||
}
|
||||
tracks/16/type = "value"
|
||||
tracks/16/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/16/interp = 1
|
||||
tracks/16/loop_wrap = true
|
||||
tracks/16/imported = false
|
||||
tracks/16/enabled = true
|
||||
tracks/16/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 6, 10 ), Vector2( 6, 10 ) ]
|
||||
}
|
||||
tracks/17/type = "value"
|
||||
tracks/17/path = NodePath("Sprite/RightLowerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/17/interp = 1
|
||||
tracks/17/loop_wrap = true
|
||||
tracks/17/imported = false
|
||||
tracks/17/enabled = true
|
||||
tracks/17/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ -24.9, 26.0 ]
|
||||
}
|
||||
tracks/18/type = "value"
|
||||
tracks/18/path = NodePath("Sprite/RightLowerLeg/MiddleSegment:position")
|
||||
tracks/18/interp = 1
|
||||
tracks/18/loop_wrap = true
|
||||
tracks/18/imported = false
|
||||
tracks/18/enabled = true
|
||||
tracks/18/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 12.1781, 2.94854 ), Vector2( 12.1781, 2.94854 ) ]
|
||||
}
|
||||
tracks/19/type = "value"
|
||||
tracks/19/path = NodePath("Sprite/RightLowerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/19/interp = 1
|
||||
tracks/19/loop_wrap = true
|
||||
tracks/19/imported = false
|
||||
tracks/19/enabled = true
|
||||
tracks/19/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ -7.88142, 70.0456 ]
|
||||
}
|
||||
tracks/20/type = "value"
|
||||
tracks/20/path = NodePath("Sprite/RightLowerLeg:position")
|
||||
tracks/20/interp = 1
|
||||
tracks/20/loop_wrap = true
|
||||
tracks/20/imported = false
|
||||
tracks/20/enabled = true
|
||||
tracks/20/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 9, 0 ), Vector2( 9, 0 ) ]
|
||||
}
|
||||
tracks/21/type = "value"
|
||||
tracks/21/path = NodePath("Sprite/RightLowerLeg:rotation_degrees")
|
||||
tracks/21/interp = 1
|
||||
tracks/21/loop_wrap = true
|
||||
tracks/21/imported = false
|
||||
tracks/21/enabled = true
|
||||
tracks/21/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.8 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 48.7326, -4.4743 ]
|
||||
}
|
||||
tracks/22/type = "value"
|
||||
tracks/22/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment:position")
|
||||
tracks/22/interp = 1
|
||||
tracks/22/loop_wrap = true
|
||||
tracks/22/imported = false
|
||||
tracks/22/enabled = true
|
||||
tracks/22/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -6, 10 ), Vector2( -6, 10 ) ]
|
||||
}
|
||||
tracks/23/type = "value"
|
||||
tracks/23/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment/EndSegment:rotation_degrees")
|
||||
tracks/23/interp = 1
|
||||
tracks/23/loop_wrap = true
|
||||
tracks/23/imported = false
|
||||
tracks/23/enabled = true
|
||||
tracks/23/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 28.7639, 8.1 ]
|
||||
}
|
||||
tracks/24/type = "value"
|
||||
tracks/24/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment:position")
|
||||
tracks/24/interp = 1
|
||||
tracks/24/loop_wrap = true
|
||||
tracks/24/imported = false
|
||||
tracks/24/enabled = true
|
||||
tracks/24/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -12, 3 ), Vector2( -12, 3 ) ]
|
||||
}
|
||||
tracks/25/type = "value"
|
||||
tracks/25/path = NodePath("Sprite/LeftLowerLeg/MiddleSegment:rotation_degrees")
|
||||
tracks/25/interp = 1
|
||||
tracks/25/loop_wrap = true
|
||||
tracks/25/imported = false
|
||||
tracks/25/enabled = true
|
||||
tracks/25/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ 5.39105, -77.5026 ]
|
||||
}
|
||||
tracks/26/type = "value"
|
||||
tracks/26/path = NodePath("Sprite/LeftLowerLeg:position")
|
||||
tracks/26/interp = 1
|
||||
tracks/26/loop_wrap = true
|
||||
tracks/26/imported = false
|
||||
tracks/26/enabled = true
|
||||
tracks/26/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( -9, 4.76837e-07 ), Vector2( -9, 4.76837e-07 ) ]
|
||||
}
|
||||
tracks/27/type = "value"
|
||||
tracks/27/path = NodePath("Sprite/LeftLowerLeg:rotation_degrees")
|
||||
tracks/27/interp = 1
|
||||
tracks/27/loop_wrap = true
|
||||
tracks/27/imported = false
|
||||
tracks/27/enabled = true
|
||||
tracks/27/keys = {
|
||||
"times": PoolRealArray( 0.200945, 0.799878 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ -49.701, 6.15604 ]
|
||||
}
|
||||
|
||||
[sub_resource type="CircleShape2D" id=3]
|
||||
radius = 18.0
|
||||
|
||||
[sub_resource type="RayShape2D" id=4]
|
||||
length = 16.0
|
||||
|
||||
[node name="BossEnemy" instance=ExtResource( 1 )]
|
||||
script = ExtResource( 9 )
|
||||
MAX_SPEED = 50
|
||||
|
||||
[node name="OnionLayer" type="Sprite" parent="." index="0"]
|
||||
visible = false
|
||||
modulate = Color( 1, 1, 1, 0.113725 )
|
||||
position = Vector2( 0, -11 )
|
||||
texture = ExtResource( 5 )
|
||||
|
@ -20,25 +830,28 @@ __meta__ = {
|
|||
}
|
||||
|
||||
[node name="Sprite" parent="." index="1"]
|
||||
position = Vector2( 0, 0.999149 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
[node name="LeftWing" type="Sprite" parent="Sprite" index="0"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( -8, -19 )
|
||||
rotation = -0.179467
|
||||
texture = ExtResource( 4 )
|
||||
offset = Vector2( -21, -5 )
|
||||
|
||||
[node name="RightWing" type="Sprite" parent="Sprite" index="1"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( 50, -19 )
|
||||
rotation = 3.14159
|
||||
scale = Vector2( 1, -1 )
|
||||
position = Vector2( 10, -20 )
|
||||
rotation = 0.179467
|
||||
texture = ExtResource( 4 )
|
||||
offset = Vector2( 21, -5 )
|
||||
flip_h = true
|
||||
|
||||
[node name="LeftUpperLeg" type="Sprite" parent="Sprite" index="2"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( -12, -12 )
|
||||
rotation = 0.415911
|
||||
texture = ExtResource( 6 )
|
||||
offset = Vector2( -4, 1 )
|
||||
__meta__ = {
|
||||
|
@ -47,6 +860,7 @@ __meta__ = {
|
|||
|
||||
[node name="MiddleSegment" type="Sprite" parent="Sprite/LeftUpperLeg" index="0"]
|
||||
position = Vector2( -9, 3 )
|
||||
rotation = -0.422727
|
||||
texture = ExtResource( 7 )
|
||||
offset = Vector2( -2, 4 )
|
||||
__meta__ = {
|
||||
|
@ -55,6 +869,7 @@ __meta__ = {
|
|||
|
||||
[node name="EndSegment" type="Sprite" parent="Sprite/LeftUpperLeg/MiddleSegment" index="0"]
|
||||
position = Vector2( -6, 10 )
|
||||
rotation = -0.203221
|
||||
texture = ExtResource( 8 )
|
||||
offset = Vector2( 1, 2 )
|
||||
__meta__ = {
|
||||
|
@ -70,7 +885,7 @@ __meta__ = {
|
|||
[node name="LeftLowerLeg" type="Sprite" parent="Sprite" index="3"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( -9, 4.76837e-07 )
|
||||
rotation = -0.261799
|
||||
rotation = -0.349632
|
||||
texture = ExtResource( 6 )
|
||||
offset = Vector2( -4, 1 )
|
||||
__meta__ = {
|
||||
|
@ -79,7 +894,7 @@ __meta__ = {
|
|||
|
||||
[node name="MiddleSegment" type="Sprite" parent="Sprite/LeftLowerLeg" index="0"]
|
||||
position = Vector2( -12, 3 )
|
||||
rotation = -0.436332
|
||||
rotation = -0.67436
|
||||
texture = ExtResource( 7 )
|
||||
offset = Vector2( -2, 4 )
|
||||
__meta__ = {
|
||||
|
@ -88,7 +903,7 @@ __meta__ = {
|
|||
|
||||
[node name="EndSegment" type="Sprite" parent="Sprite/LeftLowerLeg/MiddleSegment" index="0"]
|
||||
position = Vector2( -6, 10 )
|
||||
rotation = -0.349066
|
||||
rotation = 0.310464
|
||||
texture = ExtResource( 8 )
|
||||
offset = Vector2( 1, 2 )
|
||||
__meta__ = {
|
||||
|
@ -104,6 +919,7 @@ __meta__ = {
|
|||
[node name="RightUpeerLeg" type="Sprite" parent="Sprite" index="4"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( 12, -12 )
|
||||
rotation = -0.341984
|
||||
texture = ExtResource( 6 )
|
||||
offset = Vector2( 5, 1 )
|
||||
flip_h = true
|
||||
|
@ -113,6 +929,7 @@ __meta__ = {
|
|||
|
||||
[node name="MiddleSegment" type="Sprite" parent="Sprite/RightUpeerLeg" index="0"]
|
||||
position = Vector2( 12, 3 )
|
||||
rotation = 0.449491
|
||||
texture = ExtResource( 7 )
|
||||
offset = Vector2( 3, 4 )
|
||||
flip_h = true
|
||||
|
@ -122,7 +939,7 @@ __meta__ = {
|
|||
|
||||
[node name="EndSegment" type="Sprite" parent="Sprite/RightUpeerLeg/MiddleSegment" index="0"]
|
||||
position = Vector2( 6, 10 )
|
||||
rotation = 0.261799
|
||||
rotation = 0.342361
|
||||
texture = ExtResource( 8 )
|
||||
offset = Vector2( -1, 2 )
|
||||
flip_h = true
|
||||
|
@ -139,7 +956,7 @@ __meta__ = {
|
|||
[node name="RightLowerLeg" type="Sprite" parent="Sprite" index="5"]
|
||||
show_behind_parent = true
|
||||
position = Vector2( 9, 0 )
|
||||
rotation = 0.261799
|
||||
rotation = 0.356999
|
||||
texture = ExtResource( 6 )
|
||||
offset = Vector2( 5, 1 )
|
||||
flip_h = true
|
||||
|
@ -149,7 +966,7 @@ __meta__ = {
|
|||
|
||||
[node name="MiddleSegment" type="Sprite" parent="Sprite/RightLowerLeg" index="0"]
|
||||
position = Vector2( 12.1781, 2.94854 )
|
||||
rotation = 0.436332
|
||||
rotation = 0.585292
|
||||
texture = ExtResource( 7 )
|
||||
offset = Vector2( 3, 4 )
|
||||
flip_h = true
|
||||
|
@ -159,7 +976,7 @@ __meta__ = {
|
|||
|
||||
[node name="EndSegment" type="Sprite" parent="Sprite/RightLowerLeg/MiddleSegment" index="0"]
|
||||
position = Vector2( 6, 10 )
|
||||
rotation = 0.261799
|
||||
rotation = 0.0375597
|
||||
texture = ExtResource( 8 )
|
||||
offset = Vector2( -1, 2 )
|
||||
flip_h = true
|
||||
|
@ -174,5 +991,39 @@ __meta__ = {
|
|||
}
|
||||
|
||||
[node name="Head" type="Sprite" parent="Sprite" index="6"]
|
||||
position = Vector2( 0, -7 )
|
||||
position = Vector2( 0, -7.76463 )
|
||||
texture = ExtResource( 2 )
|
||||
|
||||
[node name="AnimationPlayer" parent="." index="3"]
|
||||
autoplay = "Fly"
|
||||
anims/Base = SubResource( 1 )
|
||||
anims/Fly = SubResource( 2 )
|
||||
|
||||
[node name="Collider" parent="Hurtbox" index="0"]
|
||||
position = Vector2( 0, -7 )
|
||||
shape = SubResource( 3 )
|
||||
|
||||
[node name="Collider" parent="Hitbox" index="0"]
|
||||
shape = SubResource( 4 )
|
||||
|
||||
[node name="EnemyStats" parent="." index="6"]
|
||||
max_health = 100
|
||||
|
||||
[node name="RightWallCheck" type="RayCast2D" parent="." index="7"]
|
||||
enabled = true
|
||||
cast_to = Vector2( 16, 0 )
|
||||
collision_mask = 2
|
||||
|
||||
[node name="LeftWallCheck" type="RayCast2D" parent="." index="8"]
|
||||
enabled = true
|
||||
cast_to = Vector2( -16, 0 )
|
||||
collision_mask = 2
|
||||
|
||||
[node name="Timer" type="Timer" parent="." index="9"]
|
||||
wait_time = 0.3
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
||||
|
||||
[editable path="Hurtbox"]
|
||||
[editable path="Hitbox"]
|
||||
|
|
|
@ -6,6 +6,8 @@ export (int) var MAX_SPEED = 15
|
|||
|
||||
onready var stats = $EnemyStats
|
||||
|
||||
signal died
|
||||
|
||||
var motion = Vector2.ZERO
|
||||
|
||||
func _on_Hurtbox_hit(damage):
|
||||
|
@ -14,3 +16,4 @@ func _on_Hurtbox_hit(damage):
|
|||
func _on_EnemyStats_enemy_died():
|
||||
Utils.instance_scene_on_main(EnemyDeathEffect, global_position)
|
||||
queue_free()
|
||||
emit_signal("died")
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
extends StaticBody2D
|
||||
|
||||
onready var animation = $Animation
|
||||
|
||||
func _on_SaveArea_body_entered(_body):
|
||||
print(_body)
|
||||
animation.play("Save")
|
||||
SaverLoader.save_game()
|
|
@ -0,0 +1,65 @@
|
|||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://Assets/World/SaveStation.png" type="Texture" id=1]
|
||||
[ext_resource path="res://Scenes/Objects/SaveStation.gd" type="Script" id=2]
|
||||
[ext_resource path="res://Assets/UI/WhiteSquare.png" type="Texture" id=3]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 8, 10 )
|
||||
|
||||
[sub_resource type="Animation" id=2]
|
||||
resource_name = "Save"
|
||||
length = 0.5
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("WhiteSpaceSprite:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = false
|
||||
tracks/0/keys = {
|
||||
"times": PoolRealArray( 0, 0.25, 0.5 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 1e-05, 1.25 ), Vector2( 1, 1.25 ), Vector2( 1e-05, 1.25 ) ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("WhiteSpaceSprite:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0, 0.5 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 0, -25 ), Vector2( 0, -3 ) ]
|
||||
}
|
||||
|
||||
[node name="SaveStation" type="StaticBody2D"]
|
||||
collision_layer = 0
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="WhiteSpaceSprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -25 )
|
||||
scale = Vector2( 1, 0.0625 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -24 )
|
||||
texture = ExtResource( 1 )
|
||||
|
||||
[node name="Collider" type="CollisionPolygon2D" parent="."]
|
||||
polygon = PoolVector2Array( -13, 0, -9, -4, 9, -4, 13, 0 )
|
||||
|
||||
[node name="SaveArea" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
|
||||
[node name="Collider" type="CollisionShape2D" parent="SaveArea"]
|
||||
position = Vector2( 0, -14 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Animation" type="AnimationPlayer" parent="."]
|
||||
anims/Save = SubResource( 2 )
|
||||
|
||||
[connection signal="body_entered" from="SaveArea" to="." method="_on_SaveArea_body_entered"]
|
|
@ -0,0 +1,23 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://Assets/Enemies/Spikes.png" type="Texture" id=1]
|
||||
[ext_resource path="res://Scenes/Objects/Hitbox.tscn" type="PackedScene" id=2]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 8, 8 )
|
||||
|
||||
[node name="Spikes" type="Node2D"]
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
z_index = 20
|
||||
texture = ExtResource( 1 )
|
||||
centered = false
|
||||
|
||||
[node name="Hitbox" parent="." instance=ExtResource( 2 )]
|
||||
collision_mask = 4
|
||||
|
||||
[node name="Collider" parent="Hitbox" index="0"]
|
||||
position = Vector2( 8, 8 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[editable path="Hitbox"]
|
|
@ -2,4 +2,5 @@ extends Powerup
|
|||
|
||||
func _pickup():
|
||||
PlayerStats.missiles_unlocked = true
|
||||
PlayerStats.missiles += 1
|
||||
queue_free()
|
||||
|
|
|
@ -40,6 +40,7 @@ onready var muzzle = $Sprite/PlayerGun/Sprite/Muzzle
|
|||
onready var fireBulletTimer = $FireBulletTimer
|
||||
onready var blinkAnimator = $BlinkAnimator
|
||||
onready var powerupDetector = $PowerupDetector
|
||||
onready var cameraFollow = $CameraFollow
|
||||
|
||||
signal hit_door(door)
|
||||
|
||||
|
@ -50,9 +51,23 @@ func set_invincible(value):
|
|||
func _ready():
|
||||
PlayerStats.connect("player_died", self, "_on_died")
|
||||
MainInstances.Player = self
|
||||
call_deferred("assign_world_camera")
|
||||
|
||||
func assign_world_camera():
|
||||
cameraFollow.remote_path = MainInstances.WorldCamera.get_path()
|
||||
|
||||
func _exit_tree():
|
||||
MainInstances.Player = null
|
||||
# We need to check if the player in maininstances is this player instance,
|
||||
# it could be a loaded player and this call is made after the new player
|
||||
# is instanced and set in the MainInstances, so the new player is there and
|
||||
# we set it to null, breaking the game.
|
||||
if MainInstances.Player == self:
|
||||
MainInstances.Player = null
|
||||
|
||||
# This is another solution to the above problem
|
||||
# func queue_free():
|
||||
# MainInstances.Player = null
|
||||
# .queue_free()
|
||||
|
||||
func _physics_process(delta):
|
||||
just_jumped = false
|
||||
|
@ -233,6 +248,15 @@ func wall_detach(delta, wall_axis):
|
|||
if wall_axis == 0 or is_on_floor():
|
||||
state = MOVE
|
||||
|
||||
func save():
|
||||
var data = {
|
||||
"filename": get_filename(),
|
||||
"parent": get_parent().get_path(),
|
||||
"position_x": position.x,
|
||||
"position_y": position.y
|
||||
}
|
||||
return data
|
||||
|
||||
func _on_Hurtbox_hit(damage):
|
||||
if not invincible:
|
||||
PlayerStats.health -= damage
|
||||
|
|
|
@ -122,12 +122,15 @@ tracks/1/keys = {
|
|||
} ]
|
||||
}
|
||||
|
||||
[node name="Player" type="KinematicBody2D"]
|
||||
[node name="Player" type="KinematicBody2D" groups=[
|
||||
"Persists",
|
||||
]]
|
||||
collision_mask = 2
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -12 )
|
||||
z_index = 10
|
||||
texture = ExtResource( 1 )
|
||||
hframes = 12
|
||||
frame = 11
|
||||
|
|
|
@ -5,7 +5,7 @@ var max_health = 4
|
|||
var health = max_health setget set_health
|
||||
var missiles_unlocked = false setget set_missiles_unlocked
|
||||
var max_missiles = 3
|
||||
var missiles = max_missiles setget set_missiles
|
||||
var missiles = 0 setget set_missiles
|
||||
|
||||
signal player_health_changed(value)
|
||||
signal player_missiles_unlocked(value)
|
||||
|
|
|
@ -41,6 +41,7 @@ margin_right = 56.0
|
|||
margin_bottom = 56.0
|
||||
rect_min_size = Vector2( 56, 16 )
|
||||
text = "Quit"
|
||||
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/StartButton" to="." method="_on_StartButton_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/LoadButton" to="." method="_on_LoadButton_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"]
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
extends Camera2D
|
||||
|
||||
var MainInstances = ResourceLoader.MainInstances
|
||||
|
||||
var shake = 0
|
||||
|
||||
onready var timer = $Timer
|
||||
|
||||
func _ready():
|
||||
Events.connect("add_screenshake", self, "_on_Events_add_screenshake")
|
||||
MainInstances.WorldCamera = self
|
||||
|
||||
func _process(delta):
|
||||
func _exit_tree():
|
||||
MainInstances.WorldCamera = null
|
||||
|
||||
func _process(_delta):
|
||||
offset_h = rand_range(-shake, shake)
|
||||
offset_v = rand_range(-shake, shake)
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
extends Area2D
|
||||
|
||||
signal triggered
|
||||
|
||||
var enabled = true
|
||||
|
||||
|
||||
func _on_Trigger_body_entered(_body):
|
||||
if enabled:
|
||||
emit_signal("triggered")
|
||||
enabled = false
|
|
@ -0,0 +1,15 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://Scenes/World/Trigger.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 8, 16 )
|
||||
|
||||
[node name="Trigger" type="Area2D"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Collision" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( 23, 16 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_Trigger_body_entered"]
|
|
@ -6,6 +6,11 @@ onready var currentLevel = $Level_00
|
|||
|
||||
func _ready():
|
||||
VisualServer.set_default_clear_color(Color.black)
|
||||
|
||||
if SaverLoader.is_loading:
|
||||
SaverLoader.load_game()
|
||||
SaverLoader.is_loading = false
|
||||
|
||||
MainInstances.Player.connect("hit_door", self, "_on_Player_hit_door")
|
||||
|
||||
func _on_Player_hit_door(door):
|
||||
|
|
|
@ -9,18 +9,19 @@
|
|||
[node name="World" type="Node"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="Camera" parent="." instance=ExtResource( 6 )]
|
||||
position = Vector2( 9, 88 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 2 )]
|
||||
position = Vector2( 9, 96 )
|
||||
|
||||
[node name="CameraFollow" parent="Player" index="5"]
|
||||
remote_path = NodePath("../../Camera")
|
||||
|
||||
[node name="Camera" parent="." instance=ExtResource( 6 )]
|
||||
position = Vector2( 9, 88 )
|
||||
|
||||
[node name="UI" parent="." instance=ExtResource( 7 )]
|
||||
|
||||
[node name="Level_00" parent="." instance=ExtResource( 1 )]
|
||||
position = Vector2( -132, -32 )
|
||||
|
||||
[editable path="Player"]
|
||||
[editable path="Player/Hurtbox"]
|
||||
|
|
|
@ -8,8 +8,8 @@ func _on_StartButton_pressed():
|
|||
get_tree().change_scene("res://Scenes/World/World.tscn")
|
||||
|
||||
func _on_LoadButton_pressed():
|
||||
# TODO: Savegames
|
||||
pass
|
||||
SaverLoader.is_loading = true
|
||||
get_tree().change_scene("res://Scenes/World/World.tscn")
|
||||
|
||||
func _on_QuitButton_pressed():
|
||||
get_tree().quit()
|
||||
|
|
|
@ -33,7 +33,7 @@ _global_script_class_icons={
|
|||
[application]
|
||||
|
||||
config/name="Metroidvania"
|
||||
run/main_scene="res://Scenes/World/World.tscn"
|
||||
run/main_scene="res://Scenes/UI/StarMenu.tscn"
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[autoload]
|
||||
|
@ -41,6 +41,7 @@ config/icon="res://icon.png"
|
|||
Utils="*res://Utils.gd"
|
||||
ResourceLoader="*res://ResourceLoader.gd"
|
||||
Events="*res://Events.gd"
|
||||
SaverLoader="*res://SaverLoader.gd"
|
||||
|
||||
[display]
|
||||
|
||||
|
|
Loading…
Reference in New Issue