Explorar o código

Update 3D Platformer for 4.0 (#770)

Jonathan Nicholl %!s(int64=2) %!d(string=hai) anos
pai
achega
35f9517ea8
Modificáronse 100 ficheiros con 1432 adicións e 557 borrados
  1. 2 3
      3d/platformer/README.md
  2. 4 2
      3d/platformer/coin/coin.gd
  3. 0 20
      3d/platformer/coin/coin.tscn
  4. 10 0
      3d/platformer/coin/coin_material.tres
  5. 5 2
      3d/platformer/coin/sound_coin.wav.import
  6. 1 39
      3d/platformer/default_bus_layout.tres
  7. 16 7
      3d/platformer/default_env.tres
  8. 46 38
      3d/platformer/enemy/enemy.gd
  9. BIN=BIN
      3d/platformer/enemy/enemy.glb
  10. 49 0
      3d/platformer/enemy/enemy.glb.import
  11. 8 30
      3d/platformer/enemy/enemy.tscn
  12. 5 2
      3d/platformer/enemy/robot_walk.wav.import
  13. 0 38
      3d/platformer/enemy/shine.png.import
  14. 5 2
      3d/platformer/enemy/sound_explode.wav.import
  15. 5 2
      3d/platformer/enemy/sound_hit.wav.import
  16. 179 0
      3d/platformer/game.tscn
  17. BIN=BIN
      3d/platformer/icon.png
  18. 14 15
      3d/platformer/icon.png.import
  19. 0 0
      3d/platformer/particle.png
  20. 34 0
      3d/platformer/particle.png.import
  21. 16 0
      3d/platformer/particle_material.tres
  22. 2 2
      3d/platformer/player/bullet/bullet.gd
  23. 51 51
      3d/platformer/player/bullet/bullet.tscn
  24. 14 15
      3d/platformer/player/controls/osb_down.png.import
  25. 14 15
      3d/platformer/player/controls/osb_fire.png.import
  26. 14 15
      3d/platformer/player/controls/osb_jump.png.import
  27. 14 15
      3d/platformer/player/controls/osb_left.png.import
  28. 14 15
      3d/platformer/player/controls/osb_right.png.import
  29. 14 15
      3d/platformer/player/controls/osb_up.png.import
  30. 48 33
      3d/platformer/player/follow_camera.gd
  31. 102 83
      3d/platformer/player/player.gd
  32. BIN=BIN
      3d/platformer/player/player.glb
  33. 55 0
      3d/platformer/player/player.glb.import
  34. 13 33
      3d/platformer/player/player.tscn
  35. 5 2
      3d/platformer/player/sound_jump.wav.import
  36. 5 2
      3d/platformer/player/sound_shoot.wav.import
  37. 46 36
      3d/platformer/project.godot
  38. BIN=BIN
      3d/platformer/screenshots/face.png
  39. BIN=BIN
      3d/platformer/screenshots/shoot.png
  40. 4 0
      3d/platformer/stage/collision/box.tres
  41. BIN=BIN
      3d/platformer/stage/collision/corner.res
  42. BIN=BIN
      3d/platformer/stage/collision/corner_fix.res
  43. BIN=BIN
      3d/platformer/stage/collision/corner_fixr.res
  44. BIN=BIN
      3d/platformer/stage/collision/floor_corner.res
  45. BIN=BIN
      3d/platformer/stage/collision/floor_edge.res
  46. BIN=BIN
      3d/platformer/stage/collision/ramp.res
  47. 4 0
      3d/platformer/stage/collision/trunk.tres
  48. BIN=BIN
      3d/platformer/stage/collision/trunk_deco.res
  49. 0 25
      3d/platformer/stage/floor_mesh.tres
  50. BIN=BIN
      3d/platformer/stage/grid_map.scn
  51. BIN=BIN
      3d/platformer/stage/meshes/ceiling.res
  52. BIN=BIN
      3d/platformer/stage/meshes/ceiling_corner.res
  53. BIN=BIN
      3d/platformer/stage/meshes/ceiling_wall.res
  54. BIN=BIN
      3d/platformer/stage/meshes/corner.res
  55. BIN=BIN
      3d/platformer/stage/meshes/corner_fix.res
  56. BIN=BIN
      3d/platformer/stage/meshes/corner_fixr.res
  57. BIN=BIN
      3d/platformer/stage/meshes/corner_floor.res
  58. BIN=BIN
      3d/platformer/stage/meshes/floor.res
  59. BIN=BIN
      3d/platformer/stage/meshes/floor_corner.res
  60. BIN=BIN
      3d/platformer/stage/meshes/floor_edge.res
  61. BIN=BIN
      3d/platformer/stage/meshes/previews/ceiling.png
  62. 34 0
      3d/platformer/stage/meshes/previews/ceiling.png.import
  63. BIN=BIN
      3d/platformer/stage/meshes/previews/ceiling_corner.png
  64. 34 0
      3d/platformer/stage/meshes/previews/ceiling_corner.png.import
  65. BIN=BIN
      3d/platformer/stage/meshes/previews/ceiling_wall.png
  66. 34 0
      3d/platformer/stage/meshes/previews/ceiling_wall.png.import
  67. BIN=BIN
      3d/platformer/stage/meshes/previews/corner.png
  68. 34 0
      3d/platformer/stage/meshes/previews/corner.png.import
  69. BIN=BIN
      3d/platformer/stage/meshes/previews/corner_fix.png
  70. 36 0
      3d/platformer/stage/meshes/previews/corner_fix.png.import
  71. BIN=BIN
      3d/platformer/stage/meshes/previews/corner_fixr.png
  72. 34 0
      3d/platformer/stage/meshes/previews/corner_fixr.png.import
  73. BIN=BIN
      3d/platformer/stage/meshes/previews/corner_floor.png
  74. 34 0
      3d/platformer/stage/meshes/previews/corner_floor.png.import
  75. BIN=BIN
      3d/platformer/stage/meshes/previews/floor.png
  76. 34 0
      3d/platformer/stage/meshes/previews/floor.png.import
  77. BIN=BIN
      3d/platformer/stage/meshes/previews/floor_corner.png
  78. 34 0
      3d/platformer/stage/meshes/previews/floor_corner.png.import
  79. BIN=BIN
      3d/platformer/stage/meshes/previews/floor_edge.png
  80. 34 0
      3d/platformer/stage/meshes/previews/floor_edge.png.import
  81. BIN=BIN
      3d/platformer/stage/meshes/previews/ramp.png
  82. 34 0
      3d/platformer/stage/meshes/previews/ramp.png.import
  83. BIN=BIN
      3d/platformer/stage/meshes/previews/tree_top.png
  84. 34 0
      3d/platformer/stage/meshes/previews/tree_top.png.import
  85. BIN=BIN
      3d/platformer/stage/meshes/previews/trunk.png
  86. 34 0
      3d/platformer/stage/meshes/previews/trunk.png.import
  87. BIN=BIN
      3d/platformer/stage/meshes/previews/trunk_deco.png
  88. 34 0
      3d/platformer/stage/meshes/previews/trunk_deco.png.import
  89. BIN=BIN
      3d/platformer/stage/meshes/previews/trunk_floor.png
  90. 34 0
      3d/platformer/stage/meshes/previews/trunk_floor.png.import
  91. BIN=BIN
      3d/platformer/stage/meshes/previews/wall.png
  92. 34 0
      3d/platformer/stage/meshes/previews/wall.png.import
  93. BIN=BIN
      3d/platformer/stage/meshes/previews/wall_floor.png
  94. 34 0
      3d/platformer/stage/meshes/previews/wall_floor.png.import
  95. BIN=BIN
      3d/platformer/stage/meshes/previews/wall_var.png
  96. 34 0
      3d/platformer/stage/meshes/previews/wall_var.png.import
  97. BIN=BIN
      3d/platformer/stage/meshes/ramp.res
  98. BIN=BIN
      3d/platformer/stage/meshes/tree_top.res
  99. BIN=BIN
      3d/platformer/stage/meshes/trunk.res
  100. BIN=BIN
      3d/platformer/stage/meshes/trunk_deco.res

+ 2 - 3
3d/platformer/README.md

@@ -1,13 +1,12 @@
 # Platformer 3D
 
 3D Platformer demo using a
-[`KinematicBody`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody.html).
+[`CharacterBody3D`](https://docs.godotengine.org/en/latest/classes/class_characterbody3d.html).
 It uses similar code to the 2D platformer, but implemented in 3D.
-It also features audio reverberation (it sounds echo-y).
 
 Language: GDScript
 
-Renderer: GLES 3
+Renderer: Forward Plus
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/125
 

+ 4 - 2
3d/platformer/coin/coin.gd

@@ -1,8 +1,10 @@
 extends Area3D
 
+
 var taken = false
 
+
 func _on_coin_body_enter(body):
-	if not taken and body is preload("res://player/player.gd"):
-		get_node(^"Animation").play("take")
+	if not taken and body is Player:
+		$Animation.play(&"take")
 		taken = true

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 20
3d/platformer/coin/coin.tscn


+ 10 - 0
3d/platformer/coin/coin_material.tres

@@ -0,0 +1,10 @@
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://dp0bangabfrg"]
+
+[resource]
+albedo_color = Color(1, 0.837686, 0, 1)
+metallic = 1.0
+roughness = 0.2
+emission_enabled = true
+emission = Color(0.219922, 0.109961, 0, 1)
+anisotropy_enabled = true
+anisotropy = 1.0

+ 5 - 2
3d/platformer/coin/sound_coin.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://b23l5nfatq2d2"
 path="res://.godot/imported/sound_coin.wav-5f523c825e94d407ed9e355cbe69ab46.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 1 - 39
3d/platformer/default_bus_layout.tres

@@ -1,41 +1,3 @@
-[gd_resource type="AudioBusLayout" load_steps=4 format=2]
-
-[sub_resource type="AudioEffectReverb" id=1]
-resource_name = "Reverb"
-predelay_feedback = 0.8
-room_size = 0.33
-damping = 0.32
-hipass = 0.9
-dry = 0.0
-
-[sub_resource type="AudioEffectAmplify" id=2]
-resource_name = "Amplify"
-
-[sub_resource type="AudioEffectReverb" id=3]
-resource_name = "Reverb"
-predelay_feedback = 0.8
-room_size = 0.89
-damping = 0.17
-hipass = 0.08
-dry = 0.0
-wet = 0.2
+[gd_resource type="AudioBusLayout" format=3 uid="uid://ctpvhrx4pwr86"]
 
 [resource]
-bus/1/name = "Reverb Small"
-bus/1/solo = false
-bus/1/mute = false
-bus/1/bypass_fx = false
-bus/1/volume_db = 0.0
-bus/1/send = "Master"
-bus/1/effect/0/effect = SubResource( 1 )
-bus/1/effect/0/enabled = true
-bus/1/effect/1/effect = SubResource( 2 )
-bus/1/effect/1/enabled = true
-bus/2/name = "Reverb Large"
-bus/2/solo = false
-bus/2/mute = false
-bus/2/bypass_fx = false
-bus/2/volume_db = 0.0
-bus/2/send = "Master"
-bus/2/effect/0/effect = SubResource( 3 )
-bus/2/effect/0/enabled = true

+ 16 - 7
3d/platformer/default_env.tres

@@ -1,13 +1,22 @@
-[gd_resource type="Environment" load_steps=3 format=2]
+[gd_resource type="Environment" load_steps=4 format=3 uid="uid://odyhne6bhlsu"]
 
-[ext_resource path="res://stage/panorama.png" type="Texture2D" id=1]
+[ext_resource type="Texture2D" uid="uid://qdur4kpvvtdg" path="res://stage/panorama.png" id="1"]
 
-[sub_resource type="PanoramaSkyMaterial" id=1]
-radiance_size = 1
-panorama = ExtResource( 1 )
+[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_3qare"]
+panorama = ExtResource("1")
+
+[sub_resource type="Sky" id="Sky_qdkmq"]
+sky_material = SubResource("PanoramaSkyMaterial_3qare")
 
 [resource]
 background_mode = 2
-background_sky = SubResource( 1 )
+sky = SubResource("Sky_qdkmq")
+ambient_light_source = 2
+ambient_light_color = Color(0.6, 0.6, 0.6, 1)
+ambient_light_sky_contribution = 0.0
 tonemap_mode = 2
-tonemap_white = 6.0
+ssao_enabled = true
+glow_enabled = true
+glow_intensity = 0.5
+glow_strength = 1.2
+glow_blend_mode = 1

+ 46 - 38
3d/platformer/enemy/enemy.gd

@@ -1,74 +1,82 @@
-extends RigidDynamicBody3D
+extends RigidBody3D
+
 
 const ACCEL = 5.0
 const DEACCEL = 20.0
 const MAX_SPEED = 2.0
 const ROT_SPEED = 1.0
 
-var prev_advance = false
-var dying = false
+var prev_advance := false
+var dying := false
 var rot_dir = 4
 
-@onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
+@onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") \
+		* ProjectSettings.get_setting("physics/3d/default_gravity_vector")
+
+@onready var _animation_player := $Enemy/AnimationPlayer as AnimationPlayer
+@onready var _ray_floor := $Enemy/Skeleton/RayFloor as RayCast3D
+@onready var _ray_wall := $Enemy/Skeleton/RayWall as RayCast3D
 
 
-func _integrate_forces(state):
-	var delta = state.get_step()
-	var lv = state.get_linear_velocity()
-	var g = state.get_total_gravity()
+func _integrate_forces(state: PhysicsDirectBodyState3D):
+	var delta := state.get_step()
+	var lin_velocity := state.get_linear_velocity()
+	var grav := state.get_total_gravity()
 	# get_total_gravity returns zero for the first few frames, leading to errors.
-	if g == Vector3.ZERO:
-		g = gravity
+	if grav.is_zero_approx():
+		grav = self.gravity
 
-	lv += g * delta # Apply gravity.
-	var up = -g.normalized()
+	lin_velocity += grav * delta # Apply gravity.
+	var up := -grav.normalized()
 
 	if dying:
-		state.set_linear_velocity(lv)
+		state.set_linear_velocity(lin_velocity)
 		return
 
-	for i in range(state.get_contact_count()):
-		var cc = state.get_contact_collider_object(i)
-		var dp = state.get_contact_local_normal(i)
+	for i in state.get_contact_count():
+		var contact_collider := state.get_contact_collider_object(i)
+		var contact_normal := state.get_contact_local_normal(i)
 
-		if cc:
-			if cc is preload("res://player/bullet/bullet.gd") and cc.enabled:
-				set_mode(MODE_RIGID)
+		if is_instance_valid(contact_collider):
+			if contact_collider is Bullet and contact_collider.enabled:
 				dying = true
-				state.set_angular_velocity(-dp.cross(up).normalized() * 33.0)
-				get_node(^"AnimationPlayer").play("impact")
-				get_node(^"AnimationPlayer").queue("explode")
-				cc.enabled = false
-				get_node(^"SoundHit").play()
+				axis_lock_angular_x = false
+				axis_lock_angular_y = false
+				axis_lock_angular_z = false
+				collision_layer = 0
+				state.set_angular_velocity(-contact_normal.cross(up).normalized() * 33.0)
+				_animation_player.play(&"impact")
+				_animation_player.queue(&"extra/explode")
+				contact_collider.enabled = false
+				$SoundWalkLoop.stop()
+				$SoundHit.play()
 				return
 
-	var col_floor = get_node(^"Armature/RayFloor").is_colliding()
-	var col_wall = get_node(^"Armature/RayWall").is_colliding()
-
-	var advance = col_floor and not col_wall
+	var advance := _ray_floor.is_colliding() and not _ray_wall.is_colliding()
 
-	var dir = get_node(^"Armature").get_transform().basis[2].normalized()
-	var deaccel_dir = dir
+	var dir := ($Enemy/Skeleton as Node3D).get_transform().basis[2].normalized()
+	var deaccel_dir := dir
 
 	if advance:
-		if dir.dot(lv) < MAX_SPEED:
-			lv += dir * ACCEL * delta
-		deaccel_dir = dir.cross(g).normalized()
+		if dir.dot(lin_velocity) < MAX_SPEED:
+			lin_velocity += dir * ACCEL * delta
+		deaccel_dir = dir.cross(gravity).normalized()
 	else:
 		if prev_advance:
 			rot_dir = 1
 
-		dir = Basis(up, rot_dir * ROT_SPEED * (delta) * dir)
-		get_node(^"Armature").set_transform(Transform3D().looking_at(-dir, up))
+		dir = Basis(up, rot_dir * ROT_SPEED * (delta)) * dir
+		$Enemy/Skeleton.set_transform(Transform3D().looking_at(-dir, up))
 
-	var dspeed = deaccel_dir.dot(lv)
+	var dspeed := deaccel_dir.dot(lin_velocity)
 	dspeed -= DEACCEL * delta
 	if dspeed < 0:
 		dspeed = 0
 
-	lv = lv - deaccel_dir * deaccel_dir.dot(lv) + deaccel_dir * dspeed
+	lin_velocity = lin_velocity - deaccel_dir * deaccel_dir.dot(lin_velocity) \
+			+ deaccel_dir * dspeed
 
-	state.set_linear_velocity(lv)
+	state.set_linear_velocity(lin_velocity)
 	prev_advance = advance
 
 

BIN=BIN
3d/platformer/enemy/enemy.glb


+ 49 - 0
3d/platformer/enemy/enemy.glb.import

@@ -0,0 +1,49 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://51yuwlr5tgi0"
+path="res://.godot/imported/enemy.glb-d895c1723b6b5633e6a9ea1829adeaa2.scn"
+
+[deps]
+
+source_file="res://enemy/enemy.glb"
+dest_files=["res://.godot/imported/enemy.glb-d895c1723b6b5633e6a9ea1829adeaa2.scn"]
+
+[params]
+
+nodes/root_type="Node3D"
+nodes/root_name="Enemy"
+nodes/root_scale=1.0
+meshes/ensure_tangents=true
+meshes/generate_lods=true
+meshes/create_shadow_meshes=true
+meshes/light_baking=3
+meshes/lightmap_texel_size=0.2
+skins/use_named_skins=true
+animation/import=true
+animation/fps=30
+import_script/path=""
+_subresources={
+"animations": {
+"falling": {
+"settings/loop_mode": 1
+},
+"idle": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+},
+"run": {
+"settings/loop_mode": 1
+},
+"walk": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+}
+}
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 8 - 30
3d/platformer/enemy/enemy.tscn


+ 5 - 2
3d/platformer/enemy/robot_walk.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://bqpmm2b3otsvp"
 path="res://.godot/imported/robot_walk.wav-e477aac8926497af29eed244f64833e8.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=true
+edit/loop_mode=2
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 0 - 38
3d/platformer/enemy/shine.png.import

@@ -1,38 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture2D"
-path.s3tc="res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.s3tc.stex"
-path.etc2="res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.etc2.stex"
-path.etc="res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.etc.stex"
-metadata={
-"imported_formats": ["s3tc", "etc2", "etc"],
-"vram_texture": true
-}
-
-[deps]
-
-source_file="res://enemy/shine.png"
-dest_files=["res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.s3tc.stex", "res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.etc2.stex", "res://.godot/imported/shine.png-4170bd0cee6f5d251a3f551d4acf3e6c.etc.stex"]
-
-[params]
-
-compress/mode=2
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=true
-flags/filter=true
-flags/mipmaps=true
-flags/anisotropic=false
-flags/srgb=1
-process/fix_alpha_border=true
-process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0

+ 5 - 2
3d/platformer/enemy/sound_explode.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://4d5gwju5ipd3"
 path="res://.godot/imported/sound_explode.wav-38875bfce76147e228902e26b716f579.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 5 - 2
3d/platformer/enemy/sound_hit.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://bb3j3700yjir8"
 path="res://.godot/imported/sound_hit.wav-954732368f39d5a47e196d428c1ff53a.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 179 - 0
3d/platformer/game.tscn

@@ -0,0 +1,179 @@
+[gd_scene load_steps=9 format=3 uid="uid://d0lrpf3mmjdsx"]
+
+[ext_resource type="PackedScene" uid="uid://dohp772jyjxb7" path="res://stage/stage.tscn" id="1_ybvw5"]
+[ext_resource type="PackedScene" uid="uid://dfxo2jwbj4aeh" path="res://coin/coin.tscn" id="2_chew2"]
+[ext_resource type="PackedScene" uid="uid://o5q0hy6cg6nt" path="res://enemy/enemy.tscn" id="3_nhwvs"]
+[ext_resource type="PackedScene" uid="uid://cc4idhykjp5f5" path="res://player/player.tscn" id="4_ray4s"]
+
+[sub_resource type="PhysicsMaterial" id="1"]
+friction = 0.0
+
+[sub_resource type="PhysicsMaterial" id="2"]
+friction = 0.0
+
+[sub_resource type="PhysicsMaterial" id="3"]
+friction = 0.0
+
+[sub_resource type="PhysicsMaterial" id="4"]
+friction = 0.0
+
+[node name="Game" type="Node3D"]
+
+[node name="Stage" parent="." instance=ExtResource("1_ybvw5")]
+
+[node name="Coins" type="Node3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, -6, -12)
+
+[node name="Coin1" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.5311, 2.85075, 5.24675)
+
+[node name="Coin2" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.5311, 2.85075, 7.24675)
+
+[node name="Coin3" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.5311, 2.85075, 5.24675)
+
+[node name="Coin44" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.5311, 2.85075, 7.24675)
+
+[node name="Coin4" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 11.28, 11.0239)
+
+[node name="Coin42" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 11.28, 13.0239)
+
+[node name="Coin43" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 11.28, 11.0239)
+
+[node name="Coin33" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 11.28, 13.0239)
+
+[node name="Coin5" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 12.9027, 11.03)
+
+[node name="Coin41" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 12.9027, 13.03)
+
+[node name="Coin34" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 12.9027, 13.03)
+
+[node name="Coin40" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 12.9027, 11.03)
+
+[node name="Coin6" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 11.28, 15.0922)
+
+[node name="Coin39" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 11.28, 17.0922)
+
+[node name="Coin35" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 11.28, 17.0922)
+
+[node name="Coin38" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 11.28, 15.0922)
+
+[node name="Coin37" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 12.9027, 15.0983)
+
+[node name="Coin36" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.61344, 12.9027, 17.0983)
+
+[node name="Coin32" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 12.9027, 15.0983)
+
+[node name="Coin31" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.61344, 12.9027, 17.0983)
+
+[node name="Coin7" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.057, 4.14271, 26.9338)
+
+[node name="Coin30" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.057, 4.14271, 28.9338)
+
+[node name="Coin29" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.057, 5.76534, 26.9399)
+
+[node name="Coin28" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 59.057, 5.76534, 28.9399)
+
+[node name="Coin27" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 59.057, 5.76534, 26.9399)
+
+[node name="Coin26" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 59.057, 4.14271, 28.9338)
+
+[node name="Coin25" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 59.057, 4.14271, 26.9338)
+
+[node name="Coin24" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.057, 5.76534, 28.9399)
+
+[node name="Coin8" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.0108, 6.16547, 28.8899)
+
+[node name="Coin23" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 65.0108, 7.7881, 28.896)
+
+[node name="Coin22" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.0108, 6.16547, 30.8899)
+
+[node name="Coin21" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.0108, 7.7881, 28.896)
+
+[node name="Coin20" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 65.0108, 7.7881, 30.896)
+
+[node name="Coin19" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 65.0108, 6.16547, 28.8899)
+
+[node name="Coin18" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 65.0108, 6.16547, 30.8899)
+
+[node name="Coin17" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.0108, 7.7881, 30.896)
+
+[node name="Coin9" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51.5614, 2.98252, 23.1775)
+
+[node name="Coin16" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 53.5614, 4.60515, 23.1836)
+
+[node name="Coin15" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51.5614, 2.98252, 25.1775)
+
+[node name="Coin14" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 53.5614, 2.98252, 23.1775)
+
+[node name="Coin13" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 53.5614, 4.60515, 25.1836)
+
+[node name="Coin12" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51.5614, 4.60515, 23.1836)
+
+[node name="Coin11" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 53.5614, 2.98252, 25.1775)
+
+[node name="Coin10" parent="Coins" instance=ExtResource("2_chew2")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51.5614, 4.60515, 25.1836)
+
+[node name="Enemies" type="Node3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, -6, -12)
+
+[node name="Enemy1" parent="Enemies" instance=ExtResource("3_nhwvs")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.3062, 5.40827, 5.96938)
+physics_material_override = SubResource("1")
+
+[node name="Enemy2" parent="Enemies" instance=ExtResource("3_nhwvs")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 64.1292, 5.40827, 17.1396)
+physics_material_override = SubResource("2")
+
+[node name="Enemy3" parent="Enemies" instance=ExtResource("3_nhwvs")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 64.0292, 6.70827, 29.8128)
+physics_material_override = SubResource("3")
+
+[node name="Enemy4" parent="Enemies" instance=ExtResource("3_nhwvs")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 52.6702, 5.40827, 27.7128)
+physics_material_override = SubResource("4")
+
+[node name="Player" parent="." instance=ExtResource("4_ray4s")]
+transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.49833, -1.84189, 3.9334)

BIN=BIN
3d/platformer/icon.png


+ 14 - 15
3d/platformer/icon.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
+type="CompressedTexture2D"
+uid="uid://dypbdx5dxnb7w"
+path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://icon.png"
-dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"]
+dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 0 - 0
3d/platformer/enemy/shine.png → 3d/platformer/particle.png


+ 34 - 0
3d/platformer/particle.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://y3opjgnv67r8"
+path="res://.godot/imported/particle.png-c2ba3d91e96c62035d672392a1197218.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://particle.png"
+dest_files=["res://.godot/imported/particle.png-c2ba3d91e96c62035d672392a1197218.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=true
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0

+ 16 - 0
3d/platformer/particle_material.tres

@@ -0,0 +1,16 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c1lk3srtdadr6"]
+
+[ext_resource type="Texture2D" uid="uid://y3opjgnv67r8" path="res://particle.png" id="1_ryem2"]
+
+[resource]
+transparency = 1
+blend_mode = 1
+cull_mode = 2
+shading_mode = 0
+albedo_color = Color(1, 1, 0.759137, 1)
+albedo_texture = ExtResource("1_ryem2")
+texture_filter = 0
+billboard_mode = 3
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false

+ 2 - 2
3d/platformer/player/bullet/bullet.gd

@@ -1,4 +1,4 @@
-extends RigidDynamicBody3D
+class_name Bullet extends RigidBody3D
+
 
-#warning-ignore:unused_class_variable
 var enabled = true

+ 51 - 51
3d/platformer/player/bullet/bullet.tscn

@@ -1,48 +1,37 @@
-[gd_scene load_steps=8 format=2]
+[gd_scene load_steps=10 format=3 uid="uid://0qwkkgqdb77r"]
 
-[ext_resource path="res://player/bullet/bullet.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://player/bullet/bullet.gd" id="1"]
 
-[sub_resource type="StandardMaterial3D" id=1]
-flags_transparent = true
-flags_unshaded = true
-vertex_color_use_as_albedo = true
-vertex_color_is_srgb = true
-params_blend_mode = 1
-albedo_color = Color(0.822, 0.795804, 0.513098, 1)
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4xppo"]
+albedo_color = Color(0.701961, 0.698039, 0.513726, 1)
+roughness = 0.0
+emission_enabled = true
+emission = Color(1, 0.884824, 0.513098, 1)
+emission_energy_multiplier = 0.5
 
-[sub_resource type="ArrayMesh" id=2]
-resource_name = "Sphere.001"
-surfaces/0 = {
-"aabb": AABB(-0.951057, -1, -0.951057, 1.90211, 2, 1.90211),
-"array_data": PackedByteArray(155, 187, 241, 52, 0, 0, 0, 60, 135, 36, 0, 0, 179, 184, 120, 58, 0, 0, 0, 60, 176, 98, 0, 0, 166, 182, 120, 58, 166, 182, 0, 60, 200, 98, 200, 0, 97, 185, 241, 52, 97, 185, 0, 60, 171, 36, 171, 0, 155, 187, 241, 180, 0, 0, 0, 60, 135, 220, 0, 0, 97, 185, 241, 180, 97, 185, 0, 60, 171, 220, 171, 0, 179, 184, 120, 186, 0, 0, 0, 60, 176, 158, 0, 0, 166, 182, 120, 186, 166, 182, 0, 60, 200, 158, 200, 0, 0, 0, 241, 52, 155, 187, 0, 60, 0, 36, 135, 0, 0, 0, 241, 180, 155, 187, 0, 60, 0, 220, 135, 0, 0, 0, 120, 186, 179, 184, 0, 60, 0, 158, 176, 0, 0, 0, 120, 58, 179, 184, 0, 60, 0, 98, 176, 0, 97, 57, 241, 52, 97, 185, 0, 60, 85, 36, 171, 0, 97, 57, 241, 180, 97, 185, 0, 60, 85, 220, 171, 0, 166, 54, 120, 186, 166, 182, 0, 60, 56, 158, 200, 0, 166, 54, 120, 58, 166, 182, 0, 60, 56, 98, 200, 0, 155, 59, 241, 52, 0, 0, 0, 60, 121, 36, 0, 0, 155, 59, 241, 180, 0, 0, 0, 60, 121, 220, 0, 0, 179, 56, 120, 186, 0, 0, 0, 60, 80, 158, 0, 0, 179, 56, 120, 58, 0, 0, 0, 60, 80, 98, 0, 0, 97, 57, 241, 52, 97, 57, 0, 60, 85, 36, 85, 0, 97, 57, 241, 180, 97, 57, 0, 60, 85, 220, 85, 0, 166, 54, 120, 186, 166, 54, 0, 60, 56, 158, 56, 0, 166, 54, 120, 58, 166, 54, 0, 60, 56, 98, 56, 0, 0, 0, 241, 52, 155, 59, 0, 60, 0, 36, 121, 0, 0, 0, 241, 180, 155, 59, 0, 60, 0, 220, 121, 0, 0, 0, 120, 186, 179, 56, 0, 60, 0, 158, 80, 0, 0, 0, 120, 58, 179, 56, 0, 60, 0, 98, 80, 0, 97, 185, 241, 52, 97, 57, 0, 60, 171, 36, 85, 0, 97, 185, 241, 180, 97, 57, 0, 60, 171, 220, 85, 0, 166, 182, 120, 186, 166, 54, 0, 60, 200, 158, 56, 0, 166, 182, 120, 58, 166, 54, 0, 60, 200, 98, 56, 0, 0, 0, 0, 60, 0, 0, 0, 60, 0, 127, 0, 0, 0, 0, 0, 188, 0, 0, 0, 60, 0, 130, 0, 0),
-"array_index_data": PackedByteArray(0, 0, 2, 0, 1, 0, 0, 0, 3, 0, 2, 0, 4, 0, 3, 0, 0, 0, 4, 0, 5, 0, 3, 0, 6, 0, 5, 0, 4, 0, 6, 0, 7, 0, 5, 0, 5, 0, 8, 0, 3, 0, 5, 0, 9, 0, 8, 0, 7, 0, 9, 0, 5, 0, 7, 0, 10, 0, 9, 0, 3, 0, 11, 0, 2, 0, 3, 0, 8, 0, 11, 0, 9, 0, 12, 0, 8, 0, 9, 0, 13, 0, 12, 0, 10, 0, 13, 0, 9, 0, 10, 0, 14, 0, 13, 0, 8, 0, 15, 0, 11, 0, 8, 0, 12, 0, 15, 0, 13, 0, 16, 0, 12, 0, 13, 0, 17, 0, 16, 0, 14, 0, 17, 0, 13, 0, 14, 0, 18, 0, 17, 0, 12, 0, 19, 0, 15, 0, 12, 0, 16, 0, 19, 0, 17, 0, 20, 0, 16, 0, 17, 0, 21, 0, 20, 0, 18, 0, 21, 0, 17, 0, 18, 0, 22, 0, 21, 0, 16, 0, 23, 0, 19, 0, 16, 0, 20, 0, 23, 0, 21, 0, 24, 0, 20, 0, 21, 0, 25, 0, 24, 0, 22, 0, 25, 0, 21, 0, 22, 0, 26, 0, 25, 0, 20, 0, 27, 0, 23, 0, 20, 0, 24, 0, 27, 0, 25, 0, 28, 0, 24, 0, 25, 0, 29, 0, 28, 0, 26, 0, 29, 0, 25, 0, 26, 0, 30, 0, 29, 0, 24, 0, 31, 0, 27, 0, 24, 0, 28, 0, 31, 0, 1, 0, 2, 0, 32, 0, 33, 0, 7, 0, 6, 0, 2, 0, 11, 0, 32, 0, 33, 0, 10, 0, 7, 0, 11, 0, 15, 0, 32, 0, 33, 0, 14, 0, 10, 0, 15, 0, 19, 0, 32, 0, 33, 0, 18, 0, 14, 0, 19, 0, 23, 0, 32, 0, 33, 0, 22, 0, 18, 0, 23, 0, 27, 0, 32, 0, 33, 0, 26, 0, 22, 0, 27, 0, 31, 0, 32, 0, 33, 0, 30, 0, 26, 0, 29, 0, 0, 0, 28, 0, 29, 0, 4, 0, 0, 0, 30, 0, 4, 0, 29, 0, 30, 0, 6, 0, 4, 0, 32, 0, 31, 0, 1, 0, 33, 0, 6, 0, 30, 0, 1, 0, 28, 0, 0, 0, 1, 0, 31, 0, 28, 0),
-"blend_shape_data": [],
-"format": 98051,
-"index_count": 192,
-"material": SubResource( 1 ),
-"primitive": 4,
-"skeleton_aabb": [],
-"vertex_count": 34
-}
+[sub_resource type="SphereMesh" id="SphereMesh_syslt"]
+material = SubResource("StandardMaterial3D_4xppo")
+radius = 0.25
+height = 0.5
+radial_segments = 16
+rings = 8
 
-[sub_resource type="StandardMaterial3D" id=3]
+[sub_resource type="StandardMaterial3D" id="3"]
 albedo_color = Color(0.7, 0.7, 0.7, 1)
 metallic = 0.1
 roughness = 0.0
 emission_enabled = true
 emission = Color(1, 0.884824, 0.513098, 1)
-emission_energy = 3.71
-emission_operator = 0
-emission_on_uv2 = false
+emission_energy_multiplier = 3.71
 
-[sub_resource type="Animation" id=4]
+[sub_resource type="Animation" id="4"]
 length = 2.0
 tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
 tracks/0/path = NodePath("Sphere:visible")
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
 tracks/0/keys = {
 "times": PackedFloat32Array(0, 1.5),
 "transitions": PackedFloat32Array(1, 1),
@@ -50,11 +39,11 @@ tracks/0/keys = {
 "values": [true, false]
 }
 tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
 tracks/1/path = NodePath("GPUParticles3D:emitting")
 tracks/1/interp = 1
 tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
 tracks/1/keys = {
 "times": PackedFloat32Array(0, 1.5),
 "transitions": PackedFloat32Array(1, 1),
@@ -62,53 +51,64 @@ tracks/1/keys = {
 "values": [true, false]
 }
 tracks/2/type = "method"
+tracks/2/imported = false
+tracks/2/enabled = true
 tracks/2/path = NodePath(".")
 tracks/2/interp = 1
 tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
 tracks/2/keys = {
 "times": PackedFloat32Array(2),
 "transitions": PackedFloat32Array(1),
 "values": [{
 "args": [],
-"method": "queue_free"
+"method": &"queue_free"
 }]
 }
 
-[sub_resource type="Gradient" id=5]
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_p1tyo"]
+_data = {
+"life": SubResource("4")
+}
+
+[sub_resource type="SphereMesh" id="SphereMesh_xpgba"]
+material = SubResource("StandardMaterial3D_4xppo")
+radius = 0.125
+height = 0.25
+radial_segments = 16
+rings = 8
+
+[sub_resource type="Gradient" id="5"]
 colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
 
-[sub_resource type="SphereShape3D" id=6]
+[sub_resource type="SphereShape3D" id="6"]
 radius = 0.27
 
-[node name="Bullet" type="RigidDynamicBody3D"]
+[node name="Bullet" type="RigidBody3D"]
 mass = 0.4
-script = ExtResource( 1 )
-__meta__ = {
-"__editor_plugin_screen__": "3D"
-}
+script = ExtResource("1")
 
 [node name="Sphere" type="MeshInstance3D" parent="."]
-transform = Transform3D(0.24972, 0, 0, 0, 0.24972, 0, 0, 0, 0.24972, 0.00159812, 0.0110106, 0.0045104)
-mesh = SubResource( 2 )
-surface_material_override/0 = SubResource( 3 )
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00159812, 0.0110106, 0.0045104)
+cast_shadow = 0
+mesh = SubResource("SphereMesh_syslt")
+surface_material_override/0 = SubResource("3")
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 autoplay = "life"
-anims/life = SubResource( 4 )
+libraries = {
+"": SubResource("AnimationLibrary_p1tyo")
+}
 
 [node name="GPUParticles3D" type="CPUParticles3D" parent="."]
+cast_shadow = 0
 amount = 16
 lifetime = 0.4
 fixed_fps = 60
 fract_delta = false
-local_coords = false
-mesh = SubResource( 2 )
+mesh = SubResource("SphereMesh_xpgba")
 spread = 0.0
 gravity = Vector3(0, 0, 0)
-scale_amount = 0.3
-color_ramp = SubResource( 5 )
+color_ramp = SubResource("5")
 
 [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
-shape = SubResource( 6 )
+shape = SubResource("6")

+ 14 - 15
3d/platformer/player/controls/osb_down.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_down.png-3bcabfc1fcfaeeccc61e2e829d6554c4.stex"
+type="CompressedTexture2D"
+uid="uid://68sox6egj4j7"
+path="res://.godot/imported/osb_down.png-3bcabfc1fcfaeeccc61e2e829d6554c4.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_down.png"
-dest_files=["res://.godot/imported/osb_down.png-3bcabfc1fcfaeeccc61e2e829d6554c4.stex"]
+dest_files=["res://.godot/imported/osb_down.png-3bcabfc1fcfaeeccc61e2e829d6554c4.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 14 - 15
3d/platformer/player/controls/osb_fire.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_fire.png-2e93a3da4bfeb57477fca7905c0173a4.stex"
+type="CompressedTexture2D"
+uid="uid://bdrdyihccbisd"
+path="res://.godot/imported/osb_fire.png-2e93a3da4bfeb57477fca7905c0173a4.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_fire.png"
-dest_files=["res://.godot/imported/osb_fire.png-2e93a3da4bfeb57477fca7905c0173a4.stex"]
+dest_files=["res://.godot/imported/osb_fire.png-2e93a3da4bfeb57477fca7905c0173a4.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 14 - 15
3d/platformer/player/controls/osb_jump.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_jump.png-aa75300abbd0a7d9e9bc4796371c64a3.stex"
+type="CompressedTexture2D"
+uid="uid://wbqqcwj1d5u0"
+path="res://.godot/imported/osb_jump.png-aa75300abbd0a7d9e9bc4796371c64a3.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_jump.png"
-dest_files=["res://.godot/imported/osb_jump.png-aa75300abbd0a7d9e9bc4796371c64a3.stex"]
+dest_files=["res://.godot/imported/osb_jump.png-aa75300abbd0a7d9e9bc4796371c64a3.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 14 - 15
3d/platformer/player/controls/osb_left.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_left.png-10e92e56ebe36a5205968909dc4b286b.stex"
+type="CompressedTexture2D"
+uid="uid://r6qxvqi0unib"
+path="res://.godot/imported/osb_left.png-10e92e56ebe36a5205968909dc4b286b.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_left.png"
-dest_files=["res://.godot/imported/osb_left.png-10e92e56ebe36a5205968909dc4b286b.stex"]
+dest_files=["res://.godot/imported/osb_left.png-10e92e56ebe36a5205968909dc4b286b.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 14 - 15
3d/platformer/player/controls/osb_right.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_right.png-fb8adc0d65f2da35441a371b0865044c.stex"
+type="CompressedTexture2D"
+uid="uid://bw76q621n8fie"
+path="res://.godot/imported/osb_right.png-fb8adc0d65f2da35441a371b0865044c.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_right.png"
-dest_files=["res://.godot/imported/osb_right.png-fb8adc0d65f2da35441a371b0865044c.stex"]
+dest_files=["res://.godot/imported/osb_right.png-fb8adc0d65f2da35441a371b0865044c.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 14 - 15
3d/platformer/player/controls/osb_up.png.import

@@ -1,8 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/osb_up.png-03a826da4884734d6f66c813539bfce8.stex"
+type="CompressedTexture2D"
+uid="uid://kujhqacj3v72"
+path="res://.godot/imported/osb_up.png-03a826da4884734d6f66c813539bfce8.ctex"
 metadata={
 "vram_texture": false
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 
 source_file="res://player/controls/osb_up.png"
-dest_files=["res://.godot/imported/osb_up.png-03a826da4884734d6f66c813539bfce8.stex"]
+dest_files=["res://.godot/imported/osb_up.png-03a826da4884734d6f66c813539bfce8.ctex"]
 
 [params]
 
 compress/mode=0
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=true
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 48 - 33
3d/platformer/player/follow_camera.gd

@@ -1,21 +1,23 @@
 extends Camera3D
 
+
 const MAX_HEIGHT = 2.0
-const MIN_HEIGHT = 0
+const MIN_HEIGHT = 0.0
+
+@export var min_distance := 0.5
+@export var max_distance := 3.5
+@export var angle_v_adjust := 0.0
+@export var autoturn_ray_aperture := 25.0
+@export var autoturn_speed := 50.0
 
-@export var min_distance = 0.5
-@export var max_distance = 3.5
-@export var angle_v_adjust = 0.0
-@export var autoturn_ray_aperture = 25
-@export var autoturn_speed = 50
+var collision_exception: Array[RID] = []
 
-var collision_exception = []
 
 func _ready():
 	# Find collision exceptions for ray.
-	var node = self
-	while node:
-		if node is RigidDynamicBody3D:
+	var node: Node = self
+	while is_instance_valid(node):
+		if node is RigidBody3D:
 			collision_exception.append(node.get_rid())
 			break
 		else:
@@ -25,50 +27,63 @@ func _ready():
 	set_as_top_level(true)
 
 
-func _physics_process(dt):
-	var target = get_parent().get_global_transform().origin
-	var pos = get_global_transform().origin
+func _physics_process(delta: float):
+	var target := (get_parent() as Node3D).get_global_transform().origin
+	var pos := get_global_transform().origin
 
-	var delta = pos - target
+	var difference := pos - target
 
 	# Regular delta follow.
 
 	# Check ranges.
-	if delta.length() < min_distance:
-		delta = delta.normalized() * min_distance
-	elif  delta.length() > max_distance:
-		delta = delta.normalized() * max_distance
+	if difference.length() < min_distance:
+		difference = difference.normalized() * min_distance
+	elif  difference.length() > max_distance:
+		difference = difference.normalized() * max_distance
 
 	# Check upper and lower height.
-	delta.y = clamp(delta.y, MIN_HEIGHT, MAX_HEIGHT)
+	difference.y = clamp(difference.y, MIN_HEIGHT, MAX_HEIGHT)
 
 	# Check autoturn.
-	var ds = PhysicsServer3D.space_get_direct_state(get_world_3d().get_space())
-
-	var col_left = ds.intersect_ray(target, target + Basis(Vector3.UP, deg2rad(autoturn_ray_aperture)) * (delta), collision_exception)
-	var col = ds.intersect_ray(target, target + delta, collision_exception)
-	var col_right = ds.intersect_ray(target, target + Basis(Vector3.UP, deg2rad(-autoturn_ray_aperture)) * (delta), collision_exception)
+	var ds := PhysicsServer3D.space_get_direct_state(get_world_3d().get_space())
+
+	var col_left = ds.intersect_ray(PhysicsRayQueryParameters3D.create(
+			target,
+			target + Basis(Vector3.UP, deg_to_rad(autoturn_ray_aperture)) * (difference),
+			0xFFFFFFFF,
+			collision_exception
+	))
+	var col = ds.intersect_ray(PhysicsRayQueryParameters3D.create(
+			target,
+			target + difference,
+			0xFFFFFFFF,
+			collision_exception
+	))
+	var col_right = ds.intersect_ray(PhysicsRayQueryParameters3D.create(
+			target,
+			target + Basis(Vector3.UP, deg_to_rad(-autoturn_ray_aperture)) * (difference),
+			0xFFFFFFFF,
+			collision_exception
+	))
 
 	if not col.is_empty():
 		# If main ray was occluded, get camera closer, this is the worst case scenario.
-		delta = col.position - target
+		difference = col.position - target
 	elif not col_left.is_empty() and col_right.is_empty():
 		# If only left ray is occluded, turn the camera around to the right.
-		delta = Basis(Vector3.UP, deg2rad(-dt * (autoturn_speed)) * delta)
+		difference = Basis(Vector3.UP, deg_to_rad(-delta * (autoturn_speed))) * difference
 	elif col_left.is_empty() and not col_right.is_empty():
 		# If only right ray is occluded, turn the camera around to the left.
-		delta = Basis(Vector3.UP, deg2rad(dt  *autoturn_speed)) * (delta)
+		difference = Basis(Vector3.UP, deg_to_rad(delta * autoturn_speed)) * difference
 	# Do nothing otherwise, left and right are occluded but center is not, so do not autoturn.
 
 	# Apply lookat.
-	if delta == Vector3():
-		delta = (pos - target).normalized() * 0.0001
+	if difference.is_zero_approx():
+		difference = (pos - target).normalized() * 0.0001
 
-	pos = target + delta
+	pos = target + difference
 
 	look_at_from_position(pos, target, Vector3.UP)
 
 	# Turn a little up or down.
-	var t = get_transform()
-	t.basis = Basis(t.basis[0], deg2rad(angle_v_adjust)) * t.basis
-	set_transform(t)
+	transform.basis = Basis(transform.basis[0], deg_to_rad(angle_v_adjust)) * transform.basis

+ 102 - 83
3d/platformer/player/player.gd

@@ -1,111 +1,127 @@
-extends CharacterBody3D
+class_name Player extends CharacterBody3D
 
-enum Anim {
+
+enum _Anim {
 	FLOOR,
 	AIR,
 }
 
 const SHOOT_TIME = 1.5
-const SHOOT_SCALE = 2
+const SHOOT_SCALE = 2.0
 const CHAR_SCALE = Vector3(0.3, 0.3, 0.3)
 const MAX_SPEED = 4.5
-const TURN_SPEED = 40
+const TURN_SPEED = 40.0
 const JUMP_VELOCITY = 8.5
-const BULLET_SPEED = 20
+const BULLET_SPEED = 20.0
 const AIR_IDLE_DEACCEL = false
 const ACCEL = 14.0
 const DEACCEL = 14.0
 const AIR_ACCEL_FACTOR = 0.4
-const SHARP_TURN_THRESHOLD = 140
-
-var movement_dir = Vector3()
-var linear_velocity = Vector3()
-var jumping = false
-var prev_shoot = false
-var shoot_blend = 0
+const SHARP_TURN_THRESHOLD = deg_to_rad(140.0)
 
-@onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
+var movement_dir := Vector3()
+var jumping := false
+var prev_shoot := false
+var shoot_blend := 0.0
 
+@onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * \
+		ProjectSettings.get_setting("physics/3d/default_gravity_vector")
 
-func _ready():
-	get_node(^"AnimationTree").set_active(true)
+@onready var _camera := $Target/Camera3D as Camera3D
+@onready var _animation_tree := $AnimationTree as AnimationTree
 
 
 func _physics_process(delta):
-	linear_velocity += gravity * delta
+	velocity += gravity * delta
 
-	var anim = Anim.FLOOR
+	var anim := _Anim.FLOOR
 
-	var vv = linear_velocity.y # Vertical velocity.
-	var hv = Vector3(linear_velocity.x, 0, linear_velocity.z) # Horizontal velocity.
+	var vertical_velocity := velocity.y
+	var horizontal_velocity := Vector3(velocity.x, 0, velocity.z)
 
-	var hdir = hv.normalized() # Horizontal direction.
-	var hspeed = hv.length() # Horizontal speed.
+	var horizontal_direction := horizontal_velocity.normalized()
+	var horizontal_speed := horizontal_velocity.length()
 
 	# Player input.
-	var cam_basis = get_node(^"Target/Camera3D").get_global_transform().basis
-	var movement_vec2 = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
-	var dir = cam_basis * Vector3(movement_vec2.x, 0, movement_vec2.y)
-	dir.y = 0
-	dir = dir.normalized()
+	var cam_basis := _camera.get_global_transform().basis
+	var movement_vec2 := Input.get_vector(&"move_left", &"move_right", &"move_forward", &"move_back")
+	var movement_direction := cam_basis * Vector3(movement_vec2.x, 0, movement_vec2.y)
+	movement_direction.y = 0
+	movement_direction = movement_direction.normalized()
 
-	var jump_attempt = Input.is_action_pressed(&"jump")
-	var shoot_attempt = Input.is_action_pressed(&"shoot")
+	var jump_attempt := Input.is_action_pressed(&"jump")
+	var shoot_attempt := Input.is_action_pressed(&"shoot")
 
 	if is_on_floor():
-		var sharp_turn = hspeed > 0.1 and rad2deg(acos(dir.dot(hdir))) > SHARP_TURN_THRESHOLD
-
-		if dir.length() > 0.1 and not sharp_turn:
-			if hspeed > 0.001:
-				hdir = adjust_facing(hdir, dir, delta, 1.0 / hspeed * TURN_SPEED, Vector3.UP)
+		var sharp_turn := horizontal_speed > 0.1 and \
+				acos(movement_direction.dot(horizontal_direction)) > SHARP_TURN_THRESHOLD
+
+		if movement_direction.length() > 0.1 and not sharp_turn:
+			if horizontal_speed > 0.001:
+				horizontal_direction = adjust_facing(
+					horizontal_direction,
+					movement_direction,
+					delta,
+					1.0 / horizontal_speed * TURN_SPEED,
+					Vector3.UP
+				)
 			else:
-				hdir = dir
+				horizontal_direction = movement_direction
 
-			if hspeed < MAX_SPEED:
-				hspeed += ACCEL * delta
+			if horizontal_speed < MAX_SPEED:
+				horizontal_speed += ACCEL * delta
 		else:
-			hspeed -= DEACCEL * delta
-			if hspeed < 0:
-				hspeed = 0
+			horizontal_speed -= DEACCEL * delta
+			if horizontal_speed < 0:
+				horizontal_speed = 0
 
-		hv = hdir * hspeed
+		horizontal_velocity = horizontal_direction * horizontal_speed
 
-		var mesh_xform = get_node(^"Armature").get_transform()
-		var facing_mesh = -mesh_xform.basis[0].normalized()
+		var mesh_xform := ($Player/Skeleton as Node3D).get_transform()
+		var facing_mesh := -mesh_xform.basis[0].normalized()
 		facing_mesh = (facing_mesh - Vector3.UP * facing_mesh.dot(Vector3.UP)).normalized()
 
-		if hspeed > 0:
-			facing_mesh = adjust_facing(facing_mesh, dir, delta, 1.0 / hspeed * TURN_SPEED, Vector3.UP)
-		var m3 = Basis(-facing_mesh, Vector3.UP, -facing_mesh.cross(Vector3.UP).normalized()).scaled(CHAR_SCALE)
-
-		get_node(^"Armature").set_transform(Transform3D(m3, mesh_xform.origin))
+		if horizontal_speed > 0:
+			facing_mesh = adjust_facing(
+				facing_mesh,
+				movement_direction,
+				delta,
+				1.0 / horizontal_speed * TURN_SPEED,
+				Vector3.UP
+			)
+		var m3 := Basis(
+			-facing_mesh,
+			Vector3.UP,
+			-facing_mesh.cross(Vector3.UP).normalized()
+		).scaled(CHAR_SCALE)
+
+		$Player/Skeleton.set_transform(Transform3D(m3, mesh_xform.origin))
 
 		if not jumping and jump_attempt:
-			vv = JUMP_VELOCITY
+			vertical_velocity = JUMP_VELOCITY
 			jumping = true
-			get_node(^"SoundJump").play()
+			$SoundJump.play()
 	else:
-		anim = Anim.AIR
+		anim = _Anim.AIR
 
-		if dir.length() > 0.1:
-			hv += dir * (ACCEL * AIR_ACCEL_FACTOR * delta)
-			if hv.length() > MAX_SPEED:
-				hv = hv.normalized() * MAX_SPEED
+		if movement_direction.length() > 0.1:
+			horizontal_velocity += movement_direction * (ACCEL * AIR_ACCEL_FACTOR * delta)
+			if horizontal_velocity.length() > MAX_SPEED:
+				horizontal_velocity = horizontal_velocity.normalized() * MAX_SPEED
 		elif AIR_IDLE_DEACCEL:
-			hspeed = hspeed - (DEACCEL * AIR_ACCEL_FACTOR * delta)
-			if hspeed < 0:
-				hspeed = 0
-			hv = hdir * hspeed
+			horizontal_speed = horizontal_speed - (DEACCEL * AIR_ACCEL_FACTOR * delta)
+			if horizontal_speed < 0:
+				horizontal_speed = 0
+			horizontal_velocity = horizontal_direction * horizontal_speed
 
-	if jumping and vv < 0:
+	if jumping and vertical_velocity < 0:
 		jumping = false
 
-	linear_velocity = hv + Vector3.UP * vv
+	velocity = horizontal_velocity + Vector3.UP * vertical_velocity
 
 	if is_on_floor():
-		movement_dir = linear_velocity
+		movement_dir = velocity
 
-	# TODO: This information should be set to the CharacterBody properties instead of arguments: , -gravity.normalized(
 	move_and_slide()
 
 	if shoot_blend > 0:
@@ -115,43 +131,46 @@ func _physics_process(delta):
 
 	if shoot_attempt and not prev_shoot:
 		shoot_blend = SHOOT_TIME
-		var bullet = preload("res://player/bullet/bullet.tscn").instantiate()
-		bullet.set_transform(get_node(^"Armature/Bullet").get_global_transform().orthonormalized())
+		var bullet := preload("res://player/bullet/bullet.tscn").instantiate() as Bullet
+		bullet.set_transform($Player/Skeleton/Bullet.get_global_transform().orthonormalized())
 		get_parent().add_child(bullet)
-		bullet.set_linear_velocity(get_node(^"Armature/Bullet").get_global_transform().basis[2].normalized() * BULLET_SPEED)
-		bullet.add_collision_exception_with(self) # Add it to bullet.
-		get_node(^"SoundShoot").play()
+		bullet.set_linear_velocity(
+			$Player/Skeleton/Bullet.get_global_transform().basis[2].normalized() * BULLET_SPEED
+		)
+		bullet.add_collision_exception_with(self)
+		$SoundShoot.play()
 
 	prev_shoot = shoot_attempt
 
 	if is_on_floor():
-		$AnimationTree["parameters/walk/blend_amount"] = hspeed / MAX_SPEED
+		_animation_tree[&"parameters/walk/blend_amount"] = horizontal_speed / MAX_SPEED
 
-	$AnimationTree["parameters/state/current"] = anim
-	$AnimationTree["parameters/air_dir/blend_amount"] = clamp(-linear_velocity.y / 4 + 0.5, 0, 1)
-	$AnimationTree["parameters/gun/blend_amount"] = min(shoot_blend, 1.0)
+	_animation_tree[&"parameters/state/current"] = anim
+	_animation_tree[&"parameters/air_dir/blend_amount"] = clamp(-velocity.y / 4 + 0.5, 0, 1)
+	_animation_tree[&"parameters/gun/blend_amount"] = min(shoot_blend, 1.0)
 
 
-func adjust_facing(p_facing, p_target, p_step, p_adjust_rate, current_gn):
-	var n = p_target # Normal.
-	var t = n.cross(current_gn).normalized()
+func adjust_facing(facing: Vector3, target: Vector3, step: float, adjust_rate: float, \
+		current_gn: Vector3) -> Vector3:
+	var normal := target
+	var t := normal.cross(current_gn).normalized()
 
-	var x = n.dot(p_facing)
-	var y = t.dot(p_facing)
+	var x := normal.dot(facing)
+	var y := t.dot(facing)
 
-	var ang = atan2(y,x)
+	var ang := atan2(y,x)
 
-	if abs(ang) < 0.001: # Too small.
-		return p_facing
+	if abs(ang) < 0.001:
+		return facing
 
-	var s = sign(ang)
+	var s := signf(ang)
 	ang = ang * s
-	var turn = ang * p_adjust_rate * p_step
-	var a
+	var turn := ang * adjust_rate * step
+	var a: float
 	if ang < turn:
 		a = ang
 	else:
 		a = turn
 	ang = (ang - a) * s
 
-	return (n * cos(ang) + t * sin(ang)) * p_facing.length()
+	return (normal * cos(ang) + t * sin(ang)) * facing.length()

BIN=BIN
3d/platformer/player/player.glb


+ 55 - 0
3d/platformer/player/player.glb.import

@@ -0,0 +1,55 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://b5ljbav3jdp61"
+path="res://.godot/imported/player.glb-d5e59c3624fa2635da7ea043f9526ccc.scn"
+
+[deps]
+
+source_file="res://player/player.glb"
+dest_files=["res://.godot/imported/player.glb-d5e59c3624fa2635da7ea043f9526ccc.scn"]
+
+[params]
+
+nodes/root_type="Node3D"
+nodes/root_name="Player"
+nodes/root_scale=1.0
+meshes/ensure_tangents=true
+meshes/generate_lods=true
+meshes/create_shadow_meshes=true
+meshes/light_baking=3
+meshes/lightmap_texel_size=0.2
+skins/use_named_skins=true
+animation/import=true
+animation/fps=30
+import_script/path=""
+_subresources={
+"animations": {
+"falling": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+},
+"idle": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+},
+"run": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+},
+"walk": {
+"save_to_file/enabled": false,
+"save_to_file/keep_custom_tracks": "",
+"save_to_file/path": "",
+"settings/loop_mode": 1
+}
+}
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 13 - 33
3d/platformer/player/player.tscn


+ 5 - 2
3d/platformer/player/sound_jump.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://bplqk77bffdxr"
 path="res://.godot/imported/sound_jump.wav-2a6db8acfd21d20a55b2f160c322e83f.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 5 - 2
3d/platformer/player/sound_shoot.wav.import

@@ -1,7 +1,8 @@
 [remap]
 
 importer="wav"
-type="AudioStreamSample"
+type="AudioStreamWAV"
+uid="uid://cdx3i7hr2acow"
 path="res://.godot/imported/sound_shoot.wav-1364cf87a9be9d98fd06fa6e8c50c93c.sample"
 
 [deps]
@@ -17,5 +18,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 46 - 36
3d/platformer/project.godot

@@ -6,15 +6,31 @@
 ;   [section] ; section goes between []
 ;   param=value ; assign values to parameters
 
-config_version=4
+config_version=5
+
+_global_script_classes=[{
+"base": "RigidBody3D",
+"class": &"Bullet",
+"language": &"GDScript",
+"path": "res://player/bullet/bullet.gd"
+}, {
+"base": "CharacterBody3D",
+"class": &"Player",
+"language": &"GDScript",
+"path": "res://player/player.gd"
+}]
+_global_script_class_icons={
+"Bullet": "",
+"Player": ""
+}
 
 [application]
 
 config/name="Platformer 3D"
 config/description="Platformer 3D demo using a CharacterBody3D.
-It uses similar code to the 2D platformer, but implemented in 3D.
-It also features audio reverberation (it sounds echo-y)."
-run/main_scene="res://stage/stage.tscn"
+It uses similar code to the 2D platformer, but implemented in 3D."
+run/main_scene="res://game.tscn"
+config/features=PackedStringArray("4.0")
 config/icon="res://icon.png"
 
 [gdnative]
@@ -25,106 +41,106 @@ singletons=[]
 
 ui_accept={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777221,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777222,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777221,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777222,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_select={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_cancel={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777217,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777217,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_focus_next={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777218,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777218,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 }
 ui_focus_prev={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 }
 ui_left={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_right={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_up={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_down={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 ui_page_up={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777235,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777235,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 }
 ui_page_down={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777236,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777236,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 }
 move_forward={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
 ]
 }
 move_back={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
 ]
 }
 move_left={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 ]
 }
 move_right={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 ]
 }
 jump={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
 ]
 }
 shoot={
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
 ]
@@ -140,11 +156,5 @@ multithread/thread_rid_pool_prealloc=60
 
 [rendering]
 
-quality/driver/fallback_to_gles2=true
-quality/intended_usage/framebuffer_allocation=3
-vram_compression/import_etc=true
-quality/shadows/filter_mode=2
-quality/filters/anisotropic_filter_level=16
-quality/filters/msaa=2
-quality/filters/anisotropic_filter_level.mobile=4
-quality/filters/msaa.mobile=0
+anti_aliasing/quality/screen_space_aa=1
+anti_aliasing/quality/use_debanding=true

BIN=BIN
3d/platformer/screenshots/face.png


BIN=BIN
3d/platformer/screenshots/shoot.png


+ 4 - 0
3d/platformer/stage/collision/box.tres

@@ -0,0 +1,4 @@
+[gd_resource type="BoxShape3D" format=3 uid="uid://cnie2sp75ai87"]
+
+[resource]
+size = Vector3(2, 2, 2)

BIN=BIN
3d/platformer/stage/collision/corner.res


BIN=BIN
3d/platformer/stage/collision/corner_fix.res


BIN=BIN
3d/platformer/stage/collision/corner_fixr.res


BIN=BIN
3d/platformer/stage/collision/floor_corner.res


BIN=BIN
3d/platformer/stage/collision/floor_edge.res


BIN=BIN
3d/platformer/stage/collision/ramp.res


+ 4 - 0
3d/platformer/stage/collision/trunk.tres

@@ -0,0 +1,4 @@
+[gd_resource type="BoxShape3D" format=3 uid="uid://cu8jj2hhxojb5"]
+
+[resource]
+size = Vector3(0.6, 2, 0.6)

BIN=BIN
3d/platformer/stage/collision/trunk_deco.res


+ 0 - 25
3d/platformer/stage/floor_mesh.tres

@@ -1,25 +0,0 @@
-[gd_resource type="ArrayMesh" load_steps=4 format=2]
-
-[ext_resource path="res://stage/texturemr.png" type="Texture2D" id=1]
-[ext_resource path="res://stage/texture.png" type="Texture2D" id=2]
-
-[sub_resource type="StandardMaterial3D" id=1]
-albedo_texture = ExtResource( 2 )
-metallic = 0.51
-metallic_texture = ExtResource( 1 )
-roughness = 0.2
-roughness_texture = ExtResource( 1 )
-
-[resource]
-surfaces/0 = {
-"aabb": AABB( -1, -1, -1, 2, 0, 2 ),
-"array_data": PackedByteArray( 0, 188, 0, 188, 0, 60, 0, 60, 0, 127, 0, 0, 7, 58, 236, 51, 0, 60, 0, 188, 0, 60, 0, 60, 0, 127, 0, 0, 0, 60, 236, 51, 0, 60, 0, 188, 0, 188, 0, 60, 0, 127, 0, 0, 0, 60, 239, 17, 0, 188, 0, 188, 0, 188, 0, 60, 0, 127, 0, 0, 7, 58, 239, 17 ),
-"array_index_data": PackedByteArray( 0, 0, 2, 0, 1, 0, 0, 0, 3, 0, 2, 0 ),
-"blend_shape_data": [  ],
-"format": 98067,
-"index_count": 6,
-"material": SubResource( 1 ),
-"primitive": 4,
-"skeleton_aabb": [  ],
-"vertex_count": 4
-}

BIN=BIN
3d/platformer/stage/grid_map.scn


BIN=BIN
3d/platformer/stage/meshes/ceiling.res


BIN=BIN
3d/platformer/stage/meshes/ceiling_corner.res


BIN=BIN
3d/platformer/stage/meshes/ceiling_wall.res


BIN=BIN
3d/platformer/stage/meshes/corner.res


BIN=BIN
3d/platformer/stage/meshes/corner_fix.res


BIN=BIN
3d/platformer/stage/meshes/corner_fixr.res


BIN=BIN
3d/platformer/stage/meshes/corner_floor.res


BIN=BIN
3d/platformer/stage/meshes/floor.res


BIN=BIN
3d/platformer/stage/meshes/floor_corner.res


BIN=BIN
3d/platformer/stage/meshes/floor_edge.res


BIN=BIN
3d/platformer/stage/meshes/previews/ceiling.png


+ 34 - 0
3d/platformer/stage/meshes/previews/ceiling.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://de4ium0qlom16"
+path="res://.godot/imported/ceiling.png-b411c4fb2dfe7b76f76ab05d80894e46.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/ceiling.png"
+dest_files=["res://.godot/imported/ceiling.png-b411c4fb2dfe7b76f76ab05d80894e46.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/ceiling_corner.png


+ 34 - 0
3d/platformer/stage/meshes/previews/ceiling_corner.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d15fcw2varcjl"
+path="res://.godot/imported/ceiling_corner.png-498ca340a8db3cbc6c34dcad400b367a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/ceiling_corner.png"
+dest_files=["res://.godot/imported/ceiling_corner.png-498ca340a8db3cbc6c34dcad400b367a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/ceiling_wall.png


+ 34 - 0
3d/platformer/stage/meshes/previews/ceiling_wall.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chf3t80xvxnjs"
+path="res://.godot/imported/ceiling_wall.png-8f89fa4a64d434133e380de70c43c51b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/ceiling_wall.png"
+dest_files=["res://.godot/imported/ceiling_wall.png-8f89fa4a64d434133e380de70c43c51b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/corner.png


+ 34 - 0
3d/platformer/stage/meshes/previews/corner.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://clum5gu8hk1ue"
+path="res://.godot/imported/corner.png-43951091ea7eae66be65ec5c105969dc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/corner.png"
+dest_files=["res://.godot/imported/corner.png-43951091ea7eae66be65ec5c105969dc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/corner_fix.png


+ 36 - 0
3d/platformer/stage/meshes/previews/corner_fix.png.import

@@ -0,0 +1,36 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckwv7e3lpmorb"
+path.s3tc="res://.godot/imported/corner_fix.png-9f4da4381cb6d362902dc512c1a5e9e1.s3tc.ctex"
+path.etc2="res://.godot/imported/corner_fix.png-9f4da4381cb6d362902dc512c1a5e9e1.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc", "etc2"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/corner_fix.png"
+dest_files=["res://.godot/imported/corner_fix.png-9f4da4381cb6d362902dc512c1a5e9e1.s3tc.ctex", "res://.godot/imported/corner_fix.png-9f4da4381cb6d362902dc512c1a5e9e1.etc2.ctex"]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0

BIN=BIN
3d/platformer/stage/meshes/previews/corner_fixr.png


+ 34 - 0
3d/platformer/stage/meshes/previews/corner_fixr.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://vb3ik3vup68g"
+path="res://.godot/imported/corner_fixr.png-b8d2d6e26f2e0653e892e0105c8411e4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/corner_fixr.png"
+dest_files=["res://.godot/imported/corner_fixr.png-b8d2d6e26f2e0653e892e0105c8411e4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/corner_floor.png


+ 34 - 0
3d/platformer/stage/meshes/previews/corner_floor.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crkwyiw1srl0s"
+path="res://.godot/imported/corner_floor.png-3ba191011902488f5711a0aa85cc5a9e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/corner_floor.png"
+dest_files=["res://.godot/imported/corner_floor.png-3ba191011902488f5711a0aa85cc5a9e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/floor.png


+ 34 - 0
3d/platformer/stage/meshes/previews/floor.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ceowqwjqgr5hh"
+path="res://.godot/imported/floor.png-11d56f762516aee967ad58e43d515a3b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/floor.png"
+dest_files=["res://.godot/imported/floor.png-11d56f762516aee967ad58e43d515a3b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/floor_corner.png


+ 34 - 0
3d/platformer/stage/meshes/previews/floor_corner.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bbq8ew5nu5euk"
+path="res://.godot/imported/floor_corner.png-7a6e00d34d08be9c35fc18bb965b3a27.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/floor_corner.png"
+dest_files=["res://.godot/imported/floor_corner.png-7a6e00d34d08be9c35fc18bb965b3a27.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/floor_edge.png


+ 34 - 0
3d/platformer/stage/meshes/previews/floor_edge.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bn8u7u037b45d"
+path="res://.godot/imported/floor_edge.png-ba7d7eb4bea47b68d023d46f34068ce1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/floor_edge.png"
+dest_files=["res://.godot/imported/floor_edge.png-ba7d7eb4bea47b68d023d46f34068ce1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/ramp.png


+ 34 - 0
3d/platformer/stage/meshes/previews/ramp.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://co11nalhejjuy"
+path="res://.godot/imported/ramp.png-422b477052e622f3b9d472f76e3ae427.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/ramp.png"
+dest_files=["res://.godot/imported/ramp.png-422b477052e622f3b9d472f76e3ae427.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/tree_top.png


+ 34 - 0
3d/platformer/stage/meshes/previews/tree_top.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c81vs6shrgqy7"
+path="res://.godot/imported/tree_top.png-36d00a867a49842f716790c921fc893f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/tree_top.png"
+dest_files=["res://.godot/imported/tree_top.png-36d00a867a49842f716790c921fc893f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/trunk.png


+ 34 - 0
3d/platformer/stage/meshes/previews/trunk.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ciqvgxs8iyuk3"
+path="res://.godot/imported/trunk.png-59c0288facdeba4f059e9fa884cd4f7f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/trunk.png"
+dest_files=["res://.godot/imported/trunk.png-59c0288facdeba4f059e9fa884cd4f7f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/trunk_deco.png


+ 34 - 0
3d/platformer/stage/meshes/previews/trunk_deco.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cmcov60r5vwcd"
+path="res://.godot/imported/trunk_deco.png-fa2ea5fc9d28f9109880d771f25fe42b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/trunk_deco.png"
+dest_files=["res://.godot/imported/trunk_deco.png-fa2ea5fc9d28f9109880d771f25fe42b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/trunk_floor.png


+ 34 - 0
3d/platformer/stage/meshes/previews/trunk_floor.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7xrwpol80qv2"
+path="res://.godot/imported/trunk_floor.png-64a298b7b901b8bba3e4113d256eff85.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/trunk_floor.png"
+dest_files=["res://.godot/imported/trunk_floor.png-64a298b7b901b8bba3e4113d256eff85.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/wall.png


+ 34 - 0
3d/platformer/stage/meshes/previews/wall.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b02dqx1o1s7c6"
+path="res://.godot/imported/wall.png-b41a70df849464e642dcebc822021522.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/wall.png"
+dest_files=["res://.godot/imported/wall.png-b41a70df849464e642dcebc822021522.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/wall_floor.png


+ 34 - 0
3d/platformer/stage/meshes/previews/wall_floor.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dp8hjmj1g0g6j"
+path="res://.godot/imported/wall_floor.png-e01c2f64781bb864142c7613f73b4369.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/wall_floor.png"
+dest_files=["res://.godot/imported/wall_floor.png-e01c2f64781bb864142c7613f73b4369.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/previews/wall_var.png


+ 34 - 0
3d/platformer/stage/meshes/previews/wall_var.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3fnohn1axu6d"
+path="res://.godot/imported/wall_var.png-34ec1ed3fee45358a9c45a60591fc954.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://stage/meshes/previews/wall_var.png"
+dest_files=["res://.godot/imported/wall_var.png-34ec1ed3fee45358a9c45a60591fc954.ctex"]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

BIN=BIN
3d/platformer/stage/meshes/ramp.res


BIN=BIN
3d/platformer/stage/meshes/tree_top.res


BIN=BIN
3d/platformer/stage/meshes/trunk.res


BIN=BIN
3d/platformer/stage/meshes/trunk_deco.res


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio