diff --git a/Enemies/RangedEnemy.tscn b/Enemies/RangedEnemy.tscn index d6f2af8..077ab47 100644 --- a/Enemies/RangedEnemy.tscn +++ b/Enemies/RangedEnemy.tscn @@ -908,7 +908,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0714533, 0.795379, 0.013890 shape = SubResource("BoxShape3D_dm3u7") [node name="ranged enemy" type="Node3D" parent="."] -transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.5, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) [node name="Cube" type="MeshInstance3D" parent="ranged enemy"] transform = Transform3D(0.323408, 0, 0, 0, 0.323408, 0, 0, 0, 0.323408, -0.0862004, 0.632917, -0.0732053) diff --git a/GameLogic/GameManager.tscn b/GameLogic/GameManager.tscn index c616a58..f7e0205 100644 --- a/GameLogic/GameManager.tscn +++ b/GameLogic/GameManager.tscn @@ -20,6 +20,7 @@ PlayerScenes = Array[PackedScene]([ExtResource("4_3fl70"), ExtResource("3_y1wkr" [node name="Camera3D" type="Camera3D" parent="."] transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, -0.527878, 10.966, 6.61121) projection = 1 +current = true size = 10.8546 [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] diff --git a/GameLogic/Main.tscn b/GameLogic/Main.tscn index 54cc670..348248c 100644 --- a/GameLogic/Main.tscn +++ b/GameLogic/Main.tscn @@ -1,13 +1,22 @@ -[gd_scene load_steps=5 format=3 uid="uid://vwrw05ob2caq"] +[gd_scene load_steps=14 format=3 uid="uid://vwrw05ob2caq"] [ext_resource type="Script" path="res://GameLogic/Main.cs" id="1_g4hua"] [ext_resource type="PackedScene" uid="uid://btl5fdyjewnwc" path="res://Levels/Scenes/Level3.tscn" id="2_0yhby"] +[ext_resource type="PackedScene" uid="uid://dqv03pua4j8ga" path="res://Levels/Scenes/Level1.tscn" id="2_jq3qe"] [ext_resource type="PackedScene" uid="uid://b12gq4yqc3d8i" path="res://UI/MainMenu.tscn" id="2_kvovw"] +[ext_resource type="PackedScene" uid="uid://basequfmpg04f" path="res://Levels/Scenes/Level2.tscn" id="3_nhrqr"] +[ext_resource type="PackedScene" uid="uid://ctvkevnc0wxka" path="res://Levels/Scenes/Level4.tscn" id="5_xj47l"] +[ext_resource type="PackedScene" uid="uid://col60npvg7wr1" path="res://Levels/Scenes/Level5.tscn" id="6_xmedq"] +[ext_resource type="PackedScene" uid="uid://8ukphol1isp2" path="res://Levels/Scenes/Level6.tscn" id="7_58n7x"] +[ext_resource type="PackedScene" uid="uid://bsq7edeueqyjg" path="res://Levels/Scenes/Level7.tscn" id="8_pcp3p"] +[ext_resource type="PackedScene" uid="uid://c4xcka4ekuur8" path="res://Levels/Scenes/Level8.tscn" id="9_n1hja"] +[ext_resource type="PackedScene" uid="uid://djwln4at4ho44" path="res://Levels/Scenes/Level9.tscn" id="10_rs7ve"] +[ext_resource type="PackedScene" uid="uid://0hdnmilwrsq6" path="res://Levels/Scenes/Level10.tscn" id="11_o275c"] [ext_resource type="PackedScene" uid="uid://cxj6yeddshy16" path="res://GameLogic/GameManager.tscn" id="11_wiyvp"] [node name="Main" type="Node3D"] script = ExtResource("1_g4hua") -Levels = Array[PackedScene]([ExtResource("2_0yhby")]) +Levels = Array[PackedScene]([ExtResource("2_jq3qe"), ExtResource("3_nhrqr"), ExtResource("2_0yhby"), ExtResource("5_xj47l"), ExtResource("6_xmedq"), ExtResource("7_58n7x"), ExtResource("8_pcp3p"), ExtResource("9_n1hja"), ExtResource("10_rs7ve"), ExtResource("11_o275c")]) GameManager = ExtResource("11_wiyvp") [node name="MainMenu" parent="." instance=ExtResource("2_kvovw")] @@ -15,3 +24,7 @@ z_index = 100 [node name="SFXPlayer" type="AudioStreamPlayer" parent="."] max_polyphony = 10 + +[node name="Debug Camera" type="Camera3D" parent="."] +transform = Transform3D(-1, 0, -8.74228e-08, -5.69087e-08, 0.759112, 0.65096, 6.63637e-08, 0.65096, -0.759112, 1.40462, 6.10678, -6.91273) +visible = false diff --git a/Levels/ExitPortal.tscn b/Levels/ExitPortal.tscn index c405519..9a3f640 100644 --- a/Levels/ExitPortal.tscn +++ b/Levels/ExitPortal.tscn @@ -103,7 +103,7 @@ libraries = { [node name="Area3D" type="Area3D" parent="." index="4"] collision_layer = 0 -collision_mask = 0 +collision_mask = 16 script = ExtResource("2_4y188") [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0"] diff --git a/Levels/Scripts/AreaExit.cs b/Levels/Scripts/AreaExit.cs index 6a7dd36..f304dbf 100644 --- a/Levels/Scripts/AreaExit.cs +++ b/Levels/Scripts/AreaExit.cs @@ -16,20 +16,12 @@ public partial class AreaExit : Node3D private void OnExitEntered(Node3D node) { - Character incoming = null; - if (node is Character nodeCharacter) - incoming = nodeCharacter; - else if (node.GetParent().GetParent() is Character parentedNode) - incoming = parentedNode; + var character = node as Character; + _gameManager.RemoveCharacterAndAddToExit(character.OwnerPlayer); - if (incoming != null) - { - _gameManager.RemoveCharacterAndAddToExit(incoming.OwnerPlayer); + GD.Print($"Exit reached by {character.Name}"); - GD.Print($"Exit reached by {incoming.Name}"); - - if (!_gameManager.Players.Any(x => x.CharactersLeftOnStage.Any())) - _gameManager.OnLevelClear(); - } + if (!_gameManager.Players.Any(x => x.CharactersLeftOnStage.Any())) + _gameManager.OnLevelClear(); } } diff --git a/Player/Base/Character.cs b/Player/Base/Character.cs index 1589a82..1b41b21 100644 --- a/Player/Base/Character.cs +++ b/Player/Base/Character.cs @@ -68,6 +68,7 @@ public partial class Character : CharacterBody3D private async void Fire() { + GD.Print("Firing projectile at " + GlobalPosition); var projectile = _fireProjectile.Instantiate(); projectile.Position = Position; GetParent().AddChild(projectile); diff --git a/Player/Base/Projectile.cs b/Player/Base/Projectile.cs index 4e348e3..c12d56f 100644 --- a/Player/Base/Projectile.cs +++ b/Player/Base/Projectile.cs @@ -30,6 +30,7 @@ public partial class Projectile : Node3D public override void _PhysicsProcess(double delta) { + GD.Print("Projectile is at " + GlobalPosition); var pathFollow = GetNode("PathFollow3D"); pathFollow.Progress += Speed * (float)delta; if (pathFollow.ProgressRatio > 0.98f) diff --git a/Player/Capricorn/Capricorn.tscn b/Player/Capricorn/Capricorn.tscn index b4f0f06..8262fc1 100644 --- a/Player/Capricorn/Capricorn.tscn +++ b/Player/Capricorn/Capricorn.tscn @@ -216,7 +216,7 @@ size = Vector3(0.856928, 1.65704, 0.82877) [node name="Capricorn" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.408962, 0) -collision_layer = 2 +collision_layer = 18 motion_mode = 1 script = ExtResource("1_aqn5t") _fireProjectile = ExtResource("2_e6qos") diff --git a/Player/Pisces/Attacks/ShotgunBullet.tscn b/Player/Pisces/Attacks/ShotgunBullet.tscn index 702ea84..b94ba0f 100644 --- a/Player/Pisces/Attacks/ShotgunBullet.tscn +++ b/Player/Pisces/Attacks/ShotgunBullet.tscn @@ -20,7 +20,7 @@ radius = 0.3 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.73894, 0) [node name="Center Shot" type="Path3D" parent="." node_paths=PackedStringArray("_hitBox")] -transform = Transform3D(0.999968, 0, -0.00802843, 0, 1, 0, 0.00802843, 0, 0.999968, -0.0325268, 0, -0.821681) +transform = Transform3D(0.999968, 0, -0.00802843, 0, 1, 0, 0.00802843, 0, 0.999968, -0.0325268, 0.758171, -0.821681) top_level = true curve = SubResource("Curve3D_h8ghr") script = ExtResource("1_ivbjp") @@ -53,7 +53,7 @@ axis = 1 texture = ExtResource("2_a612r") [node name="Left Shot" type="Path3D" parent="." node_paths=PackedStringArray("_hitBox")] -transform = Transform3D(0.970524, 0, 0.241007, 0, 1, 0, -0.241007, 0, 0.970524, -0.444877, 0, -0.564578) +transform = Transform3D(0.970524, 0, 0.241007, 0, 1, 0, -0.241007, 0, 0.970524, -0.444877, 0.758171, -0.564578) top_level = true curve = SubResource("Curve3D_h8ghr") script = ExtResource("1_ivbjp") @@ -64,7 +64,7 @@ _onHitSfx = ExtResource("4_2g102") _hitBox = NodePath("PathFollow3D/Hitbox") [node name="PathFollow3D" type="PathFollow3D" parent="Left Shot"] -transform = Transform3D(0.999998, 0, -0.0016, 0, 1, 0, 0.0016, 0, 0.999998, 0, 0, 0) +transform = Transform3D(0.999998, 0, -0.00159998, 0, 1, 0, 0.00159998, 0, 0.999998, 0, 0, 0) loop = false tilt_enabled = false @@ -86,7 +86,7 @@ axis = 1 texture = ExtResource("2_a612r") [node name="Right Shot" type="Path3D" parent="." node_paths=PackedStringArray("_hitBox")] -transform = Transform3D(0.95246, 0, -0.304665, 0, 1, 0, 0.304665, 0, 0.95246, 0.441688, 0, -0.681987) +transform = Transform3D(0.95246, 0, -0.304665, 0, 1, 0, 0.304665, 0, 0.95246, 0.441688, 0.758171, -0.681987) top_level = true curve = SubResource("Curve3D_h8ghr") script = ExtResource("1_ivbjp") @@ -97,7 +97,7 @@ _onHitSfx = ExtResource("4_2g102") _hitBox = NodePath("PathFollow3D/Hitbox") [node name="PathFollow3D" type="PathFollow3D" parent="Right Shot"] -transform = Transform3D(0.999998, 0, -0.0016, 0, 1, 0, 0.0016, 0, 0.999998, 0, 0, 0) +transform = Transform3D(0.999998, 0, -0.00159997, 0, 1, 0, 0.00159997, 0, 0.999998, 0, 0, 0) loop = false tilt_enabled = false diff --git a/Player/Pisces/Attacks/Single.tscn b/Player/Pisces/Attacks/Single.tscn index b8ce563..298f2df 100644 --- a/Player/Pisces/Attacks/Single.tscn +++ b/Player/Pisces/Attacks/Single.tscn @@ -19,7 +19,7 @@ radius = 0.3 [node name="Single" type="Node3D"] [node name="Center Shot" type="Path3D" parent="." node_paths=PackedStringArray("_hitBox")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.620083) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.10168, -0.620083) top_level = true curve = SubResource("Curve3D_do6j1") script = ExtResource("1_62kpd") @@ -35,6 +35,7 @@ loop = false tilt_enabled = false [node name="Hitbox" type="RigidBody3D" parent="Center Shot/PathFollow3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.92646, 0) collision_layer = 12 gravity_scale = 0.0 continuous_cd = true @@ -43,11 +44,11 @@ contact_monitor = true can_sleep = false [node name="CollisionShape3D" type="CollisionShape3D" parent="Center Shot/PathFollow3D/Hitbox"] -transform = Transform3D(0.5, 0, -7.10543e-15, 0, 0.5, 0, 7.10543e-15, 0, 0.5, 0, 0, 0) +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -1.93013, 0) shape = SubResource("CylinderShape3D_njobr") [node name="Sprite3D" type="Sprite3D" parent="Center Shot/PathFollow3D/Hitbox/CollisionShape3D"] -transform = Transform3D(1, 0, -3.55271e-14, 0, 1, 0, 3.55271e-14, 0, 1, -0.299847, 0, 0.288742) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.299847, 0, 0.288742) centered = false axis = 1 texture = ExtResource("2_d8lwd") diff --git a/Player/Pisces/Pisces.tscn b/Player/Pisces/Pisces.tscn index 1fe7765..8021b7a 100644 --- a/Player/Pisces/Pisces.tscn +++ b/Player/Pisces/Pisces.tscn @@ -10,7 +10,7 @@ size = Vector3(1.52195, 15.0934, 1) [node name="Pisces" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(0.33, 0, 0, 0, 0.33, 0, 0, 0, 0.33, 0, 0.332056, 0) -collision_layer = 2 +collision_layer = 18 motion_mode = 1 script = ExtResource("1_gp8nm") _fireProjectile = ExtResource("2_rsvhh") diff --git a/Player/Sagittarius/Attacks/MegamiBeam.tscn b/Player/Sagittarius/Attacks/MegamiBeam.tscn index 8e80ab1..0016603 100644 --- a/Player/Sagittarius/Attacks/MegamiBeam.tscn +++ b/Player/Sagittarius/Attacks/MegamiBeam.tscn @@ -7,18 +7,19 @@ [sub_resource type="Curve3D" id="Curve3D_7ok4f"] _data = { -"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0.008, 1, -10), -"tilts": PackedFloat32Array(0, 0) +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, -0.0755615, 2.8497, -5.04305, 0, 0, 0, 0, 0, 0, 0, 1, -10), +"tilts": PackedFloat32Array(0, 0, 0) } -point_count = 2 +point_count = 3 [sub_resource type="CylinderShape3D" id="CylinderShape3D_bnunv"] -height = 9.57027 +height = 3.3177 radius = 0.57027 [node name="MegamiBeam" type="Node3D"] [node name="Path3D" type="Path3D" parent="." node_paths=PackedStringArray("_hitBox")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0430247, 0.484383) top_level = true curve = SubResource("Curve3D_7ok4f") script = ExtResource("1_6e1or") @@ -30,13 +31,14 @@ _hitBox = NodePath("PathFollow3D/Beam") HasRotation = true [node name="PathFollow3D" type="PathFollow3D" parent="Path3D"] -transform = Transform3D(0.999999, 0, -0.000799999, 0, 1, 0, 0.000799999, 0, 0.999999, 0, 1, 0) +transform = Transform3D(0.999993, 0, 0, 0, 0.970138, -0.242535, 0, 0.242534, 0.970141, 0, 1, -1) loop = false tilt_enabled = false [node name="Beam" type="RigidBody3D" parent="Path3D/PathFollow3D"] -transform = Transform3D(-1, 0, -8.74229e-08, 0, 1, 0, 8.74229e-08, 0, -1, 0, 0, 0) +transform = Transform3D(1, 0, 0, 0, -1, -1.50996e-07, 0, 1.50996e-07, -1, 0, 0, 0) collision_layer = 12 +collision_mask = 0 gravity_scale = 0.0 continuous_cd = true max_contacts_reported = 1000 @@ -44,11 +46,11 @@ contact_monitor = true can_sleep = false [node name="CollisionShape3D" type="CollisionShape3D" parent="Path3D/PathFollow3D/Beam"] -transform = Transform3D(0.5, 0, 5.82077e-11, 0, 0.5, 0, -5.82077e-11, 0, 0.5, 0.000155393, 0, 0.194262) +transform = Transform3D(0.5, 0, 8.73115e-11, 0, 0.5, 0, -8.73115e-11, 0, 0.5, 0.000155393, 0, 0.194262) shape = SubResource("CylinderShape3D_bnunv") [node name="Sprite3D2" type="Sprite3D" parent="Path3D/PathFollow3D/Beam"] -transform = Transform3D(-1, 0, 0.000663249, 0, 1, 0, -0.000663249, 0, -1, -0.00355998, 0, 0.140453) +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.00355998, -0.119854, 0.205225) axis = 1 texture = ExtResource("1_57flt") diff --git a/Player/Sagittarius/Sagittarius.tscn b/Player/Sagittarius/Sagittarius.tscn index 8c64ee7..63d2d08 100644 --- a/Player/Sagittarius/Sagittarius.tscn +++ b/Player/Sagittarius/Sagittarius.tscn @@ -603,7 +603,7 @@ radius = 0.25 [node name="Sagittarius" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(0.9, 0, 0, 0, 0.9, 0, 0, 0, 0.9, 0, 0.559088, 0) -collision_layer = 2 +collision_layer = 18 motion_mode = 1 wall_min_slide_angle = 3.14159 script = ExtResource("1_s1hsr") diff --git a/Player/Scorpio/Attacks/CutterShot.tscn b/Player/Scorpio/Attacks/CutterShot.tscn index 6406061..44fb5a2 100644 --- a/Player/Scorpio/Attacks/CutterShot.tscn +++ b/Player/Scorpio/Attacks/CutterShot.tscn @@ -5,9 +5,9 @@ [ext_resource type="AudioStream" uid="uid://ce40y3hln3twm" path="res://Audio/SFX/grass cutter.wav" id="2_u4aoe"] [ext_resource type="AudioStream" uid="uid://cat08h84wm5gm" path="res://Audio/SFX/ominous.wav" id="3_32sc2"] -[sub_resource type="Curve3D" id="Curve3D_5hmi4"] +[sub_resource type="Curve3D" id="Curve3D_i1cv2"] _data = { -"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2.502, 1, -3.145, 0, 0, 0, 0, 0, 0, 2.033, 1, -6, 0, 0, 0, 0, 0, 0, -5, 1, -8), +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0.889019, 0.987915, -2.75022, 0, 0, 0, 0, 0, 0, 0.595381, 0.990112, -4.18814, 0, 0, 0, 0, 0, 0, -1.2854, 0.993652, -4.79623), "tilts": PackedFloat32Array(0, 0, 0, 0) } point_count = 4 @@ -19,7 +19,7 @@ height = 8.481 [node name="Path3D" type="Path3D" parent="." node_paths=PackedStringArray("_sprite", "_hitBox")] top_level = true -curve = SubResource("Curve3D_5hmi4") +curve = SubResource("Curve3D_i1cv2") script = ExtResource("1_inha4") _sprite = NodePath("PathFollow3D/RigidBody3D/CollisionShape3D/Sprite3D") Cooldown = 0.7 @@ -29,7 +29,7 @@ _onHitSfx = ExtResource("3_32sc2") _hitBox = NodePath("PathFollow3D/RigidBody3D") [node name="PathFollow3D" type="PathFollow3D" parent="Path3D"] -transform = Transform3D(0.782564, 0, -0.622568, 0, 1, 0, 0.622568, 0, 0.782564, 0, 1, 0) +transform = Transform3D(0.95152, 0.00128604, -0.30758, 0, 0.999991, 0.00418112, 0.307583, -0.00397843, 0.951511, 0, 1, 0) loop = false tilt_enabled = false diff --git a/Player/Scorpio/Attacks/CutterShotAltFire.tscn b/Player/Scorpio/Attacks/CutterShotAltFire.tscn index 191c3f4..ec01d2f 100644 --- a/Player/Scorpio/Attacks/CutterShotAltFire.tscn +++ b/Player/Scorpio/Attacks/CutterShotAltFire.tscn @@ -5,9 +5,9 @@ [ext_resource type="AudioStream" uid="uid://ce40y3hln3twm" path="res://Audio/SFX/grass cutter.wav" id="2_qmvk7"] [ext_resource type="AudioStream" uid="uid://cat08h84wm5gm" path="res://Audio/SFX/ominous.wav" id="3_v1t2f"] -[sub_resource type="Curve3D" id="Curve3D_5hmi4"] +[sub_resource type="Curve3D" id="Curve3D_ocip8"] _data = { -"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -2.502, 1, -3.145, 0, 0, 0, 0, 0, 0, -2.033, 1, -6, 0, 0, 0, 0, 0, 0, 5, 1, -8), +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -0.889, 0.988, -2.75, 0, 0, 0, 0, 0, 0, -0.595, 0.99, -4.188, 0, 0, 0, 0, 0, 0, 1.285, 0.994, -4.796), "tilts": PackedFloat32Array(0, 0, 0, 0) } point_count = 4 @@ -19,7 +19,7 @@ height = 8.481 [node name="CutterShot" type="Path3D" parent="." node_paths=PackedStringArray("_sprite", "_hitBox")] top_level = true -curve = SubResource("Curve3D_5hmi4") +curve = SubResource("Curve3D_ocip8") script = ExtResource("1_7xtlh") _sprite = NodePath("PathFollow3D/RigidBody3D/CollisionShape3D/Sprite3D") Cooldown = 0.7 @@ -29,7 +29,7 @@ _onHitSfx = ExtResource("3_v1t2f") _hitBox = NodePath("PathFollow3D/RigidBody3D") [node name="PathFollow3D" type="PathFollow3D" parent="CutterShot"] -transform = Transform3D(0.782564, 0, 0.622568, 0, 1, 0, -0.622568, 0, 0.782564, 0, 1, 0) +transform = Transform3D(0.951515, -0.00127717, 0.307596, 1.16415e-10, 0.999991, 0.00415204, -0.307599, -0.00395073, 0.951506, 0, 1, 0) loop = false tilt_enabled = false diff --git a/Player/Scorpio/Scorpio.tscn b/Player/Scorpio/Scorpio.tscn index c6faf22..efeb9aa 100644 --- a/Player/Scorpio/Scorpio.tscn +++ b/Player/Scorpio/Scorpio.tscn @@ -10,7 +10,7 @@ size = Vector3(0.8, 3, 0.8) [node name="Scorpio" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55696, 0) -collision_layer = 2 +collision_layer = 18 motion_mode = 1 slide_on_ceiling = false script = ExtResource("1_gw30u") diff --git a/project.godot b/project.godot index c677f0f..26b0f3d 100644 --- a/project.godot +++ b/project.godot @@ -126,6 +126,7 @@ p2_altfire={ 3d_physics/layer_2="EnemyProjectile" 3d_physics/layer_3="EnemyHit" 3d_physics/layer_4="BossHit" +3d_physics/layer_5="Area Exit" 3d_physics/layer_9="ProjectileToWalls" [physics]