From 282a2eddb0471d109c1ce38b07d12af7061bdc2d Mon Sep 17 00:00:00 2001 From: Zenny Date: Tue, 25 Feb 2025 19:55:04 -0800 Subject: [PATCH] Change all enemy types to CharacterBody3D --- src/app/state/AppLogic.g.puml | 2 +- src/enemy/Enemy.cs | 192 +++++++++--------- .../10. Eden Pillar/Eden Pillar.tscn | 2 +- .../enemy_types/14. horse_head/HorseHead.tscn | 70 +++---- src/enemy/enemy_types/15. ox_face/OxFace.tscn | 70 ++----- .../3. filth_eater/FilthEater.tscn | 4 +- src/enemy/enemy_types/5. ballos/Ballos.tscn | 4 +- src/enemy/enemy_types/6. chariot/Chariot.tscn | 4 +- src/enemy/enemy_types/7. chinthe/Chinthe.tscn | 4 +- src/enemy/enemy_types/9. Agi/Agi.tscn | 4 +- src/enemy/state/EnemyLogic.g.puml | 10 +- src/game/GameLogic.g.puml | 10 +- src/player/state/PlayerLogic.g.puml | 10 +- 13 files changed, 179 insertions(+), 207 deletions(-) diff --git a/src/app/state/AppLogic.g.puml b/src/app/state/AppLogic.g.puml index 885c336b6..4197ba374 100644 --- a/src/app/state/AppLogic.g.puml +++ b/src/app/state/AppLogic.g.puml @@ -2,8 +2,8 @@ state "AppLogic State" as GameJamDungeon_AppLogic_State { state "SetupGameScene" as GameJamDungeon_AppLogic_State_SetupGameScene state "InGame" as GameJamDungeon_AppLogic_State_InGame - state "LoadingScreen" as GameJamDungeon_AppLogic_State_LoadingScreen state "MainMenu" as GameJamDungeon_AppLogic_State_MainMenu + state "LoadingScreen" as GameJamDungeon_AppLogic_State_LoadingScreen } GameJamDungeon_AppLogic_State_InGame --> GameJamDungeon_AppLogic_State_MainMenu : GameOver diff --git a/src/enemy/Enemy.cs b/src/enemy/Enemy.cs index 133d92e78..6252484b0 100644 --- a/src/enemy/Enemy.cs +++ b/src/enemy/Enemy.cs @@ -30,6 +30,9 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide #region Exports [Export] protected EnemyStatResource _enemyStatResource { get; set; } = default!; + + [Export] + private float _movementSpeed = 2f; #endregion #region Node Dependencies @@ -60,6 +63,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide private Timer _thinkTimer; + #region Godot methods public void Setup() { _enemyLogic = new EnemyLogic(); @@ -81,93 +85,6 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide _thinkTimer.Start(); } - private void NavAgent_TargetReached() - { - NavAgent.TargetPosition = _currentTarget; - } - - private void NavAgent_VelocityComputed(Vector3 safeVelocity) - { - if (CurrentHP <= 0) - return; - - _knockbackStrength = _knockbackStrength * 0.9f; - Velocity = safeVelocity + (_knockbackDirection * _knockbackStrength); - MoveAndSlide(); - } - - public void SetTarget(Vector3 target) - { - Task.Delay(TimeSpan.FromSeconds(1.5)).ContinueWith(_ => _currentTarget = new Vector3(target.X, -1.75f, target.Z)); - } - - public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false) - { - if (_currentHP.Value > 0) - { - if (!ignoreElementalResistance) - damage = CalculateElementalResistance(damage, elementType); - if (!ignoreDefense) - damage = CalculateDefenseResistance(damage); - if (isCriticalHit) - damage *= 2; - GD.Print($"Enemy Hit for {damage} damage."); - _currentHP.OnNext(_currentHP.Value - damage); - GD.Print("Current HP: " + _currentHP.Value); - - if (_currentHP.Value <= 0) - return; - - EnemyModelView.PlayHitAnimation(); - _enemyLogic.Input(new EnemyLogic.Input.Alerted()); - NavAgent_TargetReached(); - - if (Player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage)) - Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value - 5); - } - } - - public override void _PhysicsProcess(double delta) - { - if (CurrentHP <= 0) - return; - - if (_enemyLogic.Value is EnemyLogic.State.Attacking) - SetTarget(GlobalPosition); - - var nextPathPosition = NavAgent.GetNextPathPosition(); - - var newVelocity = GlobalPosition.DirectionTo(nextPathPosition) * 2f; - if (NavAgent.AvoidanceEnabled) - NavAgent.Velocity = newVelocity; - else - NavAgent_VelocityComputed(newVelocity); - - var lookDir = GlobalPosition + Velocity; - if (_enemyLogic.Value is not EnemyLogic.State.Attacking && (!lookDir.IsEqualApprox(GlobalPosition) || !Velocity.IsZeroApprox())) - LookAt(lookDir, Vector3.Up, true); - - var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer; - EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking); - } - - public void Knockback(float impulse, Vector3 direction) - { - _knockbackDirection = direction; - _knockbackStrength = 0.3f; - } - - public void Die() - { - _enemyLogic.Input(new EnemyLogic.Input.EnemyDefeated()); - CollisionShape.SetDeferred("disabled", true); - EnemyModelView.PlayDeathAnimation(); - var tweener = GetTree().CreateTween(); - tweener.TweenInterval(1.0f); - tweener.TweenCallback(Callable.From(QueueFree)); - GameEventDepot.OnEnemyDefeated(GlobalPosition, _enemyStatResource); - } - public void OnResolved() { EnemyBinding = _enemyLogic.Bind(); @@ -194,10 +111,77 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide PatrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f); } - public void OnExitTree() + public override void _PhysicsProcess(double delta) { - _enemyLogic.Stop(); - EnemyBinding.Dispose(); + CalculateVelocity(); + } + #endregion + + public virtual void TakeAction() + { + } + + public void SetTarget(Vector3 target) + { + Task.Delay(TimeSpan.FromSeconds(1.5)).ContinueWith(_ => _currentTarget = new Vector3(target.X, -1.75f, target.Z)); + } + + public virtual void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false) + { + if (_currentHP.Value > 0) + { + if (!ignoreElementalResistance) + damage = CalculateElementalResistance(damage, elementType); + if (!ignoreDefense) + damage = CalculateDefenseResistance(damage); + if (isCriticalHit) + damage *= 2; + GD.Print($"Enemy Hit for {damage} damage."); + _currentHP.OnNext(_currentHP.Value - damage); + GD.Print("Current HP: " + _currentHP.Value); + + if (_currentHP.Value <= 0) + return; + + EnemyModelView.PlayHitAnimation(); + _enemyLogic.Input(new EnemyLogic.Input.Alerted()); + NavAgent_TargetReached(); + + if (Player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage)) + Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value - 5); + } + } + + public void Knockback(float impulse, Vector3 direction) + { + _knockbackDirection = direction; + _knockbackStrength = 0.3f; + } + + public void Die() + { + _enemyLogic.Input(new EnemyLogic.Input.EnemyDefeated()); + CollisionShape.SetDeferred("disabled", true); + EnemyModelView.PlayDeathAnimation(); + var tweener = GetTree().CreateTween(); + tweener.TweenInterval(1.0f); + tweener.TweenCallback(Callable.From(QueueFree)); + GameEventDepot.OnEnemyDefeated(GlobalPosition, _enemyStatResource); + } + + private void NavAgent_TargetReached() + { + NavAgent.TargetPosition = _currentTarget; + } + + private void NavAgent_VelocityComputed(Vector3 safeVelocity) + { + if (CurrentHP <= 0) + return; + + _knockbackStrength = _knockbackStrength * 0.9f; + Velocity = safeVelocity + (_knockbackDirection * _knockbackStrength); + MoveAndSlide(); } private void OnPatrolTimeout() @@ -221,6 +205,30 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide } + private void CalculateVelocity() + { + if (CurrentHP <= 0) + return; + + if (_enemyLogic.Value is EnemyLogic.State.Attacking) + SetTarget(GlobalPosition); + + var nextPathPosition = NavAgent.GetNextPathPosition(); + + var newVelocity = GlobalPosition.DirectionTo(nextPathPosition) * 2f; + if (NavAgent.AvoidanceEnabled) + NavAgent.Velocity = newVelocity; + else + NavAgent_VelocityComputed(newVelocity); + + var lookDir = GlobalPosition + Velocity; + if (_enemyLogic.Value is not EnemyLogic.State.Attacking && (!lookDir.IsEqualApprox(GlobalPosition) || !Velocity.IsZeroApprox())) + LookAt(lookDir, Vector3.Up, true); + + var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer; + EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking); + } + private void OnAttackTimeout() { if (GlobalPosition.DistanceTo(Player.CurrentPosition) > 5f) @@ -284,7 +292,9 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide return Mathf.Max(incomingDamage - _enemyStatResource.CurrentDefense, 0.0); } - public virtual void TakeAction() + public void OnExitTree() { + _enemyLogic.Stop(); + EnemyBinding.Dispose(); } } diff --git a/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn b/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn index 8b35d1034..b48050153 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn +++ b/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn @@ -161,7 +161,7 @@ _surfaces = [{ blend_shape_mode = 0 shadow_mesh = SubResource("ArrayMesh_pocxj") -[node name="Node3D" type="Node3D"] +[node name="Eden Pillar" type="CharacterBody3D"] [node name="PILLAR EXPORT 1" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -11.4755) diff --git a/src/enemy/enemy_types/14. horse_head/HorseHead.tscn b/src/enemy/enemy_types/14. horse_head/HorseHead.tscn index 9c3294615..6693fa59f 100644 --- a/src/enemy/enemy_types/14. horse_head/HorseHead.tscn +++ b/src/enemy/enemy_types/14. horse_head/HorseHead.tscn @@ -1,27 +1,24 @@ [gd_scene load_steps=23 format=4 uid="uid://d1lmftfty1qr6"] [ext_resource type="Texture2D" uid="uid://2e4cp477ex0t" path="res://src/enemy/enemy_types/14. horse_head/Horse Head 1_Metal054C_1K-JPG_Color.jpg" id="1_1lmy0"] -[ext_resource type="Texture2D" uid="uid://bv60n7epxktw5" path="res://src/enemy/enemy_types/14. horse_head/Metal054C_1K-JPG_NormalDX.jpg" id="2_ftgvu"] [ext_resource type="Animation" uid="uid://bhsp32c05j2o5" path="res://src/enemy/enemy_types/14. horse_head/walking.res" id="3_4m0vj"] [ext_resource type="Animation" uid="uid://ccq41qrm1lduk" path="res://src/enemy/enemy_types/14. horse_head/walking2.res" id="4_jg316"] +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_pmi7e"] +radius = 3.98697 +height = 25.6239 + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tv6dm"] resource_name = "Material" cull_mode = 2 -albedo_texture = ExtResource("1_1lmy0") -roughness = 0.5 -normal_enabled = true -normal_scale = 16.0 -normal_texture = ExtResource("2_ftgvu") shading_mode = 0 +albedo_texture = ExtResource("1_1lmy0") [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hbmlb"] resource_name = "Material.004" cull_mode = 2 -albedo_color = Color(0.906414, 0.0490838, 0, 1) -metallic = 1.0 -roughness = 0.0 shading_mode = 0 +albedo_color = Color(0.906414, 0.0490838, 0, 1) [sub_resource type="ArrayMesh" id="ArrayMesh_e6ony"] resource_name = "Horse Head 1_0_Cube_037" @@ -1145,12 +1142,12 @@ tracks/38/keys = PackedFloat32Array(0, 1, -0.457231, -0.539389, 0.539388, 0.4572 [sub_resource type="AnimationLibrary" id="AnimationLibrary_h244y"] _data = { -"ATTACK BIG": SubResource("Animation_nem1a"), -"ATTACK SMALLER": SubResource("Animation_wf6hu"), -"IDLE": SubResource("Animation_bsekl"), -"walk": SubResource("Animation_xke0q"), -"walking": ExtResource("3_4m0vj"), -"walking2": ExtResource("4_jg316") +&"ATTACK BIG": SubResource("Animation_nem1a"), +&"ATTACK SMALLER": SubResource("Animation_wf6hu"), +&"IDLE": SubResource("Animation_bsekl"), +&"walk": SubResource("Animation_xke0q"), +&"walking": ExtResource("3_4m0vj"), +&"walking2": ExtResource("4_jg316") } [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_y7trl"] @@ -1185,8 +1182,11 @@ states/IDLE/position = Vector2(361, 90) states/Start/position = Vector2(188, 78) transitions = ["Start", "IDLE", SubResource("AnimationNodeStateMachineTransition_6wk5k"), "IDLE", "ATTACK SMALLER", SubResource("AnimationNodeStateMachineTransition_bo45h"), "ATTACK SMALLER", "IDLE", SubResource("AnimationNodeStateMachineTransition_xnlt1"), "ATTACK BIG", "IDLE", SubResource("AnimationNodeStateMachineTransition_0it21"), "IDLE", "ATTACK BIG", SubResource("AnimationNodeStateMachineTransition_2cju5")] -[node name="Horse Head 1_0" type="Node3D"] -transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -1, 0) +[node name="Horse Head 1_0" type="CharacterBody3D"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12.5281, 0) +shape = SubResource("CapsuleShape3D_pmi7e") [node name="Armature" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.82093, 13.2705, 2.05488) @@ -1196,7 +1196,7 @@ bones/0/name = "spine1" bones/0/parent = -1 bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735) bones/0/enabled = true -bones/0/position = Vector3(0.0996386, -0.286246, -1.53144) +bones/0/position = Vector3(0.0996386, -0.327006, -1.53144) bones/0/rotation = Quaternion(0.0256267, -0.805691, 0.0118477, 0.591662) bones/0/scale = Vector3(1, 1, 1) bones/1/name = "spine0" @@ -1225,7 +1225,7 @@ bones/4/parent = 3 bones/4/rest = Transform3D(0.901905, -0.410135, 0.135488, 0.412416, 0.910915, 0.0120912, -0.128377, 0.0449723, 0.990705, 2.5332e-07, 0.990515, -7.07805e-08) bones/4/enabled = true bones/4/position = Vector3(2.5332e-07, 0.990515, -7.07805e-08) -bones/4/rotation = Quaternion(0.00725459, 0.0669693, 0.208701, 0.975657) +bones/4/rotation = Quaternion(0.00351221, 0.0648028, 0.201749, 0.977285) bones/4/scale = Vector3(1, 1, 1) bones/5/name = "neck4" bones/5/parent = 4 @@ -1239,7 +1239,7 @@ bones/6/parent = 5 bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0) bones/6/enabled = true bones/6/position = Vector3(3.65078e-07, 1.40318, 0) -bones/6/rotation = Quaternion(-0.342358, 0.0520427, -0.492847, 0.798238) +bones/6/rotation = Quaternion(-0.338283, 0.0516599, -0.481248, 0.807029) bones/6/scale = Vector3(1, 1, 1) bones/7/name = "Bone.007" bones/7/parent = 6 @@ -1274,7 +1274,7 @@ bones/11/parent = 1 bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07) bones/11/enabled = true bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07) -bones/11/rotation = Quaternion(-0.806446, -0.0804107, -0.0235047, 0.585343) +bones/11/rotation = Quaternion(-0.808681, -0.0845387, -0.0236005, 0.581662) bones/11/scale = Vector3(1, 1, 1) bones/12/name = "arm2_L" bones/12/parent = 11 @@ -1301,7 +1301,7 @@ bones/15/name = "arm1_R" bones/15/parent = 1 bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097) bones/15/enabled = true -bones/15/position = Vector3(-0.201139, 3.63969, 0.0776347) +bones/15/position = Vector3(-0.192226, 3.57115, 0.090595) bones/15/rotation = Quaternion(-0.502686, 0.531044, 0.680821, -0.0422068) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "arm2_R" @@ -1316,7 +1316,7 @@ bones/17/parent = 16 bones/17/rest = Transform3D(0.998789, 0.0488077, -0.00615137, -0.0491113, 0.996528, -0.0672226, 0.00284903, 0.0674433, 0.997719, -5.21541e-08, 3.04263, -1.31503e-06) bones/17/enabled = true bones/17/position = Vector3(-5.21541e-08, 3.04263, -1.31503e-06) -bones/17/rotation = Quaternion(-0.0442975, 0.0973027, 0.265491, 0.958167) +bones/17/rotation = Quaternion(-0.0342708, 0.0969672, 0.269013, 0.95763) bones/17/scale = Vector3(1, 1, 1) bones/18/name = "hand_R" bones/18/parent = 17 @@ -1329,7 +1329,7 @@ bones/19/name = "hip_L" bones/19/parent = -1 bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735) bones/19/enabled = true -bones/19/position = Vector3(0.147751, -0.286156, -1.49267) +bones/19/position = Vector3(0.147751, -0.309744, -1.49267) bones/19/rotation = Quaternion(0.427793, 0.34021, 0.687061, -0.478745) bones/19/scale = Vector3(1, 1, 1) bones/20/name = "leg1_L" @@ -1337,14 +1337,14 @@ bones/20/parent = 19 bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07) bones/20/enabled = true bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07) -bones/20/rotation = Quaternion(-0.437515, -0.325624, -0.3698, 0.752195) +bones/20/rotation = Quaternion(-0.436429, -0.326977, -0.371469, 0.751416) bones/20/scale = Vector3(1, 1, 1) bones/21/name = "leg2_L" bones/21/parent = 20 bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07) bones/21/enabled = true bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07) -bones/21/rotation = Quaternion(-0.0475833, 0.0018895, 0.380622, 0.923504) +bones/21/rotation = Quaternion(-0.0481117, 0.00188585, 0.384848, 0.921723) bones/21/scale = Vector3(1, 1, 1) bones/22/name = "foot1_L" bones/22/parent = 21 @@ -1378,7 +1378,7 @@ bones/26/name = "hip_R" bones/26/parent = -1 bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735) bones/26/enabled = true -bones/26/position = Vector3(0.0289172, -0.300728, -1.59603) +bones/26/position = Vector3(0.0289171, -0.316454, -1.59603) bones/26/rotation = Quaternion(0.695067, -0.09936, -0.377924, -0.603475) bones/26/scale = Vector3(1, 1, 1) bones/27/name = "leg1_R" @@ -1386,14 +1386,14 @@ bones/27/parent = 26 bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07) bones/27/enabled = true bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07) -bones/27/rotation = Quaternion(-0.317211, 0.174303, 0.18392, 0.913876) +bones/27/rotation = Quaternion(-0.315472, 0.175536, 0.184059, 0.914214) bones/27/scale = Vector3(1, 1, 1) bones/28/name = "leg2_R" bones/28/parent = 27 bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09) bones/28/enabled = true bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09) -bones/28/rotation = Quaternion(-0.268385, 0.0202194, -0.175117, 0.947046) +bones/28/rotation = Quaternion(-0.271351, 0.0201937, -0.177053, 0.94584) bones/28/scale = Vector3(1, 1, 1) bones/29/name = "foot1_R" bones/29/parent = 28 @@ -1429,20 +1429,20 @@ mesh = SubResource("ArrayMesh_e6ony") skin = SubResource("Skin_k5bce") [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"] -transform = Transform3D(-0.370165, -0.13327, -0.919357, -0.260549, -0.935039, 0.240449, -0.891679, 0.328543, 0.311396, -2.00357, 8.78221, 6.14921) +transform = Transform3D(-0.370164, -0.13327, -0.919357, -0.272599, -0.930504, 0.244644, -0.88807, 0.341175, 0.30811, -2.00357, 8.76587, 6.20064) bone_name = "TOP OF SKULL" bone_idx = 8 [node name="OmniLight3D" type="OmniLight3D" parent="Armature/Skeleton3D/BoneAttachment3D"] -transform = Transform3D(9.98467, 0.548583, -0.0733516, -0.546831, 9.98256, 0.222701, 0.0854423, -0.218348, 9.99725, 0.544723, 0.32165, -0.26595) +transform = Transform3D(0.998452, 0.0551334, -0.00736901, -0.0549564, 0.998238, 0.0223826, 0.00859013, -0.0219431, 0.999722, 0.583, 1.054, -0.174) light_color = Color(0, 0.584314, 0.317647, 1) -light_energy = 10.187 -omni_range = 0.309 -omni_attenuation = 0.023 +light_energy = 1.442 +omni_range = 3.003 +omni_attenuation = -3.04 [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { -"": SubResource("AnimationLibrary_h244y") +&"": SubResource("AnimationLibrary_h244y") } [node name="AnimationTree" type="AnimationTree" parent="."] diff --git a/src/enemy/enemy_types/15. ox_face/OxFace.tscn b/src/enemy/enemy_types/15. ox_face/OxFace.tscn index 80501efff..a50ce8a2f 100644 --- a/src/enemy/enemy_types/15. ox_face/OxFace.tscn +++ b/src/enemy/enemy_types/15. ox_face/OxFace.tscn @@ -1,33 +1,10 @@ -[gd_scene load_steps=33 format=4 uid="uid://6dnsw37d1uw4"] +[gd_scene load_steps=30 format=4 uid="uid://6dnsw37d1uw4"] [ext_resource type="Texture2D" uid="uid://dp6hwvuhfkji8" path="res://src/enemy/enemy_types/15. ox_face/models/OX FACE_Metal054C_1K-JPG_Color.jpg" id="1_iwcva"] [ext_resource type="Script" uid="uid://dwpswg0xufxa7" path="res://src/boss/Boss.cs" id="1_xakg1"] -[ext_resource type="Texture2D" uid="uid://cqmo71mabu36n" path="res://src/enemy/enemy_types/15. ox_face/models/OX FACE_Metal054C_1K-JPG_Displacement.jpg" id="2_cgb4w"] -[ext_resource type="Script" uid="uid://dnkmr0eq1sij0" path="res://src/enemy/EnemyStatResource.cs" id="2_hdr5w"] [ext_resource type="Material" uid="uid://brwu51ylevbmg" path="res://src/enemy/enemy_types/14. horse_head/BossHit.tres" id="3_hub8w"] [ext_resource type="AnimationLibrary" uid="uid://bw3wtqy3lcbfi" path="res://src/enemy/enemy_types/14. horse_head/OxFace.res" id="4_4vicn"] -[sub_resource type="Resource" id="Resource_xpwds"] -script = ExtResource("2_hdr5w") -CurrentHP = 80.0 -MaximumHP = 80.0 -CurrentAttack = 20 -CurrentDefense = 3 -MaxAttack = 20 -MaxDefense = 3 -Luck = 0.05 -TelluricResistance = 0.0 -AeolicResistance = 0.0 -HydricResistance = 0.0 -IgneousResistance = 0.0 -FerrumResistance = 0.0 -TelluricDamageBonus = 0.0 -AeolicDamageBonus = 0.0 -BaseHydricDamageBonus = 0.0 -IgneousDamageBonus = 0.0 -FerrumDamageBonus = 0.0 -DropsSoulGemChance = 0.75 - [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_7uhtm"] radius = 9.4071 height = 34.1332 @@ -35,11 +12,8 @@ height = 34.1332 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y7226"] resource_name = "Material" cull_mode = 2 -albedo_texture = ExtResource("1_iwcva") -roughness = 0.5 -normal_enabled = true -normal_texture = ExtResource("2_cgb4w") shading_mode = 0 +albedo_texture = ExtResource("1_iwcva") [sub_resource type="ArrayMesh" id="ArrayMesh_5ew54"] resource_name = "OX FACE_Cube_037" @@ -302,9 +276,9 @@ tracks/1/keys = { [sub_resource type="AnimationLibrary" id="AnimationLibrary_q1mdo"] _data = { -"Defeated": SubResource("Animation_o4lik"), -"Hit": SubResource("Animation_g7bmo"), -"RESET": SubResource("Animation_kml6n") +&"Defeated": SubResource("Animation_o4lik"), +&"Hit": SubResource("Animation_g7bmo"), +&"RESET": SubResource("Animation_kml6n") } [sub_resource type="BoxShape3D" id="BoxShape3D_hcxtl"] @@ -314,10 +288,8 @@ size = Vector3(14.6793, 34.6932, 15.6199) size = Vector3(17.7339, 22.0363, 19.9701) [node name="OX FACE" type="CharacterBody3D"] -transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, 0, -1, 0) axis_lock_linear_y = true script = ExtResource("1_xakg1") -BossResource = SubResource("Resource_xpwds") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.212402, 16.2998, 0) @@ -331,7 +303,7 @@ bones/0/name = "spine1" bones/0/parent = -1 bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735) bones/0/enabled = true -bones/0/position = Vector3(-0.259283, -0.9404, -1.97534) +bones/0/position = Vector3(-0.259495, -0.964674, -1.97371) bones/0/rotation = Quaternion(0.0915277, -0.692111, -0.0341586, 0.715149) bones/0/scale = Vector3(1, 1, 1) bones/1/name = "spine0" @@ -374,7 +346,7 @@ bones/6/parent = 5 bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0) bones/6/enabled = true bones/6/position = Vector3(3.65078e-07, 1.40318, 0) -bones/6/rotation = Quaternion(-0.0777813, -0.305234, -0.744803, 0.58826) +bones/6/rotation = Quaternion(-0.0695106, -0.302252, -0.744709, 0.590949) bones/6/scale = Vector3(1, 1, 1) bones/7/name = "Bone.007" bones/7/parent = 6 @@ -409,7 +381,7 @@ bones/11/parent = 1 bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07) bones/11/enabled = true bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07) -bones/11/rotation = Quaternion(-0.786087, -0.0628615, 0.0690646, 0.61102) +bones/11/rotation = Quaternion(-0.784678, -0.0616085, 0.0719287, 0.612626) bones/11/scale = Vector3(1, 0.999999, 1) bones/12/name = "arm2_L" bones/12/parent = 11 @@ -437,21 +409,21 @@ bones/15/parent = 1 bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097) bones/15/enabled = true bones/15/position = Vector3(0.00107886, 3.8461, -0.0821095) -bones/15/rotation = Quaternion(-0.209386, 0.735858, 0.623768, -0.15995) +bones/15/rotation = Quaternion(-0.210717, 0.737949, 0.621558, -0.157148) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "arm2_R" bones/16/parent = 15 bones/16/rest = Transform3D(0.999962, -0.00846545, 0.00203661, 0.00853768, 0.99922, -0.0385481, -0.0017087, 0.038564, 0.999254, -4.28408e-07, 3.65838, -2.16067e-06) bones/16/enabled = true bones/16/position = Vector3(-4.28408e-07, 3.65838, -2.16067e-06) -bones/16/rotation = Quaternion(-0.424022, 0.233298, -0.489444, 0.725412) +bones/16/rotation = Quaternion(-0.486067, -0.16412, -0.362283, 0.778174) bones/16/scale = Vector3(1, 1, 0.999999) bones/17/name = "arm3_R" bones/17/parent = 16 bones/17/rest = Transform3D(0.998789, 0.0488077, -0.00615137, -0.0491113, 0.996528, -0.0672226, 0.00284903, 0.0674433, 0.997719, -5.21541e-08, 3.04263, -1.31503e-06) bones/17/enabled = true bones/17/position = Vector3(-5.21541e-08, 3.04263, -1.31503e-06) -bones/17/rotation = Quaternion(-0.0553628, -0.0361614, 0.62832, 0.77514) +bones/17/rotation = Quaternion(-0.0553629, -0.0361614, 0.62832, 0.77514) bones/17/scale = Vector3(1, 0.999999, 1) bones/18/name = "hand_R" bones/18/parent = 17 @@ -464,22 +436,22 @@ bones/19/name = "hip_L" bones/19/parent = -1 bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735) bones/19/enabled = true -bones/19/position = Vector3(-0.290163, -1.11395, -2.01735) -bones/19/rotation = Quaternion(0.608697, 0.3155, 0.575514, -0.445793) +bones/19/position = Vector3(-0.309713, -1.13244, -1.95293) +bones/19/rotation = Quaternion(0.612907, 0.310686, 0.569103, -0.451598) bones/19/scale = Vector3(1, 1, 1) bones/20/name = "leg1_L" bones/20/parent = 19 bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07) bones/20/enabled = true bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07) -bones/20/rotation = Quaternion(-0.30808, -0.444485, -0.267974, 0.797314) +bones/20/rotation = Quaternion(-0.312383, -0.439877, -0.275127, 0.795758) bones/20/scale = Vector3(1, 0.999999, 1) bones/21/name = "leg2_L" bones/21/parent = 20 bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07) bones/21/enabled = true bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07) -bones/21/rotation = Quaternion(-0.060049, 0.00130142, 0.4861, 0.871837) +bones/21/rotation = Quaternion(-0.0601787, 0.00130054, 0.487149, 0.871242) bones/21/scale = Vector3(1, 1, 1) bones/22/name = "foot1_L" bones/22/parent = 21 @@ -513,7 +485,7 @@ bones/26/name = "hip_R" bones/26/parent = -1 bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735) bones/26/enabled = true -bones/26/position = Vector3(-0.290475, -1.11395, -2.01735) +bones/26/position = Vector3(-0.233013, -1.11395, -2.01774) bones/26/rotation = Quaternion(0.608697, -0.3155, -0.575514, -0.445793) bones/26/scale = Vector3(1, 1, 1) bones/27/name = "leg1_R" @@ -521,14 +493,14 @@ bones/27/parent = 26 bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07) bones/27/enabled = true bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07) -bones/27/rotation = Quaternion(-0.209385, 0.420724, 0.143017, 0.871031) +bones/27/rotation = Quaternion(-0.20765, 0.421681, 0.141851, 0.871175) bones/27/scale = Vector3(1, 0.999999, 1) bones/28/name = "leg2_R" bones/28/parent = 27 bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09) bones/28/enabled = true bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09) -bones/28/rotation = Quaternion(-0.0643786, -0.00115414, -0.513993, 0.855374) +bones/28/rotation = Quaternion(-0.0640299, -0.00115644, -0.51121, 0.857067) bones/28/scale = Vector3(1, 1, 1) bones/29/name = "foot1_R" bones/29/parent = 28 @@ -560,7 +532,7 @@ bones/32/rotation = Quaternion(0.456756, 0.539878, -0.539587, -0.456893) bones/32/scale = Vector3(1, 1, 1) [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"] -transform = Transform3D(-0.300929, -0.0901167, -0.949379, -0.328078, -0.924976, 0.191792, -0.895436, 0.369186, 0.248787, -1.6582, 8.32712, 4.94593) +transform = Transform3D(-0.291501, -0.0753865, -0.953595, -0.329854, -0.927824, 0.174181, -0.897899, 0.365322, 0.245594, -1.66677, 8.29928, 4.94854) bone_name = "TOP OF SKULL" bone_idx = 8 @@ -577,7 +549,7 @@ skin = SubResource("Skin_e330f") [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { -"": ExtResource("4_4vicn") +&"": ExtResource("4_4vicn") } [node name="AnimationTree" type="AnimationTree" parent="."] @@ -593,7 +565,7 @@ wait_time = 3.5 [node name="HitAnimation" type="AnimationPlayer" parent="."] unique_name_in_owner = true libraries = { -"": SubResource("AnimationLibrary_q1mdo") +&"": SubResource("AnimationLibrary_q1mdo") } [node name="Hitbox" type="Area3D" parent="."] diff --git a/src/enemy/enemy_types/3. filth_eater/FilthEater.tscn b/src/enemy/enemy_types/3. filth_eater/FilthEater.tscn index a6d65d5e4..ee4a43c76 100644 --- a/src/enemy/enemy_types/3. filth_eater/FilthEater.tscn +++ b/src/enemy/enemy_types/3. filth_eater/FilthEater.tscn @@ -39,15 +39,13 @@ Name = "Filth Eater" Description = "This guy grosses me out." metadata/_custom_type_script = ExtResource("4_5eid5") -[node name="FilthEater" type="RigidBody3D"] +[node name="FilthEater" type="CharacterBody3D"] process_mode = 1 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) collision_layer = 10 collision_mask = 11 axis_lock_linear_y = true axis_lock_angular_x = true -contact_monitor = true -max_contacts_reported = 1 script = ExtResource("1_fyc13") SecondaryAttackElementalType = 2 SecondaryAttackElementalDamageBonus = 1.15 diff --git a/src/enemy/enemy_types/5. ballos/Ballos.tscn b/src/enemy/enemy_types/5. ballos/Ballos.tscn index c1ce5823c..ca302f706 100644 --- a/src/enemy/enemy_types/5. ballos/Ballos.tscn +++ b/src/enemy/enemy_types/5. ballos/Ballos.tscn @@ -14,15 +14,13 @@ radius = 1.0 [sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"] radius = 1.20703 -[node name="Ballos" type="RigidBody3D"] +[node name="Ballos" type="CharacterBody3D"] process_mode = 1 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) collision_layer = 10 collision_mask = 11 axis_lock_linear_y = true axis_lock_angular_x = true -contact_monitor = true -max_contacts_reported = 1 script = ExtResource("1_v2urn") [node name="CollisionShape" type="CollisionShape3D" parent="."] diff --git a/src/enemy/enemy_types/6. chariot/Chariot.tscn b/src/enemy/enemy_types/6. chariot/Chariot.tscn index 6a827d51c..c687831e0 100644 --- a/src/enemy/enemy_types/6. chariot/Chariot.tscn +++ b/src/enemy/enemy_types/6. chariot/Chariot.tscn @@ -31,15 +31,13 @@ radius = 1.0 [sub_resource type="SphereShape3D" id="SphereShape3D_lqifn"] radius = 1.20703 -[node name="Chariot" type="RigidBody3D"] +[node name="Chariot" type="CharacterBody3D"] process_mode = 1 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) collision_layer = 10 collision_mask = 11 axis_lock_linear_y = true axis_lock_angular_x = true -contact_monitor = true -max_contacts_reported = 1 script = ExtResource("1_hqeyd") _enemyStatResource = SubResource("Resource_dvne1") diff --git a/src/enemy/enemy_types/7. chinthe/Chinthe.tscn b/src/enemy/enemy_types/7. chinthe/Chinthe.tscn index fc9d43f83..3793b7ec5 100644 --- a/src/enemy/enemy_types/7. chinthe/Chinthe.tscn +++ b/src/enemy/enemy_types/7. chinthe/Chinthe.tscn @@ -14,14 +14,12 @@ radius = 1.0 [sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"] radius = 1.20703 -[node name="Chinthe" type="RigidBody3D"] +[node name="Chinthe" type="CharacterBody3D"] process_mode = 1 collision_layer = 10 collision_mask = 11 axis_lock_linear_y = true axis_lock_angular_x = true -contact_monitor = true -max_contacts_reported = 1 script = ExtResource("1_vw2ww") [node name="CollisionShape" type="CollisionShape3D" parent="."] diff --git a/src/enemy/enemy_types/9. Agi/Agi.tscn b/src/enemy/enemy_types/9. Agi/Agi.tscn index cbd901781..8eea86840 100644 --- a/src/enemy/enemy_types/9. Agi/Agi.tscn +++ b/src/enemy/enemy_types/9. Agi/Agi.tscn @@ -33,15 +33,13 @@ radius = 1.0 [sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"] radius = 1.20703 -[node name="Agi" type="RigidBody3D"] +[node name="Agi" type="CharacterBody3D"] process_mode = 1 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) collision_layer = 10 collision_mask = 11 axis_lock_linear_y = true axis_lock_angular_x = true -contact_monitor = true -max_contacts_reported = 1 script = ExtResource("1_2bycu") _enemyStatResource = SubResource("Resource_o3b7p") diff --git a/src/enemy/state/EnemyLogic.g.puml b/src/enemy/state/EnemyLogic.g.puml index 72ff7d28c..ca2c6d206 100644 --- a/src/enemy/state/EnemyLogic.g.puml +++ b/src/enemy/state/EnemyLogic.g.puml @@ -1,12 +1,12 @@ @startuml EnemyLogic state "EnemyLogic State" as GameJamDungeon_EnemyLogic_State { state "Alive" as GameJamDungeon_EnemyLogic_State_Alive { - state "Activated" as GameJamDungeon_EnemyLogic_State_Activated { - state "Attacking" as GameJamDungeon_EnemyLogic_State_Attacking - state "FollowPlayer" as GameJamDungeon_EnemyLogic_State_FollowPlayer - state "Patrolling" as GameJamDungeon_EnemyLogic_State_Patrolling - } state "Idle" as GameJamDungeon_EnemyLogic_State_Idle + state "Activated" as GameJamDungeon_EnemyLogic_State_Activated { + state "Patrolling" as GameJamDungeon_EnemyLogic_State_Patrolling + state "FollowPlayer" as GameJamDungeon_EnemyLogic_State_FollowPlayer + state "Attacking" as GameJamDungeon_EnemyLogic_State_Attacking + } } state "Defeated" as GameJamDungeon_EnemyLogic_State_Defeated } diff --git a/src/game/GameLogic.g.puml b/src/game/GameLogic.g.puml index 1b460d73d..fce3694da 100644 --- a/src/game/GameLogic.g.puml +++ b/src/game/GameLogic.g.puml @@ -1,15 +1,15 @@ @startuml GameLogic state "GameLogic State" as GameJamDungeon_GameLogic_State { - state "GameStarted" as GameJamDungeon_GameLogic_State_GameStarted state "Playing" as GameJamDungeon_GameLogic_State_Playing { - state "AskForTeleport" as GameJamDungeon_GameLogic_State_AskForTeleport state "FloorClearedDecisionState" as GameJamDungeon_GameLogic_State_FloorClearedDecisionState - state "InventoryOpened" as GameJamDungeon_GameLogic_State_InventoryOpened - state "MinimapOpen" as GameJamDungeon_GameLogic_State_MinimapOpen - state "Paused" as GameJamDungeon_GameLogic_State_Paused state "Resuming" as GameJamDungeon_GameLogic_State_Resuming + state "AskForTeleport" as GameJamDungeon_GameLogic_State_AskForTeleport + state "InventoryOpened" as GameJamDungeon_GameLogic_State_InventoryOpened + state "Paused" as GameJamDungeon_GameLogic_State_Paused + state "MinimapOpen" as GameJamDungeon_GameLogic_State_MinimapOpen } state "Quit" as GameJamDungeon_GameLogic_State_Quit + state "GameStarted" as GameJamDungeon_GameLogic_State_GameStarted } GameJamDungeon_GameLogic_State_AskForTeleport --> GameJamDungeon_GameLogic_State_FloorClearedDecisionState : FloorExitReached diff --git a/src/player/state/PlayerLogic.g.puml b/src/player/state/PlayerLogic.g.puml index 8f57bf9d5..aaad8680a 100644 --- a/src/player/state/PlayerLogic.g.puml +++ b/src/player/state/PlayerLogic.g.puml @@ -1,11 +1,11 @@ @startuml PlayerLogic state "PlayerLogic State" as GameJamDungeon_PlayerLogic_State { - state "Alive" as GameJamDungeon_PlayerLogic_State_Alive { - state "Attacking" as GameJamDungeon_PlayerLogic_State_Attacking - state "Idle" as GameJamDungeon_PlayerLogic_State_Idle - } - state "Dead" as GameJamDungeon_PlayerLogic_State_Dead state "Disabled" as GameJamDungeon_PlayerLogic_State_Disabled + state "Dead" as GameJamDungeon_PlayerLogic_State_Dead + state "Alive" as GameJamDungeon_PlayerLogic_State_Alive { + state "Idle" as GameJamDungeon_PlayerLogic_State_Idle + state "Attacking" as GameJamDungeon_PlayerLogic_State_Attacking + } } GameJamDungeon_PlayerLogic_State_Alive --> GameJamDungeon_PlayerLogic_State_Alive : PhysicsTick