Browse Source

Update projects to Godot 3.5 (#827)

M o t H 2 years ago
parent
commit
9e68af38d9
100 changed files with 258 additions and 106 deletions
  1. 1 0
      2d/dodge_the_creeps/HUD.gd
  2. 2 0
      2d/dodge_the_creeps/Main.gd
  3. 0 3
      2d/dodge_the_creeps/Main.tscn
  4. 1 0
      2d/dodge_the_creeps/Mob.gd
  5. 1 0
      2d/dodge_the_creeps/Player.gd
  6. 3 1
      2d/dodge_the_creeps/art/gameover.wav.import
  7. 0 3
      2d/finite_state_machine/debug/ControlsPanel.tscn
  8. 1 0
      2d/finite_state_machine/debug/states_stack_displayer.gd
  9. 1 0
      2d/finite_state_machine/player/bullet/bullet.gd
  10. 1 0
      2d/finite_state_machine/player/bullet/bullet_spawner.gd
  11. 1 0
      2d/finite_state_machine/player/player_controller.gd
  12. 1 0
      2d/finite_state_machine/player/player_state_machine.gd
  13. 1 0
      2d/finite_state_machine/player/states/combat/attack.gd
  14. 1 0
      2d/finite_state_machine/player/states/combat/stagger.gd
  15. 1 0
      2d/finite_state_machine/player/states/debug/state_name_displayer.gd
  16. 1 0
      2d/finite_state_machine/player/states/die.gd
  17. 1 0
      2d/finite_state_machine/player/states/motion/in_air/jump.gd
  18. 1 0
      2d/finite_state_machine/player/states/motion/motion.gd
  19. 1 0
      2d/finite_state_machine/player/states/motion/on_ground/idle.gd
  20. 4 2
      2d/finite_state_machine/player/states/motion/on_ground/move.gd
  21. 1 0
      2d/finite_state_machine/player/states/motion/on_ground/on_ground.gd
  22. 1 0
      2d/finite_state_machine/player/weapon/sword.gd
  23. 1 0
      2d/finite_state_machine/player/weapon/weapon_pivot.gd
  24. 1 0
      2d/finite_state_machine/state_machine/state.gd
  25. 1 0
      2d/finite_state_machine/state_machine/state_machine.gd
  26. 1 0
      2d/gd_paint/paint_control.gd
  27. 1 2
      2d/gd_paint/paint_root.tscn
  28. 1 0
      2d/gd_paint/tools_panel.gd
  29. 1 0
      2d/hdr/beach_cave.gd
  30. 1 0
      2d/hexagonal_map/troll.gd
  31. 1 0
      2d/instancing/ball_factory.gd
  32. 1 0
      2d/isometric/troll.gd
  33. 1 0
      2d/kinematic_character/level/princess.gd
  34. 1 0
      2d/kinematic_character/player/player.gd
  35. 1 1
      2d/navigation/level.tscn
  36. 33 3
      2d/navigation/navigation.gd
  37. 1 0
      2d/navigation_astar/character.gd
  38. 1 0
      2d/navigation_astar/pathfind_astar.gd
  39. 3 1
      2d/physics_platformer/audio/sound_coin.wav.import
  40. 3 1
      2d/physics_platformer/audio/sound_explode.wav.import
  41. 3 1
      2d/physics_platformer/audio/sound_hit.wav.import
  42. 3 1
      2d/physics_platformer/audio/sound_jump.wav.import
  43. 3 1
      2d/physics_platformer/audio/sound_shoot.wav.import
  44. 1 0
      2d/physics_platformer/coin/coin.gd
  45. 1 0
      2d/physics_platformer/enemy/enemy.gd
  46. 1 0
      2d/physics_platformer/platform/moving_platform.gd
  47. 1 0
      2d/physics_platformer/player/bullet.gd
  48. 1 0
      2d/physics_platformer/player/player.gd
  49. 1 0
      2d/physics_tests/tests/functional/test_character_pixels.gd
  50. 0 3
      2d/physics_tests/tests/test_options.tscn
  51. 5 5
      2d/platformer/assets/theme/user_interface.tres
  52. 1 0
      2d/platformer/src/Actors/Actor.gd
  53. 2 0
      2d/platformer/src/Actors/Enemy.gd
  54. 46 29
      2d/platformer/src/Actors/Enemy.tscn
  55. 2 0
      2d/platformer/src/Level/Level.gd
  56. 2 0
      2d/platformer/src/Level/Music.gd
  57. 1 0
      2d/platformer/src/Objects/Coin.gd
  58. 1 0
      2d/platformer/src/UserInterface/CoinsCounter.gd
  59. 0 3
      2d/platformer/src/UserInterface/CoinsCounter.tscn
  60. 2 0
      2d/pong/logic/ball.gd
  61. 2 0
      2d/pong/logic/ceiling_floor.gd
  62. 2 0
      2d/pong/logic/paddle.gd
  63. 1 0
      2d/pong/logic/wall.gd
  64. 4 2
      2d/role_playing_game/Game.gd
  65. 2 0
      2d/role_playing_game/combat/Combat.gd
  66. 3 1
      2d/role_playing_game/combat/TurnQueue.gd
  67. 5 1
      2d/role_playing_game/combat/combatants/Combatant.gd
  68. 2 0
      2d/role_playing_game/combat/combatants/Health.gd
  69. 1 0
      2d/role_playing_game/combat/combatants/Opponent.gd
  70. 0 3
      2d/role_playing_game/combat/interface/Info.tscn
  71. 2 0
      2d/role_playing_game/combat/interface/UI.gd
  72. 4 2
      2d/role_playing_game/dialogue/dialogue_player/DialoguePlayer.gd
  73. 2 0
      2d/role_playing_game/dialogue/interface/Interface.gd
  74. 0 3
      2d/role_playing_game/dialogue/interface/Interface.tscn
  75. 2 0
      2d/role_playing_game/grid_movement/grid/Grid.gd
  76. 3 1
      2d/role_playing_game/grid_movement/pawns/Actor.gd
  77. 2 0
      2d/role_playing_game/grid_movement/pawns/Opponent.gd
  78. 2 0
      2d/role_playing_game/grid_movement/pawns/Pawn.gd
  79. 3 1
      2d/role_playing_game/grid_movement/pawns/Walker.gd
  80. 1 0
      2d/screen_space_shaders/screen_shaders.gd
  81. 2 0
      2d/skeleton/level/level.gd
  82. 1 0
      2d/skeleton/player/player.gd
  83. 8 8
      2d/skeleton/player/player.tscn
  84. 2 0
      2d/tween/main.gd
  85. 10 10
      2d/tween/main.tscn
  86. 1 0
      3d/global_illumination/camera.gd
  87. 10 8
      3d/global_illumination/test.gd
  88. 6 4
      3d/global_illumination/test.tscn
  89. 1 0
      3d/ik/addons/sade/ik_look_at.gd
  90. 1 0
      3d/ik/addons/sade/plugin_main.gd
  91. 1 0
      3d/ik/button_change_scene.gd
  92. 2 0
      3d/ik/fabrik_ik.tscn
  93. 1 0
      3d/ik/fps/example_player.gd
  94. 4 1
      3d/ik/fps/fps_example.tscn
  95. 1 0
      3d/ik/fps/simple_bullet.gd
  96. 1 0
      3d/ik/fps/weapon_pistol.dae.import
  97. 3 0
      3d/ik/look_at_ik.tscn
  98. 1 0
      3d/ik/model/godot_battle_bot.dae.import
  99. 1 1
      3d/ik/project.godot
  100. 1 0
      3d/ik/skeleton_ik.tscn

+ 1 - 0
2d/dodge_the_creeps/HUD.gd

@@ -2,6 +2,7 @@ extends CanvasLayer
 
 
 signal start_game
 signal start_game
 
 
+
 func show_message(text):
 func show_message(text):
 	$MessageLabel.text = text
 	$MessageLabel.text = text
 	$MessageLabel.show()
 	$MessageLabel.show()

+ 2 - 0
2d/dodge_the_creeps/Main.gd

@@ -3,6 +3,7 @@ extends Node
 export(PackedScene) var mob_scene
 export(PackedScene) var mob_scene
 var score
 var score
 
 
+
 func _ready():
 func _ready():
 	randomize()
 	randomize()
 
 
@@ -50,6 +51,7 @@ func _on_MobTimer_timeout():
 	# Spawn the mob by adding it to the Main scene.
 	# Spawn the mob by adding it to the Main scene.
 	add_child(mob)
 	add_child(mob)
 
 
+
 func _on_ScoreTimer_timeout():
 func _on_ScoreTimer_timeout():
 	score += 1
 	score += 1
 	$HUD.update_score(score)
 	$HUD.update_score(score)

+ 0 - 3
2d/dodge_the_creeps/Main.tscn

@@ -20,9 +20,6 @@ mob_scene = ExtResource( 2 )
 anchor_right = 1.0
 anchor_right = 1.0
 anchor_bottom = 1.0
 anchor_bottom = 1.0
 color = Color( 0.219608, 0.372549, 0.380392, 1 )
 color = Color( 0.219608, 0.372549, 0.380392, 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Player" parent="." instance=ExtResource( 3 )]
 [node name="Player" parent="." instance=ExtResource( 3 )]
 
 

+ 1 - 0
2d/dodge_the_creeps/Mob.gd

@@ -1,5 +1,6 @@
 extends RigidBody2D
 extends RigidBody2D
 
 
+
 func _ready():
 func _ready():
 	$AnimatedSprite.playing = true
 	$AnimatedSprite.playing = true
 	var mob_types = $AnimatedSprite.frames.get_animation_names()
 	var mob_types = $AnimatedSprite.frames.get_animation_names()

+ 1 - 0
2d/dodge_the_creeps/Player.gd

@@ -5,6 +5,7 @@ signal hit
 export var speed = 400 # How fast the player will move (pixels/sec).
 export var speed = 400 # How fast the player will move (pixels/sec).
 var screen_size # Size of the game window.
 var screen_size # Size of the game window.
 
 
+
 func _ready():
 func _ready():
 	screen_size = get_viewport_rect().size
 	screen_size = get_viewport_rect().size
 	hide()
 	hide()

+ 3 - 1
2d/dodge_the_creeps/art/gameover.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 0 - 3
2d/finite_state_machine/debug/ControlsPanel.tscn

@@ -7,9 +7,6 @@ anchor_left = 1.0
 anchor_right = 1.0
 anchor_right = 1.0
 margin_left = -220.0
 margin_left = -220.0
 margin_bottom = 170.0
 margin_bottom = 170.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Keys" type="Label" parent="."]
 [node name="Keys" type="Label" parent="."]
 anchor_right = 1.0
 anchor_right = 1.0

+ 1 - 0
2d/finite_state_machine/debug/states_stack_displayer.gd

@@ -2,6 +2,7 @@ extends Panel
 
 
 onready var fsm_node = get_node("../../Player/StateMachine")
 onready var fsm_node = get_node("../../Player/StateMachine")
 
 
+
 func _process(_delta):
 func _process(_delta):
 	var states_names = ""
 	var states_names = ""
 	var numbers = ""
 	var numbers = ""

+ 1 - 0
2d/finite_state_machine/player/bullet/bullet.gd

@@ -5,6 +5,7 @@ export(float) var speed = 1000.0
 
 
 onready var root = get_tree().root
 onready var root = get_tree().root
 
 
+
 func _ready():
 func _ready():
 	set_as_toplevel(true)
 	set_as_toplevel(true)
 
 

+ 1 - 0
2d/finite_state_machine/player/bullet/bullet_spawner.gd

@@ -2,6 +2,7 @@ extends Node2D
 
 
 var bullet = preload("Bullet.tscn")
 var bullet = preload("Bullet.tscn")
 
 
+
 func _unhandled_input(event):
 func _unhandled_input(event):
 	if event.is_action_pressed("fire"):
 	if event.is_action_pressed("fire"):
 		fire()
 		fire()

+ 1 - 0
2d/finite_state_machine/player/player_controller.gd

@@ -7,6 +7,7 @@ signal direction_changed(new_direction)
 
 
 var look_direction = Vector2.RIGHT setget set_look_direction
 var look_direction = Vector2.RIGHT setget set_look_direction
 
 
+
 func take_damage(attacker, amount, effect = null):
 func take_damage(attacker, amount, effect = null):
 	if is_a_parent_of(attacker):
 	if is_a_parent_of(attacker):
 		return
 		return

+ 1 - 0
2d/finite_state_machine/player/player_state_machine.gd

@@ -6,6 +6,7 @@ onready var jump = $Jump
 onready var stagger = $Stagger
 onready var stagger = $Stagger
 onready var attack = $Attack
 onready var attack = $Attack
 
 
+
 func _ready():
 func _ready():
 	states_map = {
 	states_map = {
 		"idle": idle,
 		"idle": idle,

+ 1 - 0
2d/finite_state_machine/player/states/combat/attack.gd

@@ -1,5 +1,6 @@
 extends "res://state_machine/state.gd"
 extends "res://state_machine/state.gd"
 
 
+
 func enter():
 func enter():
 	owner.get_node("AnimationPlayer").play("idle")
 	owner.get_node("AnimationPlayer").play("idle")
 
 

+ 1 - 0
2d/finite_state_machine/player/states/combat/stagger.gd

@@ -3,6 +3,7 @@ extends "res://state_machine/state.gd"
 # The animation only affects the Body Sprite's modulate property so it
 # The animation only affects the Body Sprite's modulate property so it
 # could stack with other animations if we had two AnimationPlayer nodes.
 # could stack with other animations if we had two AnimationPlayer nodes.
 
 
+
 func enter():
 func enter():
 	owner.get_node("AnimationPlayer").play("stagger")
 	owner.get_node("AnimationPlayer").play("stagger")
 
 

+ 1 - 0
2d/finite_state_machine/player/states/debug/state_name_displayer.gd

@@ -2,6 +2,7 @@ extends Label
 
 
 var start_position = Vector2()
 var start_position = Vector2()
 
 
+
 func _ready():
 func _ready():
 	start_position = rect_position
 	start_position = rect_position
 
 

+ 1 - 0
2d/finite_state_machine/player/states/die.gd

@@ -1,5 +1,6 @@
 extends "res://state_machine/state.gd"
 extends "res://state_machine/state.gd"
 
 
+
 # Initialize the state. E.g. change the animation.
 # Initialize the state. E.g. change the animation.
 func enter():
 func enter():
 	owner.set_dead(true)
 	owner.set_dead(true)

+ 1 - 0
2d/finite_state_machine/player/states/motion/in_air/jump.gd

@@ -17,6 +17,7 @@ var horizontal_velocity = Vector2()
 var vertical_speed = 0.0
 var vertical_speed = 0.0
 var height = 0.0
 var height = 0.0
 
 
+
 func initialize(speed, velocity):
 func initialize(speed, velocity):
 	horizontal_speed = speed
 	horizontal_speed = speed
 	if speed > 0.0:
 	if speed > 0.0:

+ 1 - 0
2d/finite_state_machine/player/states/motion/motion.gd

@@ -1,6 +1,7 @@
 extends "res://state_machine/state.gd"
 extends "res://state_machine/state.gd"
 # Collection of important methods to handle direction and animation.
 # Collection of important methods to handle direction and animation.
 
 
+
 func handle_input(event):
 func handle_input(event):
 	if event.is_action_pressed("simulate_damage"):
 	if event.is_action_pressed("simulate_damage"):
 		emit_signal("finished", "stagger")
 		emit_signal("finished", "stagger")

+ 1 - 0
2d/finite_state_machine/player/states/motion/on_ground/idle.gd

@@ -1,5 +1,6 @@
 extends "on_ground.gd"
 extends "on_ground.gd"
 
 
+
 func enter():
 func enter():
 	owner.get_node("AnimationPlayer").play("idle")
 	owner.get_node("AnimationPlayer").play("idle")
 
 

+ 4 - 2
2d/finite_state_machine/player/states/motion/on_ground/move.gd

@@ -1,7 +1,9 @@
 extends "on_ground.gd"
 extends "on_ground.gd"
 
 
-export(float) var max_walk_speed = 450
-export(float) var max_run_speed = 700
+
+export(float) var max_walk_speed = 450.0
+export(float) var max_run_speed = 700.0
+
 
 
 func enter():
 func enter():
 	speed = 0.0
 	speed = 0.0

+ 1 - 0
2d/finite_state_machine/player/states/motion/on_ground/on_ground.gd

@@ -4,6 +4,7 @@ extends "../motion.gd"
 var speed = 0.0
 var speed = 0.0
 var velocity = Vector2()
 var velocity = Vector2()
 
 
+
 func handle_input(event):
 func handle_input(event):
 	if event.is_action_pressed("jump"):
 	if event.is_action_pressed("jump"):
 		emit_signal("finished", "jump")
 		emit_signal("finished", "jump")

+ 1 - 0
2d/finite_state_machine/player/weapon/sword.gd

@@ -30,6 +30,7 @@ var combo = [{
 
 
 var hit_objects = []
 var hit_objects = []
 
 
+
 func _ready():
 func _ready():
 	# warning-ignore:return_value_discarded
 	# warning-ignore:return_value_discarded
 	$AnimationPlayer.connect("animation_finished", self, "_on_animation_finished")
 	$AnimationPlayer.connect("animation_finished", self, "_on_animation_finished")

+ 1 - 0
2d/finite_state_machine/player/weapon/weapon_pivot.gd

@@ -2,6 +2,7 @@ extends Position2D
 
 
 var z_index_start = 0
 var z_index_start = 0
 
 
+
 func _ready():
 func _ready():
 	#warning-ignore:return_value_discarded
 	#warning-ignore:return_value_discarded
 	owner.connect("direction_changed", self, "_on_Parent_direction_changed")
 	owner.connect("direction_changed", self, "_on_Parent_direction_changed")

+ 1 - 0
2d/finite_state_machine/state_machine/state.gd

@@ -6,6 +6,7 @@ extends Node
 # warning-ignore:unused_signal
 # warning-ignore:unused_signal
 signal finished(next_state_name)
 signal finished(next_state_name)
 
 
+
 # Initialize the state. E.g. change the animation.
 # Initialize the state. E.g. change the animation.
 func enter():
 func enter():
 	pass
 	pass

+ 1 - 0
2d/finite_state_machine/state_machine/state_machine.gd

@@ -17,6 +17,7 @@ var states_stack = []
 var current_state = null
 var current_state = null
 var _active = false setget set_active
 var _active = false setget set_active
 
 
+
 func _ready():
 func _ready():
 	if not start_state:
 	if not start_state:
 		start_state = get_child(0).get_path()
 		start_state = get_child(0).get_path()

+ 1 - 0
2d/gd_paint/paint_control.gd

@@ -48,6 +48,7 @@ var brush_shape = BrushShapes.CIRCLE;
 # in the _draw function for more details).
 # in the _draw function for more details).
 var bg_color = Color.white
 var bg_color = Color.white
 
 
+
 func _ready():
 func _ready():
 	# Get the top left position node. We need this to find out whether or not the mouse is inside the canvas.
 	# Get the top left position node. We need this to find out whether or not the mouse is inside the canvas.
 	TL_node = get_node("TLPos")
 	TL_node = get_node("TLPos")

+ 1 - 2
2d/gd_paint/paint_root.tscn

@@ -215,8 +215,7 @@ text = "Clear picture"
 [node name="SaveFileDialog" type="FileDialog" parent="."]
 [node name="SaveFileDialog" type="FileDialog" parent="."]
 margin_right = 600.0
 margin_right = 600.0
 margin_bottom = 400.0
 margin_bottom = 400.0
+rect_min_size = Vector2( 300, 105 )
 resizable = true
 resizable = true
 access = 2
 access = 2
 filters = PoolStringArray( "*.png" )
 filters = PoolStringArray( "*.png" )
-current_dir = "/home/aaronfranke/workspace/godot-demo-projects/2d/gd_paint"
-current_path = "/home/aaronfranke/workspace/godot-demo-projects/2d/gd_paint/"

+ 1 - 0
2d/gd_paint/tools_panel.gd

@@ -10,6 +10,7 @@ onready var _parent = get_parent()
 onready var save_dialog = _parent.get_node(@"SaveFileDialog")
 onready var save_dialog = _parent.get_node(@"SaveFileDialog")
 onready var paint_control = _parent.get_node(@"PaintControl")
 onready var paint_control = _parent.get_node(@"PaintControl")
 
 
+
 func _ready():
 func _ready():
 	# warning-ignore-all:return_value_discarded
 	# warning-ignore-all:return_value_discarded
 	# Assign all of the needed signals for the oppersation buttons.
 	# Assign all of the needed signals for the oppersation buttons.

+ 1 - 0
2d/hdr/beach_cave.gd

@@ -4,6 +4,7 @@ const CAVE_LIMIT = 1000
 
 
 onready var cave = $Cave
 onready var cave = $Cave
 
 
+
 func _unhandled_input(event):
 func _unhandled_input(event):
 	if event is InputEventMouseMotion and event.button_mask > 0:
 	if event is InputEventMouseMotion and event.button_mask > 0:
 		var rel_x = event.relative.x
 		var rel_x = event.relative.x

+ 1 - 0
2d/hexagonal_map/troll.gd

@@ -3,6 +3,7 @@ extends KinematicBody2D
 const MOTION_SPEED = 160 # Pixels/second.
 const MOTION_SPEED = 160 # Pixels/second.
 const TAN30DEG = tan(deg2rad(30))
 const TAN30DEG = tan(deg2rad(30))
 
 
+
 func _physics_process(_delta):
 func _physics_process(_delta):
 	var motion = Vector2()
 	var motion = Vector2()
 	motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
 	motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")

+ 1 - 0
2d/instancing/ball_factory.gd

@@ -2,6 +2,7 @@ extends Node2D
 
 
 export(PackedScene) var ball_scene = preload("res://ball.tscn")
 export(PackedScene) var ball_scene = preload("res://ball.tscn")
 
 
+
 func _unhandled_input(event):
 func _unhandled_input(event):
 	if event.is_echo():
 	if event.is_echo():
 		return
 		return

+ 1 - 0
2d/isometric/troll.gd

@@ -2,6 +2,7 @@ extends KinematicBody2D
 
 
 const MOTION_SPEED = 160 # Pixels/second.
 const MOTION_SPEED = 160 # Pixels/second.
 
 
+
 func _physics_process(_delta):
 func _physics_process(_delta):
 	var motion = Vector2()
 	var motion = Vector2()
 	motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
 	motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")

+ 1 - 0
2d/kinematic_character/level/princess.gd

@@ -1,5 +1,6 @@
 extends Node
 extends Node
 
 
+
 func _on_body_entered(body):
 func _on_body_entered(body):
 	if body.name == "Player":
 	if body.name == "Player":
 		$"../WinText".show()
 		$"../WinText".show()

+ 1 - 0
2d/kinematic_character/player/player.gd

@@ -9,6 +9,7 @@ var velocity = Vector2()
 
 
 onready var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
 onready var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
 
 
+
 func _physics_process(delta):
 func _physics_process(delta):
 	# Horizontal movement code. First, get the player's input.
 	# Horizontal movement code. First, get the player's input.
 	var walk = WALK_FORCE * (Input.get_action_strength("move_right") - Input.get_action_strength("move_left"))
 	var walk = WALK_FORCE * (Input.get_action_strength("move_right") - Input.get_action_strength("move_left"))

+ 1 - 1
2d/navigation/level.tscn

@@ -9,7 +9,7 @@ vertices = PoolVector2Array( 587.833, 271.924, 530.464, 284.878, 508.256, 281.17
 polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 5, 6 ), PoolIntArray( 7, 8, 9 ), PoolIntArray( 10, 11, 12, 13, 14 ), PoolIntArray( 15, 16, 17, 18, 19, 20 ), PoolIntArray( 21, 3, 2, 22, 23 ), PoolIntArray( 24, 25, 26, 27, 28 ), PoolIntArray( 25, 24, 29 ), PoolIntArray( 30, 25, 29, 31 ), PoolIntArray( 32, 33, 34, 35, 36 ), PoolIntArray( 37, 38, 39, 40 ), PoolIntArray( 41, 37, 40 ), PoolIntArray( 41, 40, 42, 43 ), PoolIntArray( 44, 45, 30, 31 ), PoolIntArray( 46, 12, 11, 7, 47 ), PoolIntArray( 47, 7, 9 ), PoolIntArray( 48, 10, 14, 49 ), PoolIntArray( 50, 6, 5, 51, 48 ), PoolIntArray( 52, 50, 48, 49 ), PoolIntArray( 53, 52, 49, 54, 55 ), PoolIntArray( 17, 56, 57, 58, 18 ), PoolIntArray( 59, 60, 61, 62, 63 ), PoolIntArray( 64, 65, 61, 66 ), PoolIntArray( 66, 61, 60, 67, 68 ), PoolIntArray( 68, 67, 69, 70 ), PoolIntArray( 68, 70, 35, 34 ), PoolIntArray( 71, 53, 55, 72 ), PoolIntArray( 71, 72, 73, 74 ), PoolIntArray( 4, 6, 75, 76 ), PoolIntArray( 63, 77, 74, 59 ), PoolIntArray( 78, 2, 1, 76, 75, 79, 80 ), PoolIntArray( 78, 80, 63, 62 ), PoolIntArray( 81, 59, 74, 73 ), PoolIntArray( 81, 73, 41, 82 ), PoolIntArray( 44, 31, 83, 84, 85 ), PoolIntArray( 18, 86, 47, 9, 19 ), PoolIntArray( 15, 20, 3, 21 ), PoolIntArray( 23, 22, 87, 88 ), PoolIntArray( 89, 28, 27, 90, 91 ), PoolIntArray( 89, 91, 92, 93 ), PoolIntArray( 36, 94, 95, 93, 92 ), PoolIntArray( 36, 92, 88 ), PoolIntArray( 36, 88, 87, 32 ), PoolIntArray( 36, 35, 85, 84 ), PoolIntArray( 42, 44, 85, 96 ), PoolIntArray( 42, 96, 43 ), PoolIntArray( 41, 43, 82 ) ]
 polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 5, 6 ), PoolIntArray( 7, 8, 9 ), PoolIntArray( 10, 11, 12, 13, 14 ), PoolIntArray( 15, 16, 17, 18, 19, 20 ), PoolIntArray( 21, 3, 2, 22, 23 ), PoolIntArray( 24, 25, 26, 27, 28 ), PoolIntArray( 25, 24, 29 ), PoolIntArray( 30, 25, 29, 31 ), PoolIntArray( 32, 33, 34, 35, 36 ), PoolIntArray( 37, 38, 39, 40 ), PoolIntArray( 41, 37, 40 ), PoolIntArray( 41, 40, 42, 43 ), PoolIntArray( 44, 45, 30, 31 ), PoolIntArray( 46, 12, 11, 7, 47 ), PoolIntArray( 47, 7, 9 ), PoolIntArray( 48, 10, 14, 49 ), PoolIntArray( 50, 6, 5, 51, 48 ), PoolIntArray( 52, 50, 48, 49 ), PoolIntArray( 53, 52, 49, 54, 55 ), PoolIntArray( 17, 56, 57, 58, 18 ), PoolIntArray( 59, 60, 61, 62, 63 ), PoolIntArray( 64, 65, 61, 66 ), PoolIntArray( 66, 61, 60, 67, 68 ), PoolIntArray( 68, 67, 69, 70 ), PoolIntArray( 68, 70, 35, 34 ), PoolIntArray( 71, 53, 55, 72 ), PoolIntArray( 71, 72, 73, 74 ), PoolIntArray( 4, 6, 75, 76 ), PoolIntArray( 63, 77, 74, 59 ), PoolIntArray( 78, 2, 1, 76, 75, 79, 80 ), PoolIntArray( 78, 80, 63, 62 ), PoolIntArray( 81, 59, 74, 73 ), PoolIntArray( 81, 73, 41, 82 ), PoolIntArray( 44, 31, 83, 84, 85 ), PoolIntArray( 18, 86, 47, 9, 19 ), PoolIntArray( 15, 20, 3, 21 ), PoolIntArray( 23, 22, 87, 88 ), PoolIntArray( 89, 28, 27, 90, 91 ), PoolIntArray( 89, 91, 92, 93 ), PoolIntArray( 36, 94, 95, 93, 92 ), PoolIntArray( 36, 92, 88 ), PoolIntArray( 36, 88, 87, 32 ), PoolIntArray( 36, 35, 85, 84 ), PoolIntArray( 42, 44, 85, 96 ), PoolIntArray( 42, 96, 43 ), PoolIntArray( 41, 43, 82 ) ]
 outlines = [ PoolVector2Array( 221.41, 488.446, 147.386, 408.87, 145.584, 224.311, 202.904, 99.8167, 310.24, 62.8043, 310.24, 75.7586, 517.509, 55.4019, 537.866, 99.8167, 536.016, 175.692, 476.796, 207.152, 443.485, 192.348, 437.933, 170.14, 415.725, 177.543, 428.68, 246.015, 471.244, 251.567, 587.833, 179.393, 573.028, 140.53, 645.202, 159.036, 573.028, 94.2648, 582.281, 47.9994, 667.409, 75.7586, 710.106, 179.216, 700.721, 268.223, 682.214, 284.878, 695.169, 303.385, 706.272, 501.401, 669.26, 529.16, 602.638, 523.608, 571.177, 501.401, 536.407, 524.944, 371.311, 518.056, 300.441, 497.494, 317.643, 447.733, 182.548, 382.961, 193.651, 423.675, 245.469, 477.343 ), PoolVector2Array( 350.954, 447.733, 363.908, 351.501, 321.344, 338.546, 241.767, 327.443, 234.365, 244.165, 288.033, 231.211, 221.41, 171.991, 189.95, 231.211, 175.145, 332.995, 184.398, 349.65, 265.825, 407.019 ), PoolVector2Array( 267.676, 153.485, 310.24, 112.771, 308.39, 92.4142, 487.899, 85.0117, 502.704, 97.9661, 495.302, 164.588, 465.692, 179.393, 452.738, 166.439, 476.796, 149.783, 460.14, 123.875, 319.493, 190.497 ), PoolVector2Array( 397.219, 188.646, 345.402, 210.854, 360.207, 223.808, 297.286, 258.97, 299.136, 283.028, 352.804, 320.04, 424.978, 334.845, 421.277, 360.754, 384.265, 351.501, 376.862, 418.123, 480.497, 434.779, 508.256, 281.177, 421.277, 270.074 ), PoolVector2Array( 497.153, 255.269, 597.086, 192.348, 630.397, 212.704, 650.754, 251.567, 648.903, 321.891, 669.26, 297.833, 676.663, 493.998, 619.293, 510.654, 598.937, 492.148, 621.144, 486.596, 648.903, 394.065, 624.926, 359.595, 526.762, 342.248, 530.464, 284.878, 587.833, 271.924 ), PoolVector2Array( 325.228, 486.302, 332.441, 457.494, 366.441, 467.494, 373.441, 436.494, 476.441, 468.494, 496.638, 439.381, 524.608, 359.37, 620.443, 383.995, 605.437, 456.366, 538.077, 499.891, 395.879, 501.87 ) ]
 outlines = [ PoolVector2Array( 221.41, 488.446, 147.386, 408.87, 145.584, 224.311, 202.904, 99.8167, 310.24, 62.8043, 310.24, 75.7586, 517.509, 55.4019, 537.866, 99.8167, 536.016, 175.692, 476.796, 207.152, 443.485, 192.348, 437.933, 170.14, 415.725, 177.543, 428.68, 246.015, 471.244, 251.567, 587.833, 179.393, 573.028, 140.53, 645.202, 159.036, 573.028, 94.2648, 582.281, 47.9994, 667.409, 75.7586, 710.106, 179.216, 700.721, 268.223, 682.214, 284.878, 695.169, 303.385, 706.272, 501.401, 669.26, 529.16, 602.638, 523.608, 571.177, 501.401, 536.407, 524.944, 371.311, 518.056, 300.441, 497.494, 317.643, 447.733, 182.548, 382.961, 193.651, 423.675, 245.469, 477.343 ), PoolVector2Array( 350.954, 447.733, 363.908, 351.501, 321.344, 338.546, 241.767, 327.443, 234.365, 244.165, 288.033, 231.211, 221.41, 171.991, 189.95, 231.211, 175.145, 332.995, 184.398, 349.65, 265.825, 407.019 ), PoolVector2Array( 267.676, 153.485, 310.24, 112.771, 308.39, 92.4142, 487.899, 85.0117, 502.704, 97.9661, 495.302, 164.588, 465.692, 179.393, 452.738, 166.439, 476.796, 149.783, 460.14, 123.875, 319.493, 190.497 ), PoolVector2Array( 397.219, 188.646, 345.402, 210.854, 360.207, 223.808, 297.286, 258.97, 299.136, 283.028, 352.804, 320.04, 424.978, 334.845, 421.277, 360.754, 384.265, 351.501, 376.862, 418.123, 480.497, 434.779, 508.256, 281.177, 421.277, 270.074 ), PoolVector2Array( 497.153, 255.269, 597.086, 192.348, 630.397, 212.704, 650.754, 251.567, 648.903, 321.891, 669.26, 297.833, 676.663, 493.998, 619.293, 510.654, 598.937, 492.148, 621.144, 486.596, 648.903, 394.065, 624.926, 359.595, 526.762, 342.248, 530.464, 284.878, 587.833, 271.924 ), PoolVector2Array( 325.228, 486.302, 332.441, 457.494, 366.441, 467.494, 373.441, 436.494, 476.441, 468.494, 496.638, 439.381, 524.608, 359.37, 620.443, 383.995, 605.437, 456.366, 538.077, 499.891, 395.879, 501.87 ) ]
 
 
-[node name="Navigation2D" type="Navigation2D"]
+[node name="Navigation2D" type="Node2D"]
 script = ExtResource( 1 )
 script = ExtResource( 1 )
 
 
 [node name="Navmesh" type="NavigationPolygonInstance" parent="."]
 [node name="Navmesh" type="NavigationPolygonInstance" parent="."]

+ 33 - 3
2d/navigation/navigation.gd

@@ -1,10 +1,20 @@
-extends Navigation2D
+extends Node2D
+
 
 
 export(float) var character_speed = 400.0
 export(float) var character_speed = 400.0
 var path = []
 var path = []
 
 
+var map
+
 onready var character = $Character
 onready var character = $Character
 
 
+
+func _ready():
+	# use call deferred to make sure the entire SceneTree Nodes are setup
+	# else yield on 'physics_frame' in a _ready() might get stuck
+	call_deferred("setup_navserver")
+
+
 func _process(delta):
 func _process(delta):
 	var walk_distance = character_speed * delta
 	var walk_distance = character_speed * delta
 	move_along_path(walk_distance)
 	move_along_path(walk_distance)
@@ -18,6 +28,26 @@ func _unhandled_input(event):
 	_update_navigation_path(character.position, get_local_mouse_position())
 	_update_navigation_path(character.position, get_local_mouse_position())
 
 
 
 
+func setup_navserver():
+
+	# create a new navigation map
+	map = Navigation2DServer.map_create()
+	Navigation2DServer.map_set_active(map, true)
+
+	# create a new navigation region and add it to the map
+	var region = Navigation2DServer.region_create()
+	Navigation2DServer.region_set_transform(region, Transform())
+	Navigation2DServer.region_set_map(region, map)
+
+	# sets navigation mesh for the region
+	var navigation_poly = NavigationMesh.new()
+	navigation_poly = $Navmesh.navpoly
+	Navigation2DServer.region_set_navpoly(region, navigation_poly)
+
+	# wait for Navigation2DServer sync to adapt to made changes
+	yield(get_tree(), "physics_frame")
+
+
 func move_along_path(distance):
 func move_along_path(distance):
 	var last_point = character.position
 	var last_point = character.position
 	while path.size():
 	while path.size():
@@ -36,10 +66,10 @@ func move_along_path(distance):
 
 
 
 
 func _update_navigation_path(start_position, end_position):
 func _update_navigation_path(start_position, end_position):
-	# get_simple_path is part of the Navigation2D class.
+	# map_get_path is part of the avigation2DServer class.
 	# It returns a PoolVector2Array of points that lead you
 	# It returns a PoolVector2Array of points that lead you
 	# from the start_position to the end_position.
 	# from the start_position to the end_position.
-	path = get_simple_path(start_position, end_position, true)
+	path = Navigation2DServer.map_get_path(map,start_position, end_position, true)
 	# The first point is always the start_position.
 	# The first point is always the start_position.
 	# We don't need it in this example as it corresponds to the character's position.
 	# We don't need it in this example as it corresponds to the character's position.
 	path.remove(0)
 	path.remove(0)

+ 1 - 0
2d/navigation_astar/character.gd

@@ -14,6 +14,7 @@ var _target_position = Vector2()
 
 
 var _velocity = Vector2()
 var _velocity = Vector2()
 
 
+
 func _ready():
 func _ready():
 	_change_state(States.IDLE)
 	_change_state(States.IDLE)
 
 

+ 1 - 0
2d/navigation_astar/pathfind_astar.gd

@@ -20,6 +20,7 @@ onready var astar_node = AStar.new()
 onready var obstacles = get_used_cells_by_id(0)
 onready var obstacles = get_used_cells_by_id(0)
 onready var _half_cell_size = cell_size / 2
 onready var _half_cell_size = cell_size / 2
 
 
+
 func _ready():
 func _ready():
 	var walkable_cells_list = astar_add_walkable_cells(obstacles)
 	var walkable_cells_list = astar_add_walkable_cells(obstacles)
 	astar_connect_walkable_cells(walkable_cells_list)
 	astar_connect_walkable_cells(walkable_cells_list)

+ 3 - 1
2d/physics_platformer/audio/sound_coin.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 3 - 1
2d/physics_platformer/audio/sound_explode.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 3 - 1
2d/physics_platformer/audio/sound_hit.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 3 - 1
2d/physics_platformer/audio/sound_jump.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 3 - 1
2d/physics_platformer/audio/sound_shoot.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 force/max_rate_hz=44100
 edit/trim=true
 edit/trim=true
 edit/normalize=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0
 compress/mode=0

+ 1 - 0
2d/physics_platformer/coin/coin.gd

@@ -3,6 +3,7 @@ extends Area2D
 
 
 var taken = false
 var taken = false
 
 
+
 func _on_body_enter(body):
 func _on_body_enter(body):
 	if not taken and body is Player:
 	if not taken and body is Player:
 		($AnimationPlayer as AnimationPlayer).play("taken")
 		($AnimationPlayer as AnimationPlayer).play("taken")

+ 1 - 0
2d/physics_platformer/enemy/enemy.gd

@@ -18,6 +18,7 @@ var Bullet = preload("res://player/bullet.gd")
 onready var rc_left = $RaycastLeft
 onready var rc_left = $RaycastLeft
 onready var rc_right = $RaycastRight
 onready var rc_right = $RaycastRight
 
 
+
 func _integrate_forces(s):
 func _integrate_forces(s):
 	var lv = s.get_linear_velocity()
 	var lv = s.get_linear_velocity()
 	var new_anim = anim
 	var new_anim = anim

+ 1 - 0
2d/physics_platformer/platform/moving_platform.gd

@@ -6,6 +6,7 @@ export var cycle = 1.0
 
 
 var accum = 0.0
 var accum = 0.0
 
 
+
 func _physics_process(delta):
 func _physics_process(delta):
 	accum += delta * (1.0 / cycle) * TAU
 	accum += delta * (1.0 / cycle) * TAU
 	accum = fmod(accum, TAU)
 	accum = fmod(accum, TAU)

+ 1 - 0
2d/physics_platformer/player/bullet.gd

@@ -3,6 +3,7 @@ extends RigidBody2D
 
 
 var disabled = false
 var disabled = false
 
 
+
 func _ready():
 func _ready():
 	($Timer as Timer).start()
 	($Timer as Timer).start()
 
 

+ 1 - 0
2d/physics_platformer/player/player.gd

@@ -54,6 +54,7 @@ onready var sprite_smoke = sprite.get_node(@"Smoke")
 onready var animation_player = $AnimationPlayer
 onready var animation_player = $AnimationPlayer
 onready var bullet_shoot = $BulletShoot
 onready var bullet_shoot = $BulletShoot
 
 
+
 func _integrate_forces(s):
 func _integrate_forces(s):
 	var lv = s.get_linear_velocity()
 	var lv = s.get_linear_velocity()
 	var step = s.get_step()
 	var step = s.get_step()

+ 1 - 0
2d/physics_tests/tests/functional/test_character_pixels.gd

@@ -21,6 +21,7 @@ func _ready():
 	options.add_menu_item(OPTION_TEST_CASE_DETECT_FLOOR_NO_SNAP)
 	options.add_menu_item(OPTION_TEST_CASE_DETECT_FLOOR_NO_SNAP)
 	options.add_menu_item(OPTION_TEST_CASE_DETECT_FLOOR_MOTION_CHANGES)
 	options.add_menu_item(OPTION_TEST_CASE_DETECT_FLOOR_MOTION_CHANGES)
 
 
+
 func _physics_process(_delta):
 func _physics_process(_delta):
 	if _moving_body:
 	if _moving_body:
 		if _moving_body.is_on_floor():
 		if _moving_body.is_on_floor():

+ 0 - 3
2d/physics_tests/tests/test_options.tscn

@@ -12,6 +12,3 @@ text = "TEST OPTIONS"
 flat = false
 flat = false
 align = 0
 align = 0
 script = ExtResource( 1 )
 script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}

+ 5 - 5
2d/platformer/assets/theme/user_interface.tres

@@ -2,6 +2,10 @@
 
 
 [ext_resource path="res://assets/theme/fonts/kenney_mini_square.tres" type="DynamicFontData" id=1]
 [ext_resource path="res://assets/theme/fonts/kenney_mini_square.tres" type="DynamicFontData" id=1]
 
 
+[sub_resource type="DynamicFont" id=6]
+size = 30
+font_data = ExtResource( 1 )
+
 [sub_resource type="StyleBoxFlat" id=1]
 [sub_resource type="StyleBoxFlat" id=1]
 content_margin_left = 6.0
 content_margin_left = 6.0
 content_margin_right = 6.0
 content_margin_right = 6.0
@@ -62,10 +66,6 @@ border_width_right = 1
 border_width_bottom = 1
 border_width_bottom = 1
 border_color = Color( 0.41, 0.61, 0.91, 1 )
 border_color = Color( 0.41, 0.61, 0.91, 1 )
 
 
-[sub_resource type="DynamicFont" id=6]
-size = 30
-font_data = ExtResource( 1 )
-
 [resource]
 [resource]
 default_font = SubResource( 6 )
 default_font = SubResource( 6 )
 Button/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
 Button/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
@@ -75,7 +75,7 @@ Button/colors/font_color_pressed = Color( 0.411765, 0.611765, 0.909804, 1 )
 Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
 Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 )
 Button/colors/icon_color_pressed = Color( 0.4715, 0.7015, 1.0465, 1 )
 Button/colors/icon_color_pressed = Color( 0.4715, 0.7015, 1.0465, 1 )
 Button/constants/hseparation = 2
 Button/constants/hseparation = 2
-Button/fonts/font = null
+Button/fonts/font = SubResource( 6 )
 Button/styles/disabled = SubResource( 1 )
 Button/styles/disabled = SubResource( 1 )
 Button/styles/focus = SubResource( 2 )
 Button/styles/focus = SubResource( 2 )
 Button/styles/hover = SubResource( 3 )
 Button/styles/hover = SubResource( 3 )

+ 1 - 0
2d/platformer/src/Actors/Actor.gd

@@ -12,6 +12,7 @@ const FLOOR_NORMAL = Vector2.UP
 
 
 var _velocity = Vector2.ZERO
 var _velocity = Vector2.ZERO
 
 
+
 # _physics_process is called after the inherited _physics_process function.
 # _physics_process is called after the inherited _physics_process function.
 # This allows the Player and Enemy scenes to be affected by gravity.
 # This allows the Player and Enemy scenes to be affected by gravity.
 func _physics_process(delta):
 func _physics_process(delta):

+ 2 - 0
2d/platformer/src/Actors/Enemy.gd

@@ -15,11 +15,13 @@ onready var floor_detector_right = $FloorDetectorRight
 onready var sprite = $Sprite
 onready var sprite = $Sprite
 onready var animation_player = $AnimationPlayer
 onready var animation_player = $AnimationPlayer
 
 
+
 # This function is called when the scene enters the scene tree.
 # This function is called when the scene enters the scene tree.
 # We can initialize variables here.
 # We can initialize variables here.
 func _ready():
 func _ready():
 	_velocity.x = speed.x
 	_velocity.x = speed.x
 
 
+
 # Physics process is a built-in loop in Godot.
 # Physics process is a built-in loop in Godot.
 # If you define _physics_process on a node, Godot will call it every frame.
 # If you define _physics_process on a node, Godot will call it every frame.
 
 

+ 46 - 29
2d/platformer/src/Actors/Enemy.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=13 format=2]
+[gd_scene load_steps=14 format=2]
 
 
 [ext_resource path="res://assets/art/player/bullet/bullet.png" type="Texture" id=1]
 [ext_resource path="res://assets/art/player/bullet/bullet.png" type="Texture" id=1]
 [ext_resource path="res://assets/audio/sfx/explode.wav" type="AudioStream" id=2]
 [ext_resource path="res://assets/audio/sfx/explode.wav" type="AudioStream" id=2]
@@ -8,6 +8,21 @@
 
 
 [sub_resource type="CanvasItemMaterial" id=1]
 [sub_resource type="CanvasItemMaterial" id=1]
 
 
+[sub_resource type="Animation" id=8]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("Explosion:scale_amount")
+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": [ 4.0 ]
+}
+
 [sub_resource type="Animation" id=2]
 [sub_resource type="Animation" id=2]
 resource_name = "destroy"
 resource_name = "destroy"
 length = 1.5
 length = 1.5
@@ -60,78 +75,78 @@ tracks/3/keys = {
 "values": [ false, true ]
 "values": [ false, true ]
 }
 }
 tracks/4/type = "value"
 tracks/4/type = "value"
-tracks/4/path = NodePath("Explosion:process_material:scale")
+tracks/4/path = NodePath("Hit:playing")
 tracks/4/interp = 1
 tracks/4/interp = 1
 tracks/4/loop_wrap = true
 tracks/4/loop_wrap = true
 tracks/4/imported = false
 tracks/4/imported = false
 tracks/4/enabled = true
 tracks/4/enabled = true
 tracks/4/keys = {
 tracks/4/keys = {
-"times": PoolRealArray( 0.6, 1 ),
-"transitions": PoolRealArray( 1, 1 ),
-"update": 0,
-"values": [ 1.0, 4.0 ]
+"times": PoolRealArray( 0.00999999 ),
+"transitions": PoolRealArray( 1 ),
+"update": 1,
+"values": [ true ]
 }
 }
 tracks/5/type = "value"
 tracks/5/type = "value"
-tracks/5/path = NodePath("Hit:playing")
+tracks/5/path = NodePath("Explode:playing")
 tracks/5/interp = 1
 tracks/5/interp = 1
 tracks/5/loop_wrap = true
 tracks/5/loop_wrap = true
 tracks/5/imported = false
 tracks/5/imported = false
 tracks/5/enabled = true
 tracks/5/enabled = true
 tracks/5/keys = {
 tracks/5/keys = {
-"times": PoolRealArray( 0.00999999 ),
+"times": PoolRealArray( 0.8 ),
 "transitions": PoolRealArray( 1 ),
 "transitions": PoolRealArray( 1 ),
 "update": 1,
 "update": 1,
 "values": [ true ]
 "values": [ true ]
 }
 }
-tracks/6/type = "value"
-tracks/6/path = NodePath("Explode:playing")
+tracks/6/type = "method"
+tracks/6/path = NodePath(".")
 tracks/6/interp = 1
 tracks/6/interp = 1
 tracks/6/loop_wrap = true
 tracks/6/loop_wrap = true
 tracks/6/imported = false
 tracks/6/imported = false
 tracks/6/enabled = true
 tracks/6/enabled = true
 tracks/6/keys = {
 tracks/6/keys = {
-"times": PoolRealArray( 0.8 ),
+"times": PoolRealArray( 1.5 ),
 "transitions": PoolRealArray( 1 ),
 "transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ true ]
+"values": [ {
+"args": [  ],
+"method": "queue_free"
+} ]
 }
 }
-tracks/7/type = "method"
-tracks/7/path = NodePath(".")
+tracks/7/type = "value"
+tracks/7/path = NodePath(".:collision_layer")
 tracks/7/interp = 1
 tracks/7/interp = 1
 tracks/7/loop_wrap = true
 tracks/7/loop_wrap = true
 tracks/7/imported = false
 tracks/7/imported = false
 tracks/7/enabled = true
 tracks/7/enabled = true
 tracks/7/keys = {
 tracks/7/keys = {
-"times": PoolRealArray( 1.5 ),
+"times": PoolRealArray( 0 ),
 "transitions": PoolRealArray( 1 ),
 "transitions": PoolRealArray( 1 ),
-"values": [ {
-"args": [  ],
-"method": "queue_free"
-} ]
+"update": 1,
+"values": [ 0 ]
 }
 }
 tracks/8/type = "value"
 tracks/8/type = "value"
-tracks/8/path = NodePath(".:collision_layer")
+tracks/8/path = NodePath("Sprite:position")
 tracks/8/interp = 1
 tracks/8/interp = 1
 tracks/8/loop_wrap = true
 tracks/8/loop_wrap = true
 tracks/8/imported = false
 tracks/8/imported = false
 tracks/8/enabled = true
 tracks/8/enabled = true
 tracks/8/keys = {
 tracks/8/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
-"update": 1,
-"values": [ 0 ]
+"times": PoolRealArray( 0, 0.2, 0.4 ),
+"transitions": PoolRealArray( 2.2974, 0.183011, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 0, -32 ), Vector2( 0, 0 ) ]
 }
 }
 tracks/9/type = "value"
 tracks/9/type = "value"
-tracks/9/path = NodePath("Sprite:position")
+tracks/9/path = NodePath("Explosion:scale_amount")
 tracks/9/interp = 1
 tracks/9/interp = 1
 tracks/9/loop_wrap = true
 tracks/9/loop_wrap = true
 tracks/9/imported = false
 tracks/9/imported = false
 tracks/9/enabled = true
 tracks/9/enabled = true
 tracks/9/keys = {
 tracks/9/keys = {
-"times": PoolRealArray( 0, 0.2, 0.4 ),
-"transitions": PoolRealArray( 2.2974, 0.183011, 1 ),
+"times": PoolRealArray( 0.6, 1 ),
+"transitions": PoolRealArray( 1, 1 ),
 "update": 0,
 "update": 0,
-"values": [ Vector2( 0, 0 ), Vector2( 0, -32 ), Vector2( 0, 0 ) ]
+"values": [ 1.0, 4.0 ]
 }
 }
 
 
 [sub_resource type="Animation" id=3]
 [sub_resource type="Animation" id=3]
@@ -211,6 +226,7 @@ hframes = 8
 frame = 7
 frame = 7
 
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 8 )
 anims/destroy = SubResource( 2 )
 anims/destroy = SubResource( 2 )
 anims/idle = SubResource( 3 )
 anims/idle = SubResource( 3 )
 anims/walk = SubResource( 4 )
 anims/walk = SubResource( 4 )
@@ -237,6 +253,7 @@ gravity = Vector2( 0, 250 )
 initial_velocity = 120.0
 initial_velocity = 120.0
 initial_velocity_random = 0.5
 initial_velocity_random = 0.5
 angle_random = 1.0
 angle_random = 1.0
+scale_amount = 4.0
 scale_amount_random = 1.0
 scale_amount_random = 1.0
 color_ramp = SubResource( 7 )
 color_ramp = SubResource( 7 )
 hue_variation = 0.05
 hue_variation = 0.05

+ 2 - 0
2d/platformer/src/Level/Level.gd

@@ -1,10 +1,12 @@
 extends Node2D
 extends Node2D
 
 
+
 const LIMIT_LEFT = -315
 const LIMIT_LEFT = -315
 const LIMIT_TOP = -250
 const LIMIT_TOP = -250
 const LIMIT_RIGHT = 955
 const LIMIT_RIGHT = 955
 const LIMIT_BOTTOM = 690
 const LIMIT_BOTTOM = 690
 
 
+
 func _ready():
 func _ready():
 	for child in get_children():
 	for child in get_children():
 		if child is Player:
 		if child is Player:

+ 2 - 0
2d/platformer/src/Level/Music.gd

@@ -1,9 +1,11 @@
 extends AudioStreamPlayer
 extends AudioStreamPlayer
 
 
+
 const DOUBLE_VOLUME_DB = 6 # Do not change. Represents doubling of sound pressure.
 const DOUBLE_VOLUME_DB = 6 # Do not change. Represents doubling of sound pressure.
 
 
 export(int) var base_volume_db = -14
 export(int) var base_volume_db = -14
 
 
+
 func _ready():
 func _ready():
 	# To avoid AudioStreamPlayer2D sounds playing on top of each other and
 	# To avoid AudioStreamPlayer2D sounds playing on top of each other and
 	# being very loud, let's decrease the volume for splitscreen mode, but
 	# being very loud, let's decrease the volume for splitscreen mode, but

+ 1 - 0
2d/platformer/src/Objects/Coin.gd

@@ -2,6 +2,7 @@ class_name Coin
 extends Area2D
 extends Area2D
 # Collectible that disappears when the player touches it.
 # Collectible that disappears when the player touches it.
 
 
+
 onready var animation_player = $AnimationPlayer
 onready var animation_player = $AnimationPlayer
 
 
 # The Coins only detects collisions with the Player thanks to its collision mask.
 # The Coins only detects collisions with the Player thanks to its collision mask.

+ 1 - 0
2d/platformer/src/UserInterface/CoinsCounter.gd

@@ -1,5 +1,6 @@
 extends Panel
 extends Panel
 
 
+
 var coins_collected = 0
 var coins_collected = 0
 
 
 onready var coins_label = $Label
 onready var coins_label = $Label

+ 0 - 3
2d/platformer/src/UserInterface/CoinsCounter.tscn

@@ -40,9 +40,6 @@ rect_min_size = Vector2( 100, 45 )
 theme = ExtResource( 1 )
 theme = ExtResource( 1 )
 custom_styles/panel = SubResource( 1 )
 custom_styles/panel = SubResource( 1 )
 script = ExtResource( 3 )
 script = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Label" type="Label" parent="."]
 [node name="Label" type="Label" parent="."]
 anchor_right = 1.0
 anchor_right = 1.0

+ 2 - 0
2d/pong/logic/ball.gd

@@ -1,5 +1,6 @@
 extends Area2D
 extends Area2D
 
 
+
 const DEFAULT_SPEED = 100
 const DEFAULT_SPEED = 100
 
 
 var _speed = DEFAULT_SPEED
 var _speed = DEFAULT_SPEED
@@ -7,6 +8,7 @@ var direction = Vector2.LEFT
 
 
 onready var _initial_pos = position
 onready var _initial_pos = position
 
 
+
 func _process(delta):
 func _process(delta):
 	_speed += delta * 2
 	_speed += delta * 2
 	position += _speed * delta * direction
 	position += _speed * delta * direction

+ 2 - 0
2d/pong/logic/ceiling_floor.gd

@@ -1,7 +1,9 @@
 extends Area2D
 extends Area2D
 
 
+
 export var _bounce_direction = 1
 export var _bounce_direction = 1
 
 
+
 func _on_area_entered(area):
 func _on_area_entered(area):
 	if area.name == "Ball":
 	if area.name == "Ball":
 		area.direction = (area.direction + Vector2(0, _bounce_direction)).normalized()
 		area.direction = (area.direction + Vector2(0, _bounce_direction)).normalized()

+ 2 - 0
2d/pong/logic/paddle.gd

@@ -1,5 +1,6 @@
 extends Area2D
 extends Area2D
 
 
+
 const MOVE_SPEED = 100
 const MOVE_SPEED = 100
 
 
 var _ball_dir
 var _ball_dir
@@ -8,6 +9,7 @@ var _down
 
 
 onready var _screen_size_y = get_viewport_rect().size.y
 onready var _screen_size_y = get_viewport_rect().size.y
 
 
+
 func _ready():
 func _ready():
 	var n = String(name).to_lower()
 	var n = String(name).to_lower()
 	_up = n + "_move_up"
 	_up = n + "_move_up"

+ 1 - 0
2d/pong/logic/wall.gd

@@ -1,5 +1,6 @@
 extends Area2D
 extends Area2D
 
 
+
 func _on_wall_area_entered(area):
 func _on_wall_area_entered(area):
 	if area.name == "Ball":
 	if area.name == "Ball":
 		#oops, ball went out of game place, reset
 		#oops, ball went out of game place, reset

+ 4 - 2
2d/role_playing_game/Game.gd

@@ -1,11 +1,13 @@
 extends Node
 extends Node
 
 
-export(NodePath) var combat_screen
-export(NodePath) var exploration_screen
 
 
 const PLAYER_WIN = "res://dialogue/dialogue_data/player_won.json"
 const PLAYER_WIN = "res://dialogue/dialogue_data/player_won.json"
 const PLAYER_LOSE = "res://dialogue/dialogue_data/player_lose.json"
 const PLAYER_LOSE = "res://dialogue/dialogue_data/player_lose.json"
 
 
+export(NodePath) var combat_screen
+export(NodePath) var exploration_screen
+
+
 func _ready():
 func _ready():
 	exploration_screen = get_node(exploration_screen)
 	exploration_screen = get_node(exploration_screen)
 	combat_screen = get_node(combat_screen)
 	combat_screen = get_node(combat_screen)

+ 2 - 0
2d/role_playing_game/combat/Combat.gd

@@ -1,7 +1,9 @@
 extends Node
 extends Node
 
 
+
 signal combat_finished(winner, loser)
 signal combat_finished(winner, loser)
 
 
+
 func initialize(combat_combatants):
 func initialize(combat_combatants):
 	for combatant in combat_combatants:
 	for combatant in combat_combatants:
 		combatant = combatant.instance()
 		combatant = combatant.instance()

+ 3 - 1
2d/role_playing_game/combat/TurnQueue.gd

@@ -1,10 +1,12 @@
 extends Node
 extends Node
 
 
+
+signal active_combatant_changed(active_combatant)
+
 export(NodePath) var combatants_list
 export(NodePath) var combatants_list
 var queue = [] setget set_queue
 var queue = [] setget set_queue
 var active_combatant = null setget _set_active_combatant
 var active_combatant = null setget _set_active_combatant
 
 
-signal active_combatant_changed(active_combatant)
 
 
 func _ready():
 func _ready():
 	combatants_list = get_node(combatants_list)
 	combatants_list = get_node(combatants_list)

+ 5 - 1
2d/role_playing_game/combat/combatants/Combatant.gd

@@ -1,11 +1,15 @@
 class_name Combatant
 class_name Combatant
 extends Node
 extends Node
 
 
+
+signal turn_finished
+
 export(int) var damage = 1
 export(int) var damage = 1
 export(int) var defense = 1
 export(int) var defense = 1
+
 var active = false setget set_active
 var active = false setget set_active
 
 
-signal turn_finished
+
 
 
 func set_active(value):
 func set_active(value):
 	active = value
 	active = value

+ 2 - 0
2d/role_playing_game/combat/combatants/Health.gd

@@ -1,5 +1,6 @@
 extends Node
 extends Node
 
 
+
 signal dead
 signal dead
 signal health_changed(life)
 signal health_changed(life)
 
 
@@ -8,6 +9,7 @@ export var max_life = 10
 export var base_armor = 0
 export var base_armor = 0
 var armor = 0
 var armor = 0
 
 
+
 func _ready():
 func _ready():
 	armor = base_armor
 	armor = base_armor
 
 

+ 1 - 0
2d/role_playing_game/combat/combatants/Opponent.gd

@@ -1,5 +1,6 @@
 extends Combatant
 extends Combatant
 
 
+
 func set_active(value):
 func set_active(value):
 	.set_active(value)
 	.set_active(value)
 	if not active:
 	if not active:

+ 0 - 3
2d/role_playing_game/combat/interface/Info.tscn

@@ -7,9 +7,6 @@ margin_right = 409.0
 margin_bottom = 239.0
 margin_bottom = 239.0
 size_flags_horizontal = 3
 size_flags_horizontal = 3
 size_flags_vertical = 3
 size_flags_vertical = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="VBoxContainer" type="VBoxContainer" parent="."]
 [node name="VBoxContainer" type="VBoxContainer" parent="."]
 margin_left = 7.0
 margin_left = 7.0

+ 2 - 0
2d/role_playing_game/combat/interface/UI.gd

@@ -1,8 +1,10 @@
 extends Control
 extends Control
 
 
+
 export(NodePath) var combatants_node
 export(NodePath) var combatants_node
 export(PackedScene) var info_scene
 export(PackedScene) var info_scene
 
 
+
 func _ready():
 func _ready():
 	combatants_node = get_node(combatants_node)
 	combatants_node = get_node(combatants_node)
 
 

+ 4 - 2
2d/role_playing_game/dialogue/dialogue_player/DialoguePlayer.gd

@@ -1,13 +1,15 @@
 extends Node
 extends Node
 
 
+
+signal dialogue_started
+signal dialogue_finished
+
 export(String, FILE, "*.json") var dialogue_file
 export(String, FILE, "*.json") var dialogue_file
 var dialogue_keys = []
 var dialogue_keys = []
 var dialogue_name = ""
 var dialogue_name = ""
 var current = 0
 var current = 0
 var dialogue_text = ""
 var dialogue_text = ""
 
 
-signal dialogue_started
-signal dialogue_finished
 
 
 func start_dialogue():
 func start_dialogue():
 	emit_signal("dialogue_started")
 	emit_signal("dialogue_started")

+ 2 - 0
2d/role_playing_game/dialogue/interface/Interface.gd

@@ -1,7 +1,9 @@
 extends Control
 extends Control
 
 
+
 var dialogue_node = null
 var dialogue_node = null
 
 
+
 func _ready():
 func _ready():
 	hide()
 	hide()
 
 

+ 0 - 3
2d/role_playing_game/dialogue/interface/Interface.tscn

@@ -9,9 +9,6 @@ margin_right = 1280.0
 margin_bottom = 720.0
 margin_bottom = 720.0
 theme = ExtResource( 1 )
 theme = ExtResource( 1 )
 script = ExtResource( 2 )
 script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Name" type="RichTextLabel" parent="."]
 [node name="Name" type="RichTextLabel" parent="."]
 margin_left = 40.0
 margin_left = 40.0

+ 2 - 0
2d/role_playing_game/grid_movement/grid/Grid.gd

@@ -1,8 +1,10 @@
 extends TileMap
 extends TileMap
 
 
+
 enum CellType { ACTOR, OBSTACLE, OBJECT }
 enum CellType { ACTOR, OBSTACLE, OBJECT }
 export(NodePath) var dialogue_ui
 export(NodePath) var dialogue_ui
 
 
+
 func _ready():
 func _ready():
 	for child in get_children():
 	for child in get_children():
 		set_cellv(world_to_map(child.position), child.type)
 		set_cellv(world_to_map(child.position), child.type)

+ 3 - 1
2d/role_playing_game/grid_movement/pawns/Actor.gd

@@ -1,7 +1,9 @@
 extends Pawn
 extends Pawn
 
 
-onready var Grid = get_parent()
+
 var lost = false
 var lost = false
+onready var Grid = get_parent()
+
 
 
 func _ready():
 func _ready():
 	update_look_direction(Vector2.RIGHT)
 	update_look_direction(Vector2.RIGHT)

+ 2 - 0
2d/role_playing_game/grid_movement/pawns/Opponent.gd

@@ -1,9 +1,11 @@
 extends Pawn
 extends Pawn
 
 
+
 #warning-ignore:unused_class_variable
 #warning-ignore:unused_class_variable
 export(PackedScene) var combat_actor
 export(PackedScene) var combat_actor
 #warning-ignore:unused_class_variable
 #warning-ignore:unused_class_variable
 var lost = false
 var lost = false
 
 
+
 func _ready():
 func _ready():
 	set_process(false)
 	set_process(false)

+ 2 - 0
2d/role_playing_game/grid_movement/pawns/Pawn.gd

@@ -1,12 +1,14 @@
 class_name Pawn
 class_name Pawn
 extends Node2D
 extends Node2D
 
 
+
 enum CellType { ACTOR, OBSTACLE, OBJECT }
 enum CellType { ACTOR, OBSTACLE, OBJECT }
 #warning-ignore:unused_class_variable
 #warning-ignore:unused_class_variable
 export(CellType) var type = CellType.ACTOR
 export(CellType) var type = CellType.ACTOR
 
 
 var active = true setget set_active
 var active = true setget set_active
 
 
+
 func set_active(value):
 func set_active(value):
 	active = value
 	active = value
 	set_process(value)
 	set_process(value)

+ 3 - 1
2d/role_playing_game/grid_movement/pawns/Walker.gd

@@ -1,10 +1,12 @@
 extends Pawn
 extends Pawn
 
 
-onready var parent = get_parent()
+
 #warning-ignore:unused_class_variable
 #warning-ignore:unused_class_variable
 export(PackedScene) var combat_actor
 export(PackedScene) var combat_actor
 #warning-ignore:unused_class_variable
 #warning-ignore:unused_class_variable
 var lost = false
 var lost = false
+onready var parent = get_parent()
+
 
 
 func _ready():
 func _ready():
 	update_look_direction(Vector2.RIGHT)
 	update_look_direction(Vector2.RIGHT)

+ 1 - 0
2d/screen_space_shaders/screen_shaders.gd

@@ -1,5 +1,6 @@
 extends Control
 extends Control
 
 
+
 onready var effect = $Effect
 onready var effect = $Effect
 onready var effects = $Effects
 onready var effects = $Effects
 onready var picture = $Picture
 onready var picture = $Picture

+ 2 - 0
2d/skeleton/level/level.gd

@@ -1,10 +1,12 @@
 extends Node2D
 extends Node2D
 
 
+
 const LIMIT_LEFT = -315
 const LIMIT_LEFT = -315
 const LIMIT_TOP = -250
 const LIMIT_TOP = -250
 const LIMIT_RIGHT = 955
 const LIMIT_RIGHT = 955
 const LIMIT_BOTTOM = 690
 const LIMIT_BOTTOM = 690
 
 
+
 func _ready():
 func _ready():
 	for child in get_children():
 	for child in get_children():
 		if child is Player:
 		if child is Player:

+ 1 - 0
2d/skeleton/player/player.gd

@@ -1,6 +1,7 @@
 class_name Player
 class_name Player
 extends KinematicBody2D
 extends KinematicBody2D
 
 
+
 # Keep this in sync with the AnimationTree's state names and numbers.
 # Keep this in sync with the AnimationTree's state names and numbers.
 enum States {
 enum States {
 	IDLE = 0,
 	IDLE = 0,

+ 8 - 8
2d/skeleton/player/player.tscn

@@ -1747,7 +1747,7 @@ nodes/walk_animation/node = SubResource( 21 )
 nodes/walk_animation/position = Vector2( 0, 140 )
 nodes/walk_animation/position = Vector2( 0, 140 )
 nodes/walk_timescale/node = SubResource( 22 )
 nodes/walk_timescale/node = SubResource( 22 )
 nodes/walk_timescale/position = Vector2( 200, 120 )
 nodes/walk_timescale/position = Vector2( 200, 120 )
-node_connections = [ "state", 0, "idle_animation", "state", 1, "walk_timescale", "state", 2, "run_timescale", "state", 3, "fly_animation", "state", 4, "fall_animation", "output", 0, "land_hard", "land", 0, "jump", "land", 1, "land_animation", "jump", 0, "state", "jump", 1, "jump_animation", "land_hard", 0, "land", "land_hard", 1, "land_hard_animation", "run_timescale", 0, "run_animation", "walk_timescale", 0, "walk_animation" ]
+node_connections = [ "jump", 0, "state", "jump", 1, "jump_animation", "land", 0, "jump", "land", 1, "land_animation", "land_hard", 0, "land", "land_hard", 1, "land_hard_animation", "run_timescale", 0, "run_animation", "walk_timescale", 0, "walk_animation", "state", 0, "idle_animation", "state", 1, "walk_timescale", "state", 2, "run_timescale", "state", 3, "fly_animation", "state", 4, "fall_animation", "output", 0, "land_hard" ]
 
 
 [sub_resource type="RectangleShape2D" id=24]
 [sub_resource type="RectangleShape2D" id=24]
 extents = Vector2( 11, 16.4358 )
 extents = Vector2( 11, 16.4358 )
@@ -1878,7 +1878,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 237.601, 31.7394, 217.703, 30.1435, 183.732, 47.8469, 274.303, 49.2926, 271.111, 94.5053, 183.877, 89.7181, 185.505, 166.856, 248.688, 172.323, 242.541, 187.015, 189.46, 182.958, 190.308, 202.449, 180.383, 225.837, 201.435, 321.531, 242.841, 196.76, 256.334, 215.801, 276.077, 283.732, 295.215, 310.526, 272.249, 351.675, 216.746, 356.459 )
 polygon = PoolVector2Array( 237.601, 31.7394, 217.703, 30.1435, 183.732, 47.8469, 274.303, 49.2926, 271.111, 94.5053, 183.877, 89.7181, 185.505, 166.856, 248.688, 172.323, 242.541, 187.015, 189.46, 182.958, 190.308, 202.449, 180.383, 225.837, 201.435, 321.531, 242.841, 196.76, 256.334, 215.801, 276.077, 283.732, 295.215, 310.526, 272.249, 351.675, 216.746, 356.459 )
 uv = PoolVector2Array( 235.407, 30.1435, 217.703, 30.1435, 183.732, 47.8469, 276.555, 49.2823, 274.641, 85.6459, 181.34, 83.7321, 184.689, 180.383, 253.11, 178.469, 243.541, 188.995, 188.038, 187.081, 188.995, 200, 180.383, 225.837, 201.435, 321.531, 244.976, 199.043, 259.809, 215.789, 276.077, 283.732, 295.215, 310.526, 272.249, 351.675, 216.746, 356.459 )
 uv = PoolVector2Array( 235.407, 30.1435, 217.703, 30.1435, 183.732, 47.8469, 276.555, 49.2823, 274.641, 85.6459, 181.34, 83.7321, 184.689, 180.383, 253.11, 178.469, 243.541, 188.995, 188.038, 187.081, 188.995, 200, 180.383, 225.837, 201.435, 321.531, 244.976, 199.043, 259.809, 215.789, 276.077, 283.732, 295.215, 310.526, 272.249, 351.675, 216.746, 356.459 )
 polygons = [ PoolIntArray( 0, 1, 2, 5, 4, 3 ), PoolIntArray( 4, 7, 6, 5 ), PoolIntArray( 8, 7, 6, 9 ), PoolIntArray( 13, 8, 9, 10 ), PoolIntArray( 13, 14, 11, 10 ), PoolIntArray( 14, 15, 12, 11 ), PoolIntArray( 15, 16, 17, 18, 12 ) ]
 polygons = [ PoolIntArray( 0, 1, 2, 5, 4, 3 ), PoolIntArray( 4, 7, 6, 5 ), PoolIntArray( 8, 7, 6, 9 ), PoolIntArray( 13, 8, 9, 10 ), PoolIntArray( 13, 14, 11, 10 ), PoolIntArray( 14, 15, 12, 11 ), PoolIntArray( 15, 16, 17, 18, 12 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/RightArm"), PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 1, 1, 0.5, 1, 1, 0.5, 0, 0, 0 ), NodePath("Hip/Chest/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0.5, 1, 1, 1 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/RightArm", PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 1, 1, 0.5, 1, 1, 0.5, 0, 0, 0 ), "Hip/Chest/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0.5, 1, 1, 1 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 19
 internal_vertex_count = 19
 
 
 [node name="RightLeg" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="RightLeg" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1888,7 +1888,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 348.266, 400, 289.099, 380.833, 280.766, 435, 276.599, 470.833, 250.766, 515, 249.933, 604.167, 246.599, 690.833, 407.433, 695.833, 409.099, 659.167, 384.099, 606.667, 349.099, 599.167, 330.766, 550, 342.433, 476.667, 337.433, 442.5 )
 polygon = PoolVector2Array( 348.266, 400, 289.099, 380.833, 280.766, 435, 276.599, 470.833, 250.766, 515, 249.933, 604.167, 246.599, 690.833, 407.433, 695.833, 409.099, 659.167, 384.099, 606.667, 349.099, 599.167, 330.766, 550, 342.433, 476.667, 337.433, 442.5 )
 uv = PoolVector2Array( 348.266, 400, 289.099, 380.833, 280.766, 435, 276.599, 470.833, 250.766, 515, 249.933, 604.167, 246.599, 690.833, 407.433, 695.833, 409.099, 659.167, 384.099, 606.667, 349.099, 599.167, 330.766, 550, 342.433, 476.667, 337.433, 442.5 )
 uv = PoolVector2Array( 348.266, 400, 289.099, 380.833, 280.766, 435, 276.599, 470.833, 250.766, 515, 249.933, 604.167, 246.599, 690.833, 407.433, 695.833, 409.099, 659.167, 384.099, 606.667, 349.099, 599.167, 330.766, 550, 342.433, 476.667, 337.433, 442.5 )
 polygons = [ PoolIntArray( 0, 1, 2, 13 ), PoolIntArray( 13, 12, 3, 2 ), PoolIntArray( 12, 11, 4, 3 ), PoolIntArray( 11, 10, 5, 4 ), PoolIntArray( 10, 9, 8, 7, 6, 5 ) ]
 polygons = [ PoolIntArray( 0, 1, 2, 13 ), PoolIntArray( 13, 12, 3, 2 ), PoolIntArray( 12, 11, 4, 3 ), PoolIntArray( 11, 10, 5, 4 ), PoolIntArray( 10, 9, 8, 7, 6, 5 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg"), PoolRealArray( 1, 1, 1, 0.53, 0, 0, 0, 0, 0, 0, 0, 0, 0.53, 1 ), NodePath("Hip/RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0.53, 1, 1, 0, 0, 0, 0, 0, 1, 0.53, 0 ), NodePath("Hip/RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0.53, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg", PoolRealArray( 1, 1, 1, 0.53, 0, 0, 0, 0, 0, 0, 0, 0, 0.53, 1 ), "Hip/RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0.53, 1, 1, 0, 0, 0, 0, 0, 1, 0.53, 0 ), "Hip/RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0.53, 0, 0, 0 ) ]
 internal_vertex_count = 14
 internal_vertex_count = 14
 
 
 [node name="Body" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="Body" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1898,7 +1898,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 473.936, 29.2553, 430.851, 19.6809, 384.043, 78.7234, 344.681, 107.447, 348.404, 192.553, 375.532, 240.426, 375, 255.319, 351.064, 269.681, 347.34, 294.681, 371.809, 334.574, 468.085, 347.872, 490.957, 296.809, 489.894, 276.596, 472.368, 259.211, 473.936, 245.745, 505.319, 222.34, 522.872, 179.787, 507.447, 121.809, 484.043, 84.0426, 398.404, 38.2979, 419.681, 344.149 )
 polygon = PoolVector2Array( 473.936, 29.2553, 430.851, 19.6809, 384.043, 78.7234, 344.681, 107.447, 348.404, 192.553, 375.532, 240.426, 375, 255.319, 351.064, 269.681, 347.34, 294.681, 371.809, 334.574, 468.085, 347.872, 490.957, 296.809, 489.894, 276.596, 472.368, 259.211, 473.936, 245.745, 505.319, 222.34, 522.872, 179.787, 507.447, 121.809, 484.043, 84.0426, 398.404, 38.2979, 419.681, 344.149 )
 uv = PoolVector2Array( 473.936, 29.2553, 430.851, 19.6809, 384.043, 78.7234, 344.681, 107.447, 348.404, 192.553, 375.532, 240.426, 375, 255.319, 351.064, 269.681, 347.34, 294.681, 371.809, 334.574, 468.085, 347.872, 490.957, 296.809, 489.894, 276.596, 472.368, 259.211, 473.936, 245.745, 505.319, 222.34, 522.872, 179.787, 507.447, 121.809, 484.043, 84.0426, 398.404, 38.2979, 419.681, 344.149 )
 uv = PoolVector2Array( 473.936, 29.2553, 430.851, 19.6809, 384.043, 78.7234, 344.681, 107.447, 348.404, 192.553, 375.532, 240.426, 375, 255.319, 351.064, 269.681, 347.34, 294.681, 371.809, 334.574, 468.085, 347.872, 490.957, 296.809, 489.894, 276.596, 472.368, 259.211, 473.936, 245.745, 505.319, 222.34, 522.872, 179.787, 507.447, 121.809, 484.043, 84.0426, 398.404, 38.2979, 419.681, 344.149 )
 polygons = [ PoolIntArray( 2, 19, 1, 0, 18 ), PoolIntArray( 2, 3, 17, 18 ), PoolIntArray( 3, 4, 15, 16, 17 ), PoolIntArray( 4, 5, 14, 15 ), PoolIntArray( 5, 6, 13, 14 ), PoolIntArray( 6, 7, 12, 13 ), PoolIntArray( 7, 8, 11, 12 ), PoolIntArray( 8, 9, 20, 10, 11 ) ]
 polygons = [ PoolIntArray( 2, 19, 1, 0, 18 ), PoolIntArray( 2, 3, 17, 18 ), PoolIntArray( 3, 4, 15, 16, 17 ), PoolIntArray( 4, 5, 14, 15 ), PoolIntArray( 5, 6, 13, 14 ), PoolIntArray( 6, 7, 12, 13 ), PoolIntArray( 7, 8, 11, 12 ), PoolIntArray( 8, 9, 20, 10, 11 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0.51, 0.51, 1, 1, 1, 1, 1, 1, 0.51, 0.51, 0, 0, 0, 0, 0, 1 ), NodePath("Hip/Chest"), PoolRealArray( 1, 1, 1, 1, 1, 0.51, 0.51, 0, 0, 0, 0, 0, 0, 0.51, 0.51, 1, 1, 1, 1, 1, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0.51, 0.51, 1, 1, 1, 1, 1, 1, 0.51, 0.51, 0, 0, 0, 0, 0, 1 ), "Hip/Chest", PoolRealArray( 1, 1, 1, 1, 1, 0.51, 0.51, 0, 0, 0, 0, 0, 0, 0.51, 0.51, 1, 1, 1, 1, 1, 0 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 21
 internal_vertex_count = 21
 
 
 [node name="LeftLeg" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="LeftLeg" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1908,7 +1908,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 65.7658, 390, 92.4325, 386.667, 119.099, 398.333, 119.099, 426.667, 120.766, 477.5, 107.433, 551.667, 129.099, 592.5, 163.266, 604.167, 188.266, 675, 173.266, 692.5, 20.7658, 686.667, 25.7658, 648.333, 29.9325, 608.333, 24.0992, 530.833, 54.9325, 472.5 )
 polygon = PoolVector2Array( 65.7658, 390, 92.4325, 386.667, 119.099, 398.333, 119.099, 426.667, 120.766, 477.5, 107.433, 551.667, 129.099, 592.5, 163.266, 604.167, 188.266, 675, 173.266, 692.5, 20.7658, 686.667, 25.7658, 648.333, 29.9325, 608.333, 24.0992, 530.833, 54.9325, 472.5 )
 uv = PoolVector2Array( 65.7658, 390, 92.4325, 386.667, 119.099, 398.333, 119.099, 426.667, 120.766, 477.5, 107.433, 551.667, 129.099, 592.5, 163.266, 604.167, 188.266, 675, 173.266, 692.5, 20.7658, 686.667, 25.7658, 648.333, 29.9325, 608.333, 24.0992, 530.833, 54.9325, 472.5 )
 uv = PoolVector2Array( 65.7658, 390, 92.4325, 386.667, 119.099, 398.333, 119.099, 426.667, 120.766, 477.5, 107.433, 551.667, 129.099, 592.5, 163.266, 604.167, 188.266, 675, 173.266, 692.5, 20.7658, 686.667, 25.7658, 648.333, 29.9325, 608.333, 24.0992, 530.833, 54.9325, 472.5 )
 polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 14 ), PoolIntArray( 4, 5, 13, 14 ), PoolIntArray( 5, 6, 12, 13 ), PoolIntArray( 6, 7, 8, 9, 10, 11, 12 ) ]
 polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 14 ), PoolIntArray( 4, 5, 13, 14 ), PoolIntArray( 5, 6, 12, 13 ), PoolIntArray( 6, 7, 8, 9, 10, 11, 12 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0.03, 1, 0, 0, 0, 0, 0, 0, 0.53, 0.5, 0.03 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0.53, 1, 1, 1, 1, 1, 0, 0, 0 ), NodePath("RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0.03, 1, 0, 0, 0, 0, 0, 0, 0.53, 0.5, 0.03 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0.53, 1, 1, 1, 1, 1, 0, 0, 0 ), "RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 15
 internal_vertex_count = 15
 
 
 [node name="Head" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="Head" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1918,7 +1918,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 616.26, 246.341, 555.285, 285.366, 508.13, 330.894, 482.114, 380.488, 482.114, 448.781, 492.683, 498.374, 552.846, 534.146, 656.911, 538.211, 773.984, 511.382, 807.317, 506.504, 813.821, 342.276, 789.431, 297.561, 757.724, 269.106, 669.106, 249.594 )
 polygon = PoolVector2Array( 616.26, 246.341, 555.285, 285.366, 508.13, 330.894, 482.114, 380.488, 482.114, 448.781, 492.683, 498.374, 552.846, 534.146, 656.911, 538.211, 773.984, 511.382, 807.317, 506.504, 813.821, 342.276, 789.431, 297.561, 757.724, 269.106, 669.106, 249.594 )
 uv = PoolVector2Array( 616.26, 246.341, 555.285, 285.366, 508.13, 330.894, 482.114, 380.488, 482.114, 448.781, 492.683, 498.374, 552.846, 534.146, 656.911, 538.211, 773.984, 511.382, 807.317, 506.504, 813.821, 342.276, 789.431, 297.561, 757.724, 269.106, 669.106, 249.594 )
 uv = PoolVector2Array( 616.26, 246.341, 555.285, 285.366, 508.13, 330.894, 482.114, 380.488, 482.114, 448.781, 492.683, 498.374, 552.846, 534.146, 656.911, 538.211, 773.984, 511.382, 807.317, 506.504, 813.821, 342.276, 789.431, 297.561, 757.724, 269.106, 669.106, 249.594 )
 polygons = [ PoolIntArray( 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ]
 polygons = [ PoolIntArray( 10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head", PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 14
 internal_vertex_count = 14
 
 
 [node name="Chin" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="Chin" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1929,7 +1929,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 486, 576, 812, 562, 823, 605, 790, 666, 722, 690, 547, 686, 493, 646 )
 polygon = PoolVector2Array( 486, 576, 812, 562, 823, 605, 790, 666, 722, 690, 547, 686, 493, 646 )
 uv = PoolVector2Array( 486, 576, 812, 562, 823, 605, 790, 666, 722, 690, 547, 686, 493, 646 )
 uv = PoolVector2Array( 486, 576, 812, 562, 823, 605, 790, 666, 722, 690, 547, 686, 493, 646 )
 polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5, 6 ) ]
 polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5, 6 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ), NodePath("Hip/LeftArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), NodePath("RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ), "Hip/LeftArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ), "RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 7
 internal_vertex_count = 7
 
 
 [node name="LeftArm" type="Polygon2D" parent="Sprite/Polygons"]
 [node name="LeftArm" type="Polygon2D" parent="Sprite/Polygons"]
@@ -1939,7 +1939,7 @@ skeleton = NodePath("../../Skeleton2D")
 polygon = PoolVector2Array( 89.9521, 16.268, 77.5119, 15.7895, 55.5023, 25.8373, 39.2344, 29.1866, 33.9712, 59.3302, 27.2727, 154.545, 29.1865, 180.861, 33.4928, 196.172, 20.5741, 240.67, 36.842, 321.531, 61.244, 359.809, 125.837, 353.11, 137.799, 309.569, 122.967, 287.56, 106.22, 202.871, 92.3444, 191.866, 91.866, 179.426, 127.273, 70.3349, 134.928, 48.3254, 119.617, 30.622 )
 polygon = PoolVector2Array( 89.9521, 16.268, 77.5119, 15.7895, 55.5023, 25.8373, 39.2344, 29.1866, 33.9712, 59.3302, 27.2727, 154.545, 29.1865, 180.861, 33.4928, 196.172, 20.5741, 240.67, 36.842, 321.531, 61.244, 359.809, 125.837, 353.11, 137.799, 309.569, 122.967, 287.56, 106.22, 202.871, 92.3444, 191.866, 91.866, 179.426, 127.273, 70.3349, 134.928, 48.3254, 119.617, 30.622 )
 uv = PoolVector2Array( 89.9521, 16.268, 77.5119, 15.7895, 55.5023, 25.8373, 39.2344, 29.1866, 33.9712, 59.3302, 27.2727, 154.545, 29.1865, 180.861, 33.4928, 196.172, 20.5741, 240.67, 36.842, 321.531, 61.244, 359.809, 125.837, 353.11, 137.799, 309.569, 122.967, 287.56, 106.22, 202.871, 92.3444, 191.866, 91.866, 179.426, 127.273, 70.3349, 134.928, 48.3254, 119.617, 30.622 )
 uv = PoolVector2Array( 89.9521, 16.268, 77.5119, 15.7895, 55.5023, 25.8373, 39.2344, 29.1866, 33.9712, 59.3302, 27.2727, 154.545, 29.1865, 180.861, 33.4928, 196.172, 20.5741, 240.67, 36.842, 321.531, 61.244, 359.809, 125.837, 353.11, 137.799, 309.569, 122.967, 287.56, 106.22, 202.871, 92.3444, 191.866, 91.866, 179.426, 127.273, 70.3349, 134.928, 48.3254, 119.617, 30.622 )
 polygons = [ PoolIntArray( 3, 2, 1, 0, 19, 18, 17, 4 ), PoolIntArray( 4, 5, 16, 17 ), PoolIntArray( 16, 15, 7, 6 ), PoolIntArray( 16, 6, 5 ), PoolIntArray( 7, 8, 14, 15 ), PoolIntArray( 14, 13, 9, 8 ), PoolIntArray( 13, 12, 11, 10, 9 ) ]
 polygons = [ PoolIntArray( 3, 2, 1, 0, 19, 18, 17, 4 ), PoolIntArray( 4, 5, 16, 17 ), PoolIntArray( 16, 15, 7, 6 ), PoolIntArray( 16, 6, 5 ), PoolIntArray( 7, 8, 14, 15 ), PoolIntArray( 14, 13, 9, 8 ), PoolIntArray( 13, 12, 11, 10, 9 ) ]
-bones = [ NodePath("Hip"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/RightArm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/RightArm/RightForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/RightArm/RightForearm/RightHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/Head/Chin"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/Chest/LeftArm"), PoolRealArray( 1, 1, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1, 1, 1 ), NodePath("Hip/Chest/LeftArm/LeftForearm"), PoolRealArray( 0, 0, 0, 0, 0, 0, 1, 1, 1, 0.5, 0, 0, 0, 0.5, 1, 1, 0.5, 0, 0, 0 ), NodePath("Hip/Chest/LeftArm/LeftForearm/LeftHand"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/LeftLeg/LeftLowerLeg/LeftFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg/RightLowerLeg"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), NodePath("Hip/RightLeg/RightLowerLeg/RightFoot"), PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
+bones = [ "Hip", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/RightArm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/RightArm/RightForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/RightArm/RightForearm/RightHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/Head/Chin", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/Chest/LeftArm", PoolRealArray( 1, 1, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1, 1, 1 ), "Hip/Chest/LeftArm/LeftForearm", PoolRealArray( 0, 0, 0, 0, 0, 0, 1, 1, 1, 0.5, 0, 0, 0, 0.5, 1, 1, 0.5, 0, 0, 0 ), "Hip/Chest/LeftArm/LeftForearm/LeftHand", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/LeftLeg/LeftLowerLeg/LeftFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg/RightLowerLeg", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "Hip/RightLeg/RightLowerLeg/RightFoot", PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ]
 internal_vertex_count = 20
 internal_vertex_count = 20
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]

+ 2 - 0
2d/tween/main.gd

@@ -1,5 +1,6 @@
 extends Control
 extends Control
 
 
+
 const trans_list = ["Linear", "Sine", "Quint", "Quart", "Quad", "Expo", "Elastic", "Cubic", "Circ", "Bounce", "Back"]
 const trans_list = ["Linear", "Sine", "Quint", "Quart", "Quad", "Expo", "Elastic", "Cubic", "Circ", "Bounce", "Back"]
 const eases_list = ["In", "Out", "InOut", "OutIn"]
 const eases_list = ["In", "Out", "InOut", "OutIn"]
 const modes_list = ["Move", "Color", "Scale", "Rotate", "Callback", "Follow", "Repeat", "Pause"]
 const modes_list = ["Move", "Color", "Scale", "Rotate", "Callback", "Follow", "Repeat", "Pause"]
@@ -29,6 +30,7 @@ onready var follow_mode = modes_vbox.get_node(@"Follow")
 onready var repeat_mode = modes_vbox.get_node(@"Repeat")
 onready var repeat_mode = modes_vbox.get_node(@"Repeat")
 onready var paused_mode = modes_vbox.get_node(@"Pause")
 onready var paused_mode = modes_vbox.get_node(@"Pause")
 
 
+
 func _ready():
 func _ready():
 	for index in range(trans_list.size()):
 	for index in range(trans_list.size()):
 		trans_vbox.get_node(trans_list[index]).connect("pressed", self, "on_trans_changed", [index])
 		trans_vbox.get_node(trans_list[index]).connect("pressed", self, "on_trans_changed", [index])

+ 10 - 10
2d/tween/main.tscn

@@ -91,8 +91,8 @@ custom_constants/separation = 20
 alignment = 1
 alignment = 1
 
 
 [node name="Modes" type="VBoxContainer" parent="Controls"]
 [node name="Modes" type="VBoxContainer" parent="Controls"]
-margin_left = 37.0
-margin_right = 110.0
+margin_left = 23.0
+margin_right = 96.0
 margin_bottom = 383.0
 margin_bottom = 383.0
 rect_min_size = Vector2( 70, 0 )
 rect_min_size = Vector2( 70, 0 )
 size_flags_vertical = 0
 size_flags_vertical = 0
@@ -178,8 +178,8 @@ toggle_mode = true
 text = "pause"
 text = "pause"
 
 
 [node name="Transitions" type="VBoxContainer" parent="Controls"]
 [node name="Transitions" type="VBoxContainer" parent="Controls"]
-margin_left = 130.0
-margin_right = 215.0
+margin_left = 116.0
+margin_right = 201.0
 margin_bottom = 518.0
 margin_bottom = 518.0
 rect_min_size = Vector2( 70, 0 )
 rect_min_size = Vector2( 70, 0 )
 size_flags_vertical = 0
 size_flags_vertical = 0
@@ -283,8 +283,8 @@ toggle_mode = true
 text = "back"
 text = "back"
 
 
 [node name="Eases" type="VBoxContainer" parent="Controls"]
 [node name="Eases" type="VBoxContainer" parent="Controls"]
-margin_left = 235.0
-margin_right = 305.0
+margin_left = 221.0
+margin_right = 291.0
 margin_bottom = 203.0
 margin_bottom = 203.0
 rect_min_size = Vector2( 70, 0 )
 rect_min_size = Vector2( 70, 0 )
 size_flags_vertical = 0
 size_flags_vertical = 0
@@ -334,7 +334,7 @@ toggle_mode = true
 text = "out_in"
 text = "out_in"
 
 
 [node name="ColorFrom" type="VBoxContainer" parent="Controls"]
 [node name="ColorFrom" type="VBoxContainer" parent="Controls"]
-margin_left = 325.0
+margin_left = 311.0
 margin_right = 646.0
 margin_right = 646.0
 margin_bottom = 570.0
 margin_bottom = 570.0
 rect_min_size = Vector2( 320, 570 )
 rect_min_size = Vector2( 320, 570 )
@@ -349,7 +349,7 @@ text = "Color From:"
 
 
 [node name="ColorPicker" type="ColorPicker" parent="Controls/ColorFrom"]
 [node name="ColorPicker" type="ColorPicker" parent="Controls/ColorFrom"]
 margin_top = 27.0
 margin_top = 27.0
-margin_right = 321.0
+margin_right = 335.0
 margin_bottom = 539.0
 margin_bottom = 539.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 2
 size_flags_vertical = 2
@@ -359,7 +359,7 @@ __meta__ = {
 
 
 [node name="ColorTo" type="VBoxContainer" parent="Controls"]
 [node name="ColorTo" type="VBoxContainer" parent="Controls"]
 margin_left = 666.0
 margin_left = 666.0
-margin_right = 987.0
+margin_right = 1001.0
 margin_bottom = 570.0
 margin_bottom = 570.0
 rect_min_size = Vector2( 320, 570 )
 rect_min_size = Vector2( 320, 570 )
 rect_clip_content = true
 rect_clip_content = true
@@ -374,7 +374,7 @@ text = "Color To:"
 
 
 [node name="ColorPicker" type="ColorPicker" parent="Controls/ColorTo"]
 [node name="ColorPicker" type="ColorPicker" parent="Controls/ColorTo"]
 margin_top = 27.0
 margin_top = 27.0
-margin_right = 321.0
+margin_right = 335.0
 margin_bottom = 539.0
 margin_bottom = 539.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 2
 size_flags_vertical = 2

+ 1 - 0
3d/global_illumination/camera.gd

@@ -1,5 +1,6 @@
 extends Camera
 extends Camera
 
 
+
 const MOUSE_SENSITIVITY = 0.002
 const MOUSE_SENSITIVITY = 0.002
 const MOVE_SPEED = 1.5
 const MOVE_SPEED = 1.5
 
 

+ 10 - 8
3d/global_illumination/test.gd

@@ -1,5 +1,6 @@
 extends Spatial
 extends Spatial
 
 
+
 enum GIMode {
 enum GIMode {
 	NONE,
 	NONE,
 	BAKED_LIGHTMAP_ALL,
 	BAKED_LIGHTMAP_ALL,
@@ -8,6 +9,13 @@ enum GIMode {
 	MAX,  # Maximum value of the enum, used internally.
 	MAX,  # Maximum value of the enum, used internally.
 }
 }
 
 
+enum ReflectionProbeMode {
+	NONE,
+	ONCE,
+	ALWAYS,
+	MAX,
+}
+
 # Keep this in sync with the GIMode enum (except for MAX).
 # Keep this in sync with the GIMode enum (except for MAX).
 const GI_MODE_TEXTS = [
 const GI_MODE_TEXTS = [
 	"Environment Lighting (Fastest)",
 	"Environment Lighting (Fastest)",
@@ -16,13 +24,6 @@ const GI_MODE_TEXTS = [
 	"GIProbe (Slow)",
 	"GIProbe (Slow)",
 ]
 ]
 
 
-enum ReflectionProbeMode {
-	NONE,
-	ONCE,
-	ALWAYS,
-	MAX,
-}
-
 # Keep this in sync with the ReflectionProbeMode enum (except for MAX).
 # Keep this in sync with the ReflectionProbeMode enum (except for MAX).
 const REFLECTION_PROBE_MODE_TEXTS = [
 const REFLECTION_PROBE_MODE_TEXTS = [
 	"Disabled - Using environment, VoxelGI or SDFGI reflections (Fastest)",
 	"Disabled - Using environment, VoxelGI or SDFGI reflections (Fastest)",
@@ -37,6 +38,7 @@ var use_ssao = false
 onready var environment = preload("res://default_env.tres")
 onready var environment = preload("res://default_env.tres")
 onready var gi_mode_label = $GIMode
 onready var gi_mode_label = $GIMode
 onready var reflection_probe_mode_label = $ReflectionProbeMode
 onready var reflection_probe_mode_label = $ReflectionProbeMode
+onready var ssao_label = $SSAO
 onready var reflection_probe = $Camera/ReflectiveSphere/ReflectionProbe
 onready var reflection_probe = $Camera/ReflectiveSphere/ReflectionProbe
 
 
 
 
@@ -141,6 +143,6 @@ func set_reflection_probe_mode(p_reflection_probe_mode):
 
 
 func set_use_ssao(p_use_ssao):
 func set_use_ssao(p_use_ssao):
 	use_ssao = p_use_ssao
 	use_ssao = p_use_ssao
-	reflection_probe_mode_label.text = "Screen-space ambient occlusion: %s" % "Enabled (Slow)" if use_ssao else "Disabled (Fastest)"
+	ssao_label.text = "Screen-space ambient occlusion: %s" % "Enabled (Slow)" if use_ssao else "Disabled (Fastest)"
 
 
 	environment.ssao_enabled = use_ssao
 	environment.ssao_enabled = use_ssao

+ 6 - 4
3d/global_illumination/test.tscn

@@ -167,11 +167,13 @@ text = "Screen-space ambient occlusion: Disabled (Fastest)"
 anchor_top = 1.0
 anchor_top = 1.0
 anchor_bottom = 1.0
 anchor_bottom = 1.0
 margin_left = 16.0
 margin_left = 16.0
-margin_top = -50.0
+margin_top = -89.0
 margin_right = 496.0
 margin_right = 496.0
-margin_bottom = -16.0
+margin_bottom = -15.0
 custom_constants/line_spacing = 6
 custom_constants/line_spacing = 6
-text = "Press Space to cycle between GI modes, R to cycle reflection probe modes
-Press Esc or F10 to toggle mouse capture"
+text = "Space: Cycle between GI modes
+R: Cycle reflection probe modes
+F: Cycle between screen-space lighting effect modes
+Escape or F10: Toggle mouse capture"
 
 
 [editable path="GlowingBox"]
 [editable path="GlowingBox"]

+ 1 - 0
3d/ik/addons/sade/ik_look_at.gd

@@ -1,6 +1,7 @@
 tool
 tool
 extends Spatial
 extends Spatial
 
 
+
 export(NodePath) var skeleton_path setget _set_skeleton_path
 export(NodePath) var skeleton_path setget _set_skeleton_path
 export(String) var bone_name = ""
 export(String) var bone_name = ""
 export(int, "_process", "_physics_process", "_notification", "none") var update_mode = 0 setget _set_update
 export(int, "_process", "_physics_process", "_notification", "none") var update_mode = 0 setget _set_update

+ 1 - 0
3d/ik/addons/sade/plugin_main.gd

@@ -1,6 +1,7 @@
 tool
 tool
 extends EditorPlugin
 extends EditorPlugin
 
 
+
 func _enter_tree():
 func _enter_tree():
 	# Plugin Initialization here!
 	# Plugin Initialization here!
 	add_custom_type("IK_LookAt", "Spatial", preload("ik_look_at.gd"), preload("ik_look_at.png"))
 	add_custom_type("IK_LookAt", "Spatial", preload("ik_look_at.gd"), preload("ik_look_at.png"))

+ 1 - 0
3d/ik/button_change_scene.gd

@@ -1,5 +1,6 @@
 extends Button
 extends Button
 
 
+
 export(String, FILE) var scene_to_change_to = null
 export(String, FILE) var scene_to_change_to = null
 
 
 
 

+ 2 - 0
3d/ik/fabrik_ik.tscn

@@ -60,6 +60,7 @@ __meta__ = {
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Head"
 bone_name = "Head"
 additional_rotation = Vector3( 90, 0, 0 )
 additional_rotation = Vector3( 90, 0, 0 )
+additional_bone_length = 1
 
 
 [node name="IK_FABRIK_Left_Arm" type="Spatial" parent="Camera/Targets"]
 [node name="IK_FABRIK_Left_Arm" type="Spatial" parent="Camera/Targets"]
 script = ExtResource( 8 )
 script = ExtResource( 8 )
@@ -121,6 +122,7 @@ __meta__ = {
 skeleton_path = NodePath("../../../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Right_Hand"
 bone_name = "Right_Hand"
 additional_rotation = Vector3( 0, 0, 90 )
 additional_rotation = Vector3( 0, 0, 90 )
+additional_bone_length = 1
 
 
 [node name="MiddleJoint" type="Spatial" parent="Camera/Targets/IK_FABRIK_Right_Arm"]
 [node name="MiddleJoint" type="Spatial" parent="Camera/Targets/IK_FABRIK_Right_Arm"]
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -6.34515, 0, -3.7843 )
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -6.34515, 0, -3.7843 )

+ 1 - 0
3d/ik/fps/example_player.gd

@@ -1,5 +1,6 @@
 extends KinematicBody
 extends KinematicBody
 
 
+
 # Walking variables.
 # Walking variables.
 const norm_grav = -38.8
 const norm_grav = -38.8
 const MAX_SPEED = 22
 const MAX_SPEED = 22

+ 4 - 1
3d/ik/fps/fps_example.tscn

@@ -477,6 +477,7 @@ skeleton_path = NodePath("../../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Chest"
 bone_name = "Chest"
 look_at_axis = 2
 look_at_axis = 2
 additional_rotation = Vector3( -10, 0, 0 )
 additional_rotation = Vector3( -10, 0, 0 )
+additional_bone_length = 1
 
 
 [node name="Camera" type="Camera" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest"]
 [node name="Camera" type="Camera" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest"]
 transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0 )
 transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0 )
@@ -509,6 +510,7 @@ skeleton_path = NodePath("../../../../../../../../GodotBattleBot/Armature/Skelet
 bone_name = "Left_Hand"
 bone_name = "Left_Hand"
 use_negative_our_rot = true
 use_negative_our_rot = true
 additional_rotation = Vector3( 0, 0, 90 )
 additional_rotation = Vector3( 0, 0, 90 )
+additional_bone_length = 1
 
 
 [node name="MiddleJoint" type="Spatial" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest/AimPos/IK_FABRIK"]
 [node name="MiddleJoint" type="Spatial" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest/AimPos/IK_FABRIK"]
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5.85263, -2.91316, -2.77555 )
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5.85263, -2.91316, -2.77555 )
@@ -530,7 +532,6 @@ __meta__ = {
 skeleton_path = NodePath("../../../../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../../../../GodotBattleBot/Armature/Skeleton")
 bones_in_chain = PoolStringArray( "Right_UpperArm", "Right_LowerArm", "Right_Hand" )
 bones_in_chain = PoolStringArray( "Right_UpperArm", "Right_LowerArm", "Right_Hand" )
 bones_in_chain_lengths = PoolRealArray( 1.97, 3, 0.1 )
 bones_in_chain_lengths = PoolRealArray( 1.97, 3, 0.1 )
-chain_iterations = 8
 limit_chain_iterations = false
 limit_chain_iterations = false
 use_middle_joint_target = true
 use_middle_joint_target = true
 
 
@@ -547,6 +548,7 @@ skeleton_path = NodePath("../../../../../../../../GodotBattleBot/Armature/Skelet
 bone_name = "Right_Hand"
 bone_name = "Right_Hand"
 use_negative_our_rot = true
 use_negative_our_rot = true
 additional_rotation = Vector3( 0, 0, 90 )
 additional_rotation = Vector3( 0, 0, 90 )
+additional_bone_length = 1
 
 
 [node name="MiddleJoint" type="Spatial" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest/AimPos/IK_FABRIK_RightArm"]
 [node name="MiddleJoint" type="Spatial" parent="KinematicBody/CameraHolder/LeanPath/PathFollow/IK_LookAt_Chest/AimPos/IK_FABRIK_RightArm"]
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.73318, -2.91316, -2.77555 )
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.73318, -2.91316, -2.77555 )
@@ -570,6 +572,7 @@ __meta__ = {
 }
 }
 skeleton_path = NodePath("../../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Head"
 bone_name = "Head"
+additional_bone_length = 1
 
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="KinematicBody/CameraHolder"]
 [node name="AnimationPlayer" type="AnimationPlayer" parent="KinematicBody/CameraHolder"]
 autoplay = "Start"
 autoplay = "Start"

+ 1 - 0
3d/ik/fps/simple_bullet.gd

@@ -1,5 +1,6 @@
 extends RigidBody
 extends RigidBody
 
 
+
 const DESPAWN_TIME = 5
 const DESPAWN_TIME = 5
 
 
 var timer = 0
 var timer = 0

+ 1 - 0
3d/ik/fps/weapon_pistol.dae.import

@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
 materials/location=0
 materials/location=0
 materials/storage=0
 materials/storage=0
 materials/keep_on_reimport=true
 materials/keep_on_reimport=true
+meshes/octahedral_compression=true
 meshes/compress=true
 meshes/compress=true
 meshes/ensure_tangents=true
 meshes/ensure_tangents=true
 meshes/storage=0
 meshes/storage=0

+ 3 - 0
3d/ik/look_at_ik.tscn

@@ -50,6 +50,7 @@ __meta__ = {
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Head"
 bone_name = "Head"
 additional_rotation = Vector3( 90, 0, 0 )
 additional_rotation = Vector3( 90, 0, 0 )
+additional_bone_length = 1
 
 
 [node name="IK_LookAt_LeftArm" type="Spatial" parent="Camera/Targets"]
 [node name="IK_LookAt_LeftArm" type="Spatial" parent="Camera/Targets"]
 script = ExtResource( 6 )
 script = ExtResource( 6 )
@@ -58,6 +59,7 @@ __meta__ = {
 }
 }
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Left_UpperArm"
 bone_name = "Left_UpperArm"
+additional_bone_length = 1
 
 
 [node name="IK_LookAt_RightArm" type="Spatial" parent="Camera/Targets"]
 [node name="IK_LookAt_RightArm" type="Spatial" parent="Camera/Targets"]
 script = ExtResource( 6 )
 script = ExtResource( 6 )
@@ -67,6 +69,7 @@ __meta__ = {
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Right_UpperArm"
 bone_name = "Right_UpperArm"
 additional_rotation = Vector3( 0, 0, 180 )
 additional_rotation = Vector3( 0, 0, 180 )
+additional_bone_length = 1
 
 
 [node name="Control" type="Control" parent="."]
 [node name="Control" type="Control" parent="."]
 anchor_right = 1.0
 anchor_right = 1.0

+ 1 - 0
3d/ik/model/godot_battle_bot.dae.import

@@ -20,6 +20,7 @@ nodes/use_legacy_names=false
 materials/location=0
 materials/location=0
 materials/storage=0
 materials/storage=0
 materials/keep_on_reimport=true
 materials/keep_on_reimport=true
+meshes/octahedral_compression=true
 meshes/compress=true
 meshes/compress=true
 meshes/ensure_tangents=true
 meshes/ensure_tangents=true
 meshes/storage=0
 meshes/storage=0

+ 1 - 1
3d/ik/project.godot

@@ -25,7 +25,7 @@ window/stretch/aspect="expand"
 
 
 [editor_plugins]
 [editor_plugins]
 
 
-enabled=PoolStringArray( "res://addons/sade/plugin.cfg" )
+enabled=PoolStringArray(  )
 
 
 [rendering]
 [rendering]
 
 

+ 1 - 0
3d/ik/skeleton_ik.tscn

@@ -53,6 +53,7 @@ __meta__ = {
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 skeleton_path = NodePath("../../../GodotBattleBot/Armature/Skeleton")
 bone_name = "Head"
 bone_name = "Head"
 additional_rotation = Vector3( 90, 0, 0 )
 additional_rotation = Vector3( 90, 0, 0 )
+additional_bone_length = 1
 
 
 [node name="1MeterCube" type="MeshInstance" parent="Camera/Targets"]
 [node name="1MeterCube" type="MeshInstance" parent="Camera/Targets"]
 mesh = SubResource( 3 )
 mesh = SubResource( 3 )

Some files were not shown because too many files changed in this diff