4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1333 lines
22 KiB

#pragma once
static bool bMessageShown = false;
static std::unordered_set<std::string> 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<RE::TESWorldSpace>();
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<RE::TESWorldSpace>() : 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[574] = {
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 < 574; 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<RE::TESWorldSpace>() : 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);
}
}
}