From bd8b3aafebb79f35de2d50fbc75695039a31b264 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Fri, 29 May 2026 00:24:54 -0600 Subject: [PATCH] Skip unknown treasure types in dTres_c::addData --- src/d/d_tresure.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/d/d_tresure.cpp b/src/d/d_tresure.cpp index 90044360c8..d0cc7e0fb6 100644 --- a/src/d/d_tresure.cpp +++ b/src/d/d_tresure.cpp @@ -6,6 +6,10 @@ #include "d/d_path.h" #include "SSystem/SComponent/c_math.h" +#if TARGET_PC +#include "dusk/logging.h" +#endif + static bool data_80450680 = true; dTres_c::typeGroupData_c* dTres_c::mTypeGroupData; @@ -49,11 +53,25 @@ void dTres_c::addData(dTres_c::list_class* p_list, s8 roomNo) { data_s* listData = p_list->field_0x4->getDataPointer(); typeGroupData_c* groupData = &mTypeGroupData[mNum]; for (int i = 0; i < p_list->field_0x0; i++, listData++, groupData++) { +#if TARGET_PC + if (mNum >= 0x40) { + DuskLog.warn("dTres_c::addData: treasure data overflow, skipping remaining entries"); + break; + } +#endif *(data_s*)groupData = *listData; groupData->mRoomNo = roomNo; groupData->mStatus = 0; u32 typeGroupNo = getTypeToTypeGroupNo(groupData->mType); +#if TARGET_PC + // Skip TPHD entries for now + if (typeGroupNo >= TYPE_GROUP_ENUM_NUMBER) { + DuskLog.warn("dTres_c::addData: unknown treasure type 0x{:02x}, skipping", groupData->mType); + mNum++; + continue; + } +#endif groupData->setNextDataPointer(NULL); groupData->setTypeGroupNo(typeGroupNo);