#pragma once static bool bMessageShown = false; static std::unordered_set aModNames; inline bool DataFileExists(std::string filename, int maxSize = 1000000) { const auto path = std::format("Data\\{}", filename); return std::filesystem::exists(path) && std::filesystem::file_size(path) > maxSize; } inline void CheckBlacklist() { const auto dataHandler = RE::TESDataHandler::GetSingleton(); if (!dataHandler) { return; } std::string filenames[1] = { "Enderal_FS_More_Affinities.esp", }; for (short i = 0; i < 1; i++) { if (dataHandler->LookupLoadedModByName(filenames[i])) { aModNames.insert(filenames[i]); RE::DebugMessageBox(std::format("{} is incompatible with Enderal SE.\nCheck console for the list of flagged mods.", filenames[i]).c_str()); RE::ConsoleLog::GetSingleton()->Print(std::format("{} is incompatible", filenames[i]).c_str()); } } } inline void NotifyInvalidForm(const RE::TESForm* form) { if (!form) { if (!bMessageShown) { bMessageShown = true; RE::DebugMessageBox("Some of the installed mods are incompatible with Enderal."); } return; } if (!bMessageShown) { bMessageShown = true; RE::DebugMessageBox(std::format("{} is incompatible with Enderal.\nCheck console for the list of flagged mods.", form->GetFile()->fileName).c_str()); RE::ConsoleLog::GetSingleton()->Print("Some of the installed mods are incompatible! This list is not exhaustive, always use xEdit to verify mod compatibility."); } if (!aModNames.contains(form->GetFile()->fileName)) { aModNames.insert(form->GetFile()->fileName); RE::ConsoleLog::GetSingleton()->Print(std::format("{} is incompatible", form->GetFile()->fileName).c_str()); } } inline void CheckWorldspaces() { auto* form = RE::TESForm::LookupByID(0x3C); // Tamriel if (form) { RE::TESWorldSpace* world = form->As(); if (!world || std::string(world->editorID) != "MQP01Home") { NotifyInvalidForm(form); } } else { if (!bMessageShown) { bMessageShown = true; RE::ConsoleLog::GetSingleton()->Print("Some of the installed mods are incompatible! This list is not exhaustive, always use xEdit to verify mod compatibility."); RE::DebugMessageBox("Some of the installed mods are incompatible with Enderal."); } } form = RE::TESForm::LookupByID(0x16BB4); // RiftenWorld RE::TESWorldSpace* world = form ? form->As() : nullptr; if (world) { NotifyInvalidForm(form); } } inline void CheckSkyrimCells() { // FormIDs of all Skyrim cells. // 9 of them are commented out, because they are cells in Enderal as well. uint32_t formids[582] = { 0x0004B8FB, 0x000352C7, 0x000161E7, 0x00013A73, 0x000BA599, 0x00042BED, 0x000361F9, 0x00016A11, 0x000152A1, 0x0001523D, 0x000A8B23, 0x000918D3, 0x0004761B, 0x0003CBCB, 0x00016A07, 0x00015233, 0x000138CF, 0x0009CCDD, 0x0008B84D, 0x0003EA9D, 0x000198DD, 0x000165B1, 0x00015229, 0x000D9DC7, 0x000965B3, 0x0006F3EB, 0x000466CB, 0x000165A7, 0x00015283, 0x000139E7, 0x000EF325, 0x000AD5A1, 0x00016BDD, 0x00015279, 0x00015215, 0x00013979, 0x0007BEF7, 0x0004E227, 0x000240B7, 0x00016BD3, 0x00016787, 0x0001526F, 0x0005015D, 0x0002E521, 0x0001677D, 0x00016205, 0x00015265, 0x00015201, 0x00013901, 0x0007BC27, 0x0002D3E7, 0x0001B147, 0x0001A337, 0x000196B7, 0x000161FB, 0x00013A87, 0x00033779, 0x0002D5D1, 0x000161F1, 0x00015251, 0x00013A7D, 0x00030442, 0x000152AA, 0x00013A72, 0x000571B4, 0x00042BEC, 0x00037EE0, 0x00016A10, 0x000152A0, 0x0001523C, 0x00013A68, 0x00013810, 0x0001DB4E, 0x00016A06, 0x00015296, 0x000138CE, 0x0001528C, 0x000371DE, 0x00036A72, 0x000165A6, //0x00015282, 0x00013856, 0x000EF324, 0x000EB440, 0x0009B238, 0x00081DEC, 0x0007144C, 0x0005DE24, 0x000597D4, 0x00016BDC, 0x00013978, 0x00065AB6, 0x0001D09A, 0x00016BD2, 0x00016786, 0x0001526E, 0x0001520A, 0x000139D2, 0x000F39C4, 0x000A9194, 0x0005015C, 0x00035604, 0x00033D68, 0x0001677C, 0x00016204, 0x00015200, 0x000B6BE6, 0x000A95D6, 0x0009AA4A, 0x0006C3B6, 0x000152BE, 0x000151F6, 0x00013A86, 0x0001382E, 0x0001AB60, 0x00019454, 0x000161F0, 0x000152B4, 0x00013A7C, 0x000F7631, 0x00053081, 0x000529DD, 0x0003538D, 0x00013A71, 0x000138E1, 0x001037E7, 0x0005C483, 0x00047817, 0x00022F53, 0x00016DF7, 0x00016A0F, 0x0001529F, 0x00013A67, 0x0001380F, 0x00016A05, 0x00015295, 0x00015231, 0x00013A5D, 0x000138CD, 0x0005B91B, 0x000165AF, 0x00015227, 0x0001321F, 0x0005D01D, 0x000371DD, 0x00025195, 0x00016EA1, 0x00015281, 0x0007C98B, 0x00052FEB, 0x00028EDF, 0x000243DF, 0x0001F7B3, 0x00016BDB, 0x00015277, 0x00065AB5, 0x0005B5DD, 0x0003B87D, 0x0002D525, 0x0002C779, 0x00016BD1, 0x00016785, 0x0001526D, 0x000139D1, 0x00013909, //0x00000025, 0x000AE783, 0x000A0877, 0x0006CCBB, 0x000317E7, 0x00016203, 0x000A87C5, 0x000A0359, 0x000152BD, 0x000151F5, 0x00013A85, 0x0001382D, 0x00028ACF, 0x0001AB5F, 0x000161EF, 0x00013A7B, 0x000547F0, 0x00021594, 0x000213A0, 0x00016E00, 0x000152A8, 0x00013818, 0x00022F52, 0x00016DF6, //0x00016A0E, 0x00013A66, 0x0001380E, 0x000B64B4, 0x00056E88, 0x0001B7C0, 0x00016A04, 0x00015294, 0x00015230, 0x00013A5C, 0x000138CC, 0x00080C6A, 0x0005A01A, 0x0002031A, 0x0001E11E, 0x000165AE, 0x0001528A, 0x00015226, 0x00075270, 0x0003A184, 0x00034B94, 0x00015280, 0x0001521C, 0x00013A48, //0x0010CEEA, 0x00016BDA, 0x00015276, 0x000DB070, 0x0003DD34, 0x0002D524, 0x0002C778, 0x0001CB84, 0x00016BD0, 0x00016784, 0x0001526C, 0x00015208, 0x0001677A, 0x00015262, 0x00069858, 0x00015258, 0x000151F4, 0x00013A84, 0x000B29D6, 0x000A6D8E, 0x0008CDEE, 0x00054D0E, 0x000527F2, 0x00027552, 0x000193EE, 0x000161EE, 0x0001605E, 0x00013A7A, 0x000C9DAB, 0x000A1793, 0x00094BAB, 0x00030313, 0x00016DFF, 0x000152A7, 0x0007FCDD, 0x000414DD, 0x000399D1, 0x00016DF5, 0x00016A0D, 0x0001529D, 0x00015239, 0x00013871, 0x000F2CAB, 0x000A013B, 0x0005A857, 0x0001AEC3, 0x00016A03, 0x000165B7, 0x0001522F, 0x000138CB, 0x00013867, 0x000165AD, 0x00056C1B, //0x000446BF, 0x0004401B, 0x0003A183, 0x000263EF, 0x000165A3, 0x0001527F, 0x0001521B, 0x000AB531, 0x00083559, 0x0005912D, 0x00016BD9, 0x00015275, 0x00015211, 0x0003D62B, 0x00016BCF, 0x0001620B, 0x0001526B, 0x00015207, 0x00013907, 0x000A1BFD, 0x00052CB5, 0x00034B75, 0x00016779, 0x00015261, 0x000EA28B, 0x000BBB2F, 0x000B1783, 0x00079F9F, 0x00039F67, 0x0002BCD7, 0x000270AB, 0x000161F7, 0x000152BB, 0x00015257, 0x000151F3, 0x00013A83, 0x000EEC55, 0x000B29D5, 0x000161ED, 0x000152B1, 0x00013A79, 0x00016DFE, 0x000133CA, 0x0006DAA0, 0x00052390, 0x00016DF4, 0x00016A0C, 0x0001529C, 0x00015238, 0x00013870, //0x000B9BC6, 0x0005A856, 0x0002471A, 0x000198E2, 0x00016A02, 0x000165B6, 0x000138CA, 0x00059398, 0x0003E908, 0x000165AC, 0x00015288, 0x00015224, 0x000CAB92, 0x0005F536, 0x0002A976, 0x00016D72, 0x0001527E, 0x000C7348, 0x000AA20C, 0x000A73F4, 0x00095C44, 0x0006E2AC, 0x0005D010, 0x00018BE0, 0x00016BD8, 0x0001678C, 0x00015274, 0x00015210, 0x000C0BBA, 0x000280C2, 0x00016BCE, 0x00016782, 0x0001526A, 0x00015206, 0x000F5EDC, 0x000ED8E0, 0x0007DCFC, 0x00018460, 0x00016778, 0x00016200, 0x00015260, 0x000151FC, 0x00013A8C, 0x0005554A, 0x00054226, 0x0003D35A, 0x00037B76, 0x000161F6, 0x000152BA, 0x000151F2, 0x000B29D4, 0x0003FF10, 0x0002E760, 0x000161EC, 0x000152B0, 0x00013A78, 0x000ABD31, 0x00055215, 0x0002954D, 0x00016DFD, 0x000152A5, 0x000133C9, 0x0005EAC7, 0x00058663, 0x000336FB, 0x00016DF3, 0x00016A0B, 0x00015237, 0x00077289, 0x00075669, 0x0002FD85, 0x000165B5, 0x0003FC8F, 0x000165AB, 0x00015223, 0x000CAB91, 0x00068B99, 0x0004C6DD, 0x00035299, 0x00018BE9, 0x0001527D, 0x00043FAB, 0x00016BD7, 0x0001678B, 0x00015273, 0x000DEBCD, 0x00078715, 0x0001F359, 0x00016781, 0x00016209, 0x00015269, 0x0005B88B, 0x0005723B, 0x00016777, 0x000161FF, 0x000152C3, 0x0001525F, 0x000151FB, 0x000A5A71, //0x000A1A61, 0x000778F1, 0x00045A1D, 0x000161F5, 0x00015255, 0x00013A81, 0x000EEC53, 0x00081D5B, 0x000161EB, 0x000152AF, 0x00054B70, 0x0005258C, 0x000471DC, 0x0002954C, 0x00016DFC, 0x00013814, 0x000133C8, 0x000DBF12, 0x000CCDAA, 0x00091872, 0x00036ED6, 0x00016DF2, 0x00034BA4, 0x0002D4E4, 0x00025E24, 0x000198E0, 0x00016A00, 0x00015290, 0x0001522C, 0x0007947A, 0x000165AA, 0x00015286, 0x000138BE, 0x00087764, 0x0003B698, 0x000165A0, 0x0001527C, 0x00013850, 0x0008E906, 0x00071FFE, 0x00016BD6, 0x000C5AA0, 0x0001F358, 0x00016780, 0x00015268, 0x0002F83E, 0x0002529E, 0x00016776, 0x000161FE, 0x000151FA, 0x00013A8A, 0x00078124, 0x000362D8, 0x00023FD4, 0x0001FA4C, 0x000161F4, 0x00015254, 0x00013A80, 0x000BBCB2, 0x000AC5D2, 0x00081972, 0x000261C6, 0x000161EA, 0x000152AE, 0x00013A76, 0x00054B6F, 0x00032AE7, 0x000216BB, 0x00016DFB, 0x0001523F, 0x00013813, 0x000133C7, 0x00070469, 0x00036ED5, 0x00034955, 0x00016A09, 0x00015235, 0x0009CCDF, 0x0007B7AB, 0x0002D4E3, 0x000198DF, 0x000165B3, 0x00097299, 0x00089D51, 0x000681DD, 0x00024771, 0x000AF227, 0x0007D033, 0x00041777, 0x00016BDF, 0x0001527B, 0x00058B4D, 0x000275D9, 0x000227B9, 0x00016BD5, 0x00016789, 0x000FE47B, 0x0001677F, 0x00016207, 0x00015267, 0x001052FD, 0x00104871, 0x0002F83D, 0x00016775, 0x000152C1, 0x0001525D, 0x000151F9, 0x00013A89, 0x000961FF, 0x0007E00F, 0x0004624F, 0x000161F3, 0x000152B7, 0x00015253, 0x00013A7F, 0x000221B5, 0x000161E9, 0x000152AD, 0x0009174E, 0x0004A376, //0x000361FA, 0x0002A03A, 0x00016DFA, 0x000152A2, 0x00013812, 0x000133C6, 0x000DDF7C, 0x000A8B24, 0x00016A08, 0x000138D0, 0x0001386C, 0x000BE46A, 0x0009CCDE, //0x0007284E, 0x00067F2A, 0x0003016A, 0x000198DE, 0x000169FE, 0x000165B2, 0x0001522A, 0x00097298, 0x0007614C, 0x000165A8, 0x00015284, 0x00015220, 0x000DD216, 0x000563E2, 0x00050F1E, 0x0003F516, 0x0003B696, 0x00037CC6, 0x0003486E, 0x0001FC66, 0x00016BDE, 0x0007BEF8, 0x00058B4C, 0x00034864, 0x000275D8, 0x00016BD4, 0x00016788, 0x0001677E, 0x0001383A, 0x0002D3E8, 0x00016774, 0x000161FC, 0x000152C0, 0x0001525C, 0x00013A88, 0x00094322, 0x000580A2, 0x00027F1A, 0x0001CE8A, 0x00013A7E, 0x00039850, 0x00027D1C }; for (int i = 0; i < 582; i++) { const auto* form = RE::TESForm::LookupByID(formids[i]); if (form && form->Is(RE::FormType::Cell)) { logger::warn("Detected invalid cell: {:08X}", formids[i]); NotifyInvalidForm(form); } } //memset(formids, 0, sizeof(formids)); } inline void CheckEnderalCells() { // FormIDs of all Enderal cells. uint32_t formids[415] = { 0x0014DB0F, 0x00114BBB, 0x00108AC3, 0x00106863, 0x000E67E3, 0x000DCBA3, 0x000A1E3B, 0x0008320B, 0x0006A8AF, 0x00050B67, 0x00043DEF, 0x0003E737, 0x000E4961, 0x00030F8D, 0x0014F6B7, 0x001080EB, 0x0008613B, 0x0010E671, 0x000ED971, 0x000EB581, 0x000C0E35, 0x00055DB5, 0x0012F42F, 0x000905FF, 0x00069C6B, 0x00012C3B, 0x000DABCD, 0x00081299, 0x0005C971, 0x0004D5B1, 0x000E2CAB, 0x0005530B, 0x000299C7, 0x0007F65B, 0x0007336F, 0x0005BCD3, 0x0013FB45, 0x0011C4DD, 0x000A5F1D, 0x00072B95, 0x00069C9D, 0x00149B58, 0x0012DAE8, 0x000E4960, 0x000B5264, 0x0009B710, 0x000ED97A, 0x000C0E3E, 0x0009FD56, 0x00024BCE, 0x000C0E34, 0x0008783C, 0x000528F8, 0x00033494, 0x00009900, 0x000EA95A, 0x000C566E, 0x0004145E, 0x00015282, 0x000FE108, 0x0007FBF0, 0x000098EC, 0x0011DC6A, 0x00102DF2, 0x00074AF2, 0x0005530A, 0x000299C6, 0x00010A84, 0x0014B5A2, 0x0007F65A, 0x0007336E, 0x0006C032, 0x00030FAA, 0x0012EF4C, 0x0011C4DC, 0x000A5F1C, 0x00096D50, 0x0004BC88, 0x00046ECC, 0x00130C29, 0x00070799, 0x00149B57, 0x000E495F, 0x000A5C4B, 0x00074547, 0x00004E77, 0x000ED979, 0x000C0E3D, 0x0009FD55, 0x00024BCD, 0x001461D7, 0x0008783B, 0x000528F7, 0x00033493, 0x000D9B6D, 0x000C566D, 0x0007FA69, 0x0004145D, 0x000375C5, 0x00032999, 0x000D8E1B, 0x000D89CF, 0x0006FECF, 0x001344F5, 0x00127E21, 0x0011DC69, 0x00102DF1, 0x000CBEA5, 0x00074AF1, 0x00033B19, 0x00000025, 0x0011847B, 0x0006E4F3, 0x000169D3, 0x00089B95, 0x000028B1, 0x000A5F1B, 0x00083213, 0x00069C9B, 0x00130C28, 0x000E495E, 0x0009B70E, 0x00147F2C, 0x00117890, 0x000ED978, 0x000C0E3C, 0x00055DBC, 0x00024BCC, 0x0008783A, 0x000250D6, 0x00127538, 0x000D9B6C, 0x000813CC, 0x00045A48, 0x00021634, 0x00014B78, 0x0011B1DE, 0x0006FECE, 0x000399AA, 0x000098EA, 0x00127E20, 0x0011DC68, 0x00102DF0, 0x000CBEA4, 0x000A5894, 0x00067288, 0x0011847A, 0x0006E4F2, 0x00089B94, 0x0007336C, 0x0004C26C, 0x00083212, 0x0003C4DE, 0x00128CCF, 0x000D340F, 0x000E495D, 0x000A82F5, 0x000405A1, 0x00147F2B, 0x0013D0F3, 0x000ED977, 0x000D24BF, 0x000C0E3B, 0x00055DBB, 0x0009710D, 0x00015671, 0x00098553, 0x000813CB, 0x0015295D, 0x0012AB15, 0x00085A75, 0x0006FECD, 0x000399A9, 0x000098E9, 0x00127E1F, 0x0011DC67, 0x000A5893, 0x000848D7, 0x0007075B, 0x00067287, 0x001130E1, 0x0010FF45, 0x0010A829, 0x000DD775, 0x000CEB85, 0x000CD6D1, 0x0006E4F1, 0x000DEDAF, 0x000A19FF, 0x00089B93, 0x0004C26B, 0x0002BA7F, 0x000BCB8D, 0x00083211, 0x0004B25D, 0x001503AA, 0x0013F5BE, 0x0013B612, 0x00128CCE, 0x000CAFA2, 0x000E495C, 0x0009B70C, 0x00020AFC, 0x0010D1C2, 0x000ED976, 0x000D24BE, 0x000C0E3A, 0x000AECC6, 0x00055DBA, 0x00009906, 0x001514BC, 0x0009855C, 0x0009710C, 0x00090988, 0x0006C768, 0x00036A14, 0x000098FC, 0x000E041A, 0x000D9B6A, 0x00082432, 0x0015295C, 0x0012AB14, 0x0010BBC4, 0x00085A74, 0x0006FECC, 0x000098E8, 0x0014E5BE, 0x00127E1E, 0x001152E6, 0x000848D6, 0x001130E0, 0x000CEB84, 0x0007D400, 0x00076E70, 0x0006E4F0, 0x000EFFE6, 0x000DEDAE, 0x000E1A2C, 0x000CC974, 0x000BCB8C, 0x00083210, 0x00128CCD, 0x00119B01, 0x000CAFA1, 0x000A9EB9, 0x00078625, 0x000E495B, 0x000DE74F, 0x000B525F, 0x0009B70B, 0x00020AFB, 0x0000990F, 0x00143B31, 0x0010D1C1, 0x000ED975, 0x000D74D1, 0x000D24BD, 0x000AECC5, 0x0008D791, 0x00055DB9, 0x00009905, 0x00133E07, 0x0011267B, 0x000C6677, 0x0009855B, 0x0009710B, 0x00090987, 0x00143479, 0x0011F9C5, 0x000D9B69, 0x0015295B, 0x00102947, 0x000C3913, 0x00089123, 0x00085A73, 0x0006FECB, 0x0013CA25, 0x00129141, 0x00127E1D, 0x000848D5, 0x00056A11, 0x0013CF2F, 0x001130DF, 0x000CEB83, 0x0008E957, 0x0007D3FF, 0x00079F43, 0x0006E4EF, 0x000DEDAD, 0x00086739, 0x000BCB8B, 0x0008320F, 0x00144954, 0x000A9EB8, 0x0007EB50, 0x0001CB58, 0x000E495A, 0x000DE74E, 0x000B525E, 0x00004382, 0x00143B30, 0x000ED974, 0x000D24BC, 0x000C0E38, 0x000AECC4, 0x0005A728, 0x00055DB8, 0x00022904, 0x00009904, 0x00133E06, 0x0012E492, 0x000C6676, 0x0009855A, 0x0009710A, 0x00069C6E, 0x00019C50, 0x0015295A, 0x0012AB12, 0x0006FECA, 0x000098E6, 0x000FF034, 0x000EB818, 0x000C91B4, 0x0009B228, 0x000848D4, 0x001130DE, 0x00100C4A, 0x000CEB82, 0x0007D3FE, 0x0006E4EE, 0x0001A01A, 0x0011F744, 0x000DEDAC, 0x00086738, 0x0007BC20, 0x000ACECE, 0x0008320E, 0x00081CF6, 0x00048F32, 0x0003E73A, 0x00011046, 0x000A9EB7, 0x000780AB, 0x000E4959, 0x000B525D, 0x00045101, 0x001461DB, 0x00107EEF, 0x000ED973, 0x000C0E37, 0x000AECC3, 0x0005A727, 0x00055DB7, 0x00034D97, 0x00009903, 0x001514B9, 0x0012E491, 0x00103F39, 0x000C5671, 0x0005AE7F, 0x000A2635, 0x0006FEC9, 0x0003D825, 0x000FF033, 0x000EB817, 0x0009B227, 0x001315A1, 0x00127515, 0x001130DD, 0x00100C49, 0x000DD771, 0x000A51E1, 0x0007A7D9, 0x0012511B, 0x0011C4DF, 0x000F524F, 0x000DEDAB, 0x000ACECD, 0x0008320D, 0x00081CF5, 0x00048F31, 0x0003E739, 0x0013584E, 0x00030F8E, 0x0013EB88, 0x000E77D4, 0x000E4958, 0x0012A552, 0x0010E672, 0x000C0E36, 0x0007284E, 0x001514B8, 0x00136C80, 0x0012E490, 0x000C5670, 0x001421B6, 0x000E040C, 0x00098D14, 0x0005530C, 0x00043A94, 0x000FF032, 0x0009B226, 0x001130DC, 0x000A51E0, 0x0008AD90, 0x0013FB46, 0x001346CE, 0x0011C4DE, 0x000DEDAA, 0x0007B89A, 0x00130C2C, 0x00106864, 0x000DCBA4, 0x000A1E3C, 0x0008320C }; for (int i = 0; i < 415; i++) { const auto* form = RE::TESForm::LookupByID(formids[i]); if (!form) { if (!bMessageShown) { bMessageShown = true; RE::DebugMessageBox("Some of the installed mods are incompatible with Enderal.\nCheck console for the list of flagged mods."); } } else if (!form->Is(RE::FormType::Cell)) { logger::warn("Detected invalid cell: {:08X}", formids[i]); NotifyInvalidForm(form); } } //memset(formids, 0, sizeof(formids)); aModNames.clear(); } inline void CheckCCMods() { std::string filenames[74] = { "ccASVSSE001-ALMSIVI.esm", "ccBGSSSE001-Fish.esm", "ccBGSSSE002-ExoticArrows.esl", "ccBGSSSE003-Zombies.esl", "ccBGSSSE004-RuinsEdge.esl", "ccBGSSSE005-Goldbrand.esl", "ccBGSSSE006-StendarsHammer.esl", "ccBGSSSE007-Chrysamere.esl", "ccBGSSSE010-PetDwarvenArmoredMudcrab.esl", "ccBGSSSE011-HrsArmrElvn.esl", "ccBGSSSE012-HrsArmrStl.esl", "ccBGSSSE014-SpellPack01.esl", "ccBGSSSE019-StaffofSheogorath.esl", "ccBGSSSE020-GrayCowl.esl", "ccBGSSSE021-LordsMail.esl", "ccMTYSSE001-KnightsoftheNine.esl", "ccQDRSSE001-SurvivalMode.esl", "ccTWBSSE001-PuzzleDungeon.esm", "ccEEJSSE001-Hstead.esm", "ccQDRSSE002-Firewood.esl", "ccBGSSSE018-Shadowrend.esl", "ccBGSSSE035-PetNHound.esl", "ccFSVSSE001-Backpacks.esl", "ccEEJSSE002-Tower.esl", "ccEDHSSE001-NorJewel.esl", "ccVSVSSE002-Pets.esl", "ccBGSSSE037-Curios.esl", "ccBGSSSE034-MntUni.esl", "ccBGSSSE045-Hasedoki.esl", "ccBGSSSE008-Wraithguard.esl", "ccBGSSSE036-PetBWolf.esl", "ccFFBSSE001-ImperialDragon.esl", "ccMTYSSE002-VE.esl", "ccBGSSSE043-CrossElv.esl", "ccVSVSSE001-Winter.esl", "ccEEJSSE003-Hollow.esl", "ccBGSSSE016-Umbra.esm", "ccBGSSSE031-AdvCyrus.esm", "ccBGSSSE038-BowofShadows.esl", "ccBGSSSE040-AdvObGobs.esl", "ccBGSSSE050-BA_Daedric.esl", "ccBGSSSE052-BA_Iron.esl", "ccBGSSSE054-BA_Orcish.esl", "ccBGSSSE058-BA_Steel.esl", "ccBGSSSE059-BA_Dragonplate.esl", "ccBGSSSE061-BA_Dwarven.esl", "ccPEWSSE002-ArmsOfChaos.esl", "ccBGSSSE041-NetchLeather.esl", "ccEDHSSE002-SplKntSet.esl", "ccBGSSSE064-BA_Elven.esl", "ccBGSSSE063-BA_Ebony.esl", "ccBGSSSE062-BA_DwarvenMail.esl", "ccBGSSSE060-BA_Dragonscale.esl", "ccBGSSSE056-BA_Silver.esl", "ccBGSSSE055-BA_OrcishScaled.esl", "ccBGSSSE053-BA_Leather.esl", "ccBGSSSE051-BA_DaedricMail.esl", "ccBGSSSE057-BA_Stalhrim.esl", "ccBGSSSE066-Staves.esl", "ccBGSSSE067-DaedInv.esm", "ccBGSSSE068-Bloodfall.esl", "ccBGSSSE069-Contest.esl", "ccVSVSSE003-NecroArts.esl", "ccVSVSSE004-BeAFarmer.esl", "ccBGSSSE025-AdvDSGS.esm", "ccFFBSSE002-CrossbowPack.esl", "ccBGSSSE013-Dawnfang.esl", "ccRMSSSE001-NecroHouse.esl", "ccEDHSSE003-Redguard.esl", "ccEEJSSE004-Hall.esl", "ccEEJSSE005-Cave.esm", "ccKRTSSE001_Altar.esl", "ccCBHSSE001-Gaunt.esl", "ccAFDSSE001-DweSanctuary.esm", }; for (short i = 0; i < 74; i++) { if (DataFileExists(filenames[i], 800)) { MessageBoxW(NULL, L"Creation Club mods are incompatible with Enderal.", L"Error", MB_OK | MB_ICONERROR); exit(EXIT_FAILURE); } } } inline void CheckUnconvertedMap() { auto* form = RE::TESForm::LookupByID(0x1D3C); // Vyn RE::TESWorldSpace* world = form ? form->As() : nullptr; if (!form || !world) { MessageBoxW(NULL, L"Unable to load Vyn, make sure you are not using EnderalSE.dll in Skyrim.", L"Error", MB_OK | MB_ICONERROR); exit(EXIT_FAILURE); } if (world->worldMapOffsetData.mapScale > 1.1) { if (!bMessageShown) { bMessageShown = true; RE::DebugMessageBox(std::format("{} is an Enderal LE mod, containing unconverted map data.\nCheck console for the list of flagged mods.", form->GetFile()->fileName).c_str()); RE::ConsoleLog::GetSingleton()->Print("Some of the installed mods are incompatible! This list is not exhaustive, always use xEdit to verify mod compatibility."); } if (!aModNames.contains(form->GetFile()->fileName)) { aModNames.insert(form->GetFile()->fileName); RE::ConsoleLog::GetSingleton()->Print(std::format("{} is unconverted", form->GetFile()->fileName).c_str()); } } } inline void CheckEnderalContainers() { // Base forms of Enderal containers, having collisions with Skyrim uint32_t formids[13] = { 0x17234, 0x3661E, 0x43BF2, 0x4602B, 0x469E6, 0x46AEF, 0x46D85, 0x56161, 0x56165, 0x7BC22, 0x967AA, 0xF85F4, 0x108AA7 }; for (int i = 0; i < 13; i++) { const auto* form = RE::TESForm::LookupByID(formids[i]); if (!form || !form->Is(RE::FormType::Container)) { logger::warn("Detected invalid container: {:08X}", formids[i]); NotifyInvalidForm(form); } } } inline void CheckEnderalNPCs() { // Base forms of Enderal actors, having collisions with Skyrim uint32_t formids[55] = { 0x1722B, 0x1723A, 0x1A4E0, 0x22FA4, 0x22FA6, 0x23133, 0x2320C, 0x25D20, 0x2A006, 0x3280A, 0x365F6, 0x36613, 0x366F0, 0x3675D, 0x39F58, 0x3C599, 0x447BE, 0x447F3, 0x469E2, 0x469E3, 0x469E4, 0x46AF6, 0x46AF7, 0x46D83, 0x46D84, 0x46DFB, 0x46EE4, 0x46EF1, 0x46EF2, 0x46EF3, 0x4838F, 0x7265B, 0x7265E, 0x72660, 0x92A62, 0x92A64, 0x954D9, 0x967F9, 0xA8608, 0xA860B, 0xA8614, 0xA861E, 0xA9623, 0xBED8B, 0xCC95C, 0xDD714, 0xE48FA, 0xEA717, 0xEA71A, 0x103269, 0x1032B9, 0x1032C7, 0x1032CB, 0x1032CC, 0x1033FE }; for (int i = 0; i < 55; i++) { const auto* form = RE::TESForm::LookupByID(formids[i]); if (!form || !form->Is(RE::FormType::NPC)) { logger::warn("Detected invalid actor: {:08X}", formids[i]); NotifyInvalidForm(form); } } }