Boss fixes, various changes

This commit is contained in:
2026-01-25 19:01:34 -08:00
parent 2622ed4423
commit 865934399d
25 changed files with 5770 additions and 371 deletions

View File

@@ -15,13 +15,13 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
[Node] public Marker3D PlayerSpawn { get; set; } = default!;
[Node] public Node3D HorseHeadStatue { get; set; } = default!;
//[Node] public Node3D HorseHeadStatue { get; set; } = default!;
[Node] public Node3D OxFaceStatue { get; set; } = default!;
[Node] public BossTypeA OxFace { get; set; } = default!;
[Node] public BossTypeA HorseFace { get; set; } = default!;
//[Node] public BossTypeA HorseFace { get; set; } = default!;
[Node] public Area3D ActivateTrap { get; set; } = default!;
@@ -35,45 +35,45 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
public void OnReady()
{
ActivateTrap.BodyEntered += ActivateTrap_BodyEntered;
_exit.AreaEntered += Exit_AreaEntered;
OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
ActivateTrap.BodyEntered += ActivateTrap_BodyEntered;
_exit.AreaEntered += Exit_AreaEntered;
OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
//HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
}
private void ActivateTrap_BodyEntered(Node3D body)
{
ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered;
StartBossFight();
ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered;
StartBossFight();
}
public void StartBossFight()
{
OxFaceStatue.Hide();
HorseHeadStatue.Hide();
OxFace.StartFight();
HorseFace.StartFight();
OxFaceStatue.Hide();
//HorseHeadStatue.Hide();
OxFace.StartFight();
//HorseFace.StartFight();
}
private void CheckForBossFightEnd()
{
if (OxFace.HealthComponent.CurrentHP.Value <= 0 && HorseFace.HealthComponent.CurrentHP.Value <= 0)
OnBossFightEnded();
if (OxFace.HealthComponent.CurrentHP.Value <= 0) //&& HorseFace.HealthComponent.CurrentHP.Value <= 0)
OnBossFightEnded();
}
public void OnBossFightEnded()
{
GateCollision.CallDeferred(MethodName.QueueFree);
LOCKEDGATE.Hide();
GateCollision.CallDeferred(MethodName.QueueFree);
LOCKEDGATE.Hide();
}
public void ExitReached()
=> Game.FloorExitReached();
=> Game.FloorExitReached();
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void InitializeDungeon()

View File

@@ -13,21 +13,18 @@ public partial class CorridorRoom : Node3D
[Dependency] IGame Game => this.DependOn<IGame>();
[Node] private Area3D _room { get; set; } = default!;
[Node] private MeshInstance3D _minimap { get; set; } = default!;
private bool _playerDiscoveredRoom = false;
public void Setup()
{
if (_room != null)
_room.BodyEntered += Room_BodyEntered;
if (_room != null)
_room.BodyEntered += Room_BodyEntered;
}
private void Room_BodyEntered(Node3D body)
{
if (!Game.CurrentFloor.FloorIsLoaded)
return;
if (body is IPlayer)
_minimap.Show();
if (!Game.CurrentFloor.FloorIsLoaded)
return;
}
}

View File

@@ -12,8 +12,6 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
{
public override void _Notification(int what) => this.Notify(what);
[Node] private MeshInstance3D _minimap { get; set; } = default!;
public bool IsPlayerInRoom => _isPlayerInRoom;
public bool PlayerDiscoveredRoom => _playerDiscoveredRoom;
@@ -28,47 +26,46 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
public void Setup()
{
_enemiesInRoom = [];
if (_room != null)
{
_room.BodyEntered += Room_BodyEntered;
_room.BodyExited += Room_BodyExited;
}
_enemiesInRoom = [];
if (_room != null)
{
_room.BodyEntered += Room_BodyEntered;
_room.BodyExited += Room_BodyExited;
}
}
private void Room_BodyExited(Node3D body)
{
if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
if (body is IPlayer)
_isPlayerInRoom = false;
if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
if (body is IPlayer)
_isPlayerInRoom = false;
}
private void Room_BodyEntered(Node3D body)
{
if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Add(enemy);
if (body is IPlayer)
if (_playerDiscoveredRoom)
_isPlayerInRoom = true;
else
OnPlayerDiscoveringRoom();
if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Add(enemy);
if (body is IPlayer)
if (_playerDiscoveredRoom)
_isPlayerInRoom = true;
else
OnPlayerDiscoveringRoom();
}
public ImmutableList<IEnemy> GetEnemiesInCurrentRoom()
{
return _enemiesInRoom;
return _enemiesInRoom;
}
private void OnPlayerDiscoveringRoom()
{
_isPlayerInRoom = true;
_playerDiscoveredRoom = true;
_minimap.Show();
_isPlayerInRoom = true;
_playerDiscoveredRoom = true;
}
public void OnExitTree()
{
_room.BodyEntered -= Room_BodyEntered;
_room.BodyExited -= Room_BodyExited;
_room.BodyEntered -= Room_BodyEntered;
_room.BodyExited -= Room_BodyExited;
}
}

View File

@@ -19,54 +19,57 @@ public partial class MonsterRoom : DungeonRoom
public override void _Ready()
{
SpawnItems();
SpawnItems();
}
public void SpawnEnemies(Godot.Collections.Dictionary<EnemyType, float> enemyInfo)
{
if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0))
return;
if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0))
return;
var rng = new RandomNumberGenerator();
rng.Randomize();
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
var rng = new RandomNumberGenerator();
rng.Randomize();
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
{
if (numberOfEnemiesToSpawn <= 0)
break;
numberOfEnemiesToSpawn--;
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
{
if (numberOfEnemiesToSpawn <= 0)
break;
numberOfEnemiesToSpawn--;
var index = rng.RandWeighted([.. enemyInfo.Values]);
var selectedEnemy = enemyInfo.ElementAt((int)index);
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key);
instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 1.75f, spawnPoint.Position.Z);
AddChild(instantiatedEnemy);
}
var index = rng.RandWeighted([.. enemyInfo.Values]);
var selectedEnemy = enemyInfo.ElementAt((int)index);
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key);
instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 0f, spawnPoint.Position.Z);
AddChild(instantiatedEnemy);
}
}
// RegularFlame.GetChildren();
//
private void SpawnItems()
{
if (ItemSpawnPoints == null)
return;
if (ItemSpawnPoints == null)
return;
var itemSpawnPoints = ItemSpawnPoints.GetChildren();
var rng = new RandomNumberGenerator();
rng.Randomize();
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
itemSpawnPoints.Shuffle();
var database = ItemDatabase.Instance;
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
{
if (numberOfItemsToSpawn <= 0)
break;
numberOfItemsToSpawn--;
var itemSpawnPoints = ItemSpawnPoints.GetChildren();
var rng = new RandomNumberGenerator();
rng.Randomize();
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
itemSpawnPoints.Shuffle();
var database = ItemDatabase.Instance;
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
{
if (numberOfItemsToSpawn <= 0)
break;
numberOfItemsToSpawn--;
var selectedItem = database.PickItem<InventoryItem>();
var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D;
duplicated.Position = new Vector3(spawnPoint.Position.X, -1.5f, spawnPoint.Position.Z);
AddChild(duplicated);
}
var selectedItem = database.PickItem<InventoryItem>();
var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D;
duplicated.Position = new Vector3(spawnPoint.Position.X, 0, spawnPoint.Position.Z);
AddChild(duplicated);
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,12 +1,10 @@
[gd_scene load_steps=86 format=4 uid="uid://5ja3qxn8h7iw"]
[gd_scene load_steps=84 format=4 uid="uid://5ja3qxn8h7iw"]
[ext_resource type="Script" uid="uid://tqyybt313web" path="res://src/map/dungeon/code/BossRoomA.cs" id="1_0h3lb"]
[ext_resource type="Texture2D" uid="uid://clc5f6yyc7sdw" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_concrete_0003_color_1k.png" id="2_lqw6r"]
[ext_resource type="PackedScene" uid="uid://j7xsk4fv6f4q" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER.2.glb" id="2_r3w6s"]
[ext_resource type="Texture2D" uid="uid://dipyrtjclqae1" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_COLUMN.jpg" id="3_ucaw1"]
[ext_resource type="Texture2D" uid="uid://d1xdvf8awh4bi" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_CHAIN_TEX.png" id="4_i4jo4"]
[ext_resource type="PackedScene" uid="uid://8yaqqojv4nuv" path="res://src/enemy/enemy_types/14. horse_head/HorseHeadStatue.tscn" id="24_r1rk5"]
[ext_resource type="PackedScene" uid="uid://2wibfnu2jvlv" path="res://src/enemy/enemy_types/14. horse_head/HorseFace.tscn" id="25_a482y"]
[ext_resource type="PackedScene" uid="uid://bvv5giqyrhtl1" path="res://src/enemy/enemy_types/15. ox_face/OxFaceStatue.tscn" id="26_futcf"]
[ext_resource type="PackedScene" uid="uid://6dnsw37d1uw4" path="res://src/enemy/enemy_types/15. ox_face/OxFace.tscn" id="27_g6y6v"]
[ext_resource type="Shader" uid="uid://dr68ani6ouefm" path="res://src/map/map shaders/B1 Cloud Roll.gdshader" id="30_lmjp4"]
@@ -662,6 +660,7 @@ script = ExtResource("1_0h3lb")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.601, -16.1094, 21.8408)
[node name="Collision" type="Node3D" parent="."]
visible = false
[node name="StaticBody3D2" type="StaticBody3D" parent="Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -88.2175, -1.5279, -0.620708)
@@ -800,6 +799,9 @@ transform = Transform3D(19.342, 0, 0, 0, 3.12, 0, 0, 0, 4.493, -118.232, 0.07999
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/StaticBody3D5"]
shape = SubResource("ConcavePolygonShape3D_1txpk")
[node name="GateCollision" type="Node3D" parent="Collision"]
unique_name_in_owner = true
[node name="Doors" type="Node3D" parent="."]
[node name="Spawn Points" type="Node3D" parent="."]
@@ -823,35 +825,17 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -240.071, 36.4279, 34.624)
visible = false
shape = SubResource("BoxShape3D_pkvyy")
[node name="Horse Head" type="Node3D" parent="Room"]
[node name="HorseHeadStatue" parent="Room/Horse Head" instance=ExtResource("24_r1rk5")]
unique_name_in_owner = true
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -102.157, -2.30863, 13.3664)
[node name="HorseFace" parent="Room/Horse Head" instance=ExtResource("25_a482y")]
unique_name_in_owner = true
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.3664)
visible = false
PrimaryAttackElementalType = null
PrimaryAttackElementalDamageBonus = null
InitialHP = null
[node name="OxFace" type="Node3D" parent="Room"]
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.3664)
[node name="OxFaceStatue" parent="Room/OxFace" instance=ExtResource("26_futcf")]
unique_name_in_owner = true
transform = Transform3D(6.66667, 0, 0, 0, 6.66667, 0, 0, 0, 6.66667, 54.7793, -11.9846, -4.01331)
visible = false
[node name="OxFace" parent="Room/OxFace" instance=ExtResource("27_g6y6v")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 58.194, 0.2072, -3.02661)
transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 58.194, -12.7983, -3.02698)
visible = false
PrimaryAttackElementalType = null
PrimaryAttackElementalDamageBonus = null
InitialHP = null
[node name="Exit" type="Area3D" parent="Room"]
unique_name_in_owner = true
@@ -864,6 +848,7 @@ transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 1.5910
shape = SubResource("BoxShape3D_1qa0g")
[node name="Minimap" type="Node3D" parent="."]
visible = false
[node name="Boss Floor Environment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1qa0g")
@@ -919,6 +904,7 @@ transform = Transform3D(0.565, 0, 0, 0, 0.565, 0, 0, 0, 0.565, -92.0811, -2.7728
transform = Transform3D(0.55, 0, 0, 0, 0.55, 0, 0, 0, 0.55, -92.04, -2.83756, 3.9847)
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
visible = false
navigation_mesh = SubResource("NavigationMesh_eanap")
[node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D"]
@@ -998,3 +984,6 @@ libraries = {
&"": SubResource("AnimationLibrary_cm2l0")
}
autoplay = "Animation"
[node name="LOCKEDGATE" type="MeshInstance3D" parent="."]
unique_name_in_owner = true

View File

@@ -10882,6 +10882,44 @@ billboard = 1
sprite_frames = SubResource("SpriteFrames_cnruo")
frame_progress = 0.271099
[node name="RegularFlame" type="Node3D" parent="Node3D/Flames"]
[node name="REGULAR FLAME" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME2" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME3" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME4" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME5" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME6" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="FAR SCENERY" type="MeshInstance3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -146.027, 31.1617, -329.541)
visible = false

View File

@@ -1,9 +1,8 @@
[gd_scene load_steps=23 format=3 uid="uid://tpgwccr6v43e"]
[gd_scene load_steps=20 format=3 uid="uid://tpgwccr6v43e"]
[ext_resource type="Script" uid="uid://dhollu4j3pynq" path="res://src/map/dungeon/code/MonsterRoom.cs" id="1_58osi"]
[ext_resource type="PackedScene" uid="uid://cljj515aklhoq" path="res://src/map/dungeon/models/Area 1/Tree/A1-Tree.glb" id="2_rr4cd"]
[ext_resource type="Texture2D" uid="uid://dw50ys561j8no" path="res://src/map/assets/DUST_1.png" id="4_e73oq"]
[ext_resource type="Texture2D" uid="uid://ba7ch5rr7qj1d" path="res://src/minimap/textures/Room Maps/mi_treeante.png" id="7_hy27a"]
[sub_resource type="BoxShape3D" id="BoxShape3D_q0uor"]
size = Vector3(7.93076, 7.25739, 0.543945)
@@ -76,14 +75,6 @@ size = Vector2(0.1, 0.1)
subdivide_width = 1
subdivide_depth = 1
[sub_resource type="PlaneMesh" id="PlaneMesh_jfnkd"]
size = Vector2(20, 16)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vyfk3"]
shading_mode = 0
albedo_texture = ExtResource("7_hy27a")
texture_filter = 0
[node name="Antechamber B" type="Node3D"]
script = ExtResource("1_58osi")
@@ -215,16 +206,6 @@ local_coords = true
process_material = SubResource("ParticleProcessMaterial_vqrrr")
draw_pass_1 = SubResource("QuadMesh_55djs")
[node name="Minimap" type="Node3D" parent="."]
[node name="Minimap" type="MeshInstance3D" parent="Minimap"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 8)
visible = false
mesh = SubResource("PlaneMesh_jfnkd")
skeleton = NodePath("../cor_t_intersection")
surface_material_override/0 = SubResource("StandardMaterial3D_vyfk3")
[node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.383, 6.70561, 8.71907)
light_energy = 1.904