From 43817ea4e5553d97b0c9a7171cb03d03de7ec68c Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Thu, 11 Jun 2026 02:07:44 -0700 Subject: [PATCH] fix los fairy --- include/dusk/map_loader_definitions.h | 44 +++++++++++++++++++++++++++ src/d/actor/d_a_npc_fairy_seirei.cpp | 16 ++++++++-- src/dusk/tphd/HdAssetLayer.cpp | 3 +- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/include/dusk/map_loader_definitions.h b/include/dusk/map_loader_definitions.h index 0ffda772ba..69e2ec0702 100644 --- a/include/dusk/map_loader_definitions.h +++ b/include/dusk/map_loader_definitions.h @@ -602,6 +602,50 @@ static const auto gameRegions = std::to_array({ MapEntry("Grotto 5", "D_SB09", { {4, {0, 1}}, }), + MapEntry("HD: Cave Of Shadows", "D_SB11", { + // ordered by floor rather than room number + {19, {0}}, + {35, {0}}, + {21, {0}}, + {23, {0}}, + {10, {0}}, + {25, {0}}, + {26, {0}}, + {8, {0}}, + {5, {0}}, + {28, {0}}, + {47, {0}}, + {15, {0}}, + {22, {0}}, + {33, {0}}, + {31, {0}}, + {7, {0}}, + {13, {0}}, + {46, {0}}, + {48, {0}}, + {34, {0}}, + {2, {0}}, + {36, {0}}, + {27, {0}}, + {32, {0}}, + {18, {0}}, + {3, {0}}, + {44, {0}}, + {40, {0}}, + {4, {0}}, + {30, {0}}, + {29, {0}}, + {17, {0}}, + {41, {0}}, + {43, {0}}, + {16, {0}}, + {38, {0}}, + {1, {0}}, + {42, {0}}, + {45, {0}}, + {49, {0}}, + } + ), }), RegionEntry("Misc", { MapEntry("Title Screen / King Bulblin 1", "F_SP102", { diff --git a/src/d/actor/d_a_npc_fairy_seirei.cpp b/src/d/actor/d_a_npc_fairy_seirei.cpp index 4681234346..81acb97618 100644 --- a/src/d/actor/d_a_npc_fairy_seirei.cpp +++ b/src/d/actor/d_a_npc_fairy_seirei.cpp @@ -10,8 +10,11 @@ #include -static DUSK_CONSTEXPR daNpcT_evtData_c l_evtList[1] = { +static DUSK_CONSTEXPR daNpcT_evtData_c l_evtList[DUSK_IF_ELSE(2, 1)] = { {"", 0}, +#if TARGET_PC + {"DEFAULT_GETITEM", 0}, +#endif }; static DUSK_CONST char* l_resNameList[2] = { @@ -145,7 +148,7 @@ int daNpc_FairySeirei_c::Draw() { int daNpc_FairySeirei_c::isDelete() { int ret = 0; - if (daNpcT_chkEvtBit(0x1F9) == false) { + if (IF_DUSK(mType != 4 &&) daNpcT_chkEvtBit(0x1F9) == false) { ret = 1; } return ret; @@ -359,6 +362,15 @@ int daNpc_FairySeirei_c::talk(int param_0) { } if (fopAcM_IsExecuting(mItemPartnerId)) { mTalking = TRUE; + + #if TARGET_PC + if (dusk::tphd_active() && getType() == 4) { + mEvtNo = 1; + field_0xe33 = true; + mSpeakEvent = true; + } + #endif + evtChange(); } } else { diff --git a/src/dusk/tphd/HdAssetLayer.cpp b/src/dusk/tphd/HdAssetLayer.cpp index afadf121b7..e6db8d56d5 100644 --- a/src/dusk/tphd/HdAssetLayer.cpp +++ b/src/dusk/tphd/HdAssetLayer.cpp @@ -807,7 +807,7 @@ void rebuild_hd_overlay_locked() { } std::error_code ec; - const auto resRoot = g_contentPath / "res"; + const auto resRoot = g_contentPath; if (!std::filesystem::is_directory(resRoot, ec)) { HdLog.warn("HD content path has no res directory: {}", g_contentPath.string()); return; @@ -834,7 +834,6 @@ void rebuild_hd_overlay_locked() { const auto& arcPath = it->path(); const std::string filename = arcPath.filename().string(); - if (!endsWithSuffixCI(filename, ".arc")) continue; const auto rel = arcPath.lexically_relative(g_contentPath); const std::string resPath = rel.generic_string();