Check activators and statics for collision with Skyrim

This commit is contained in:
Eddoursul 2022-09-29 22:23:14 +02:00
parent 09f7922554
commit 18ac89e171
7 changed files with 223 additions and 7 deletions

View File

@ -6,9 +6,10 @@ See https://en.wiki.sureai.net/Enderal:Patch for the list of official patches up
Beware, spoilers ahead!
2.0.12.4 (TBD)
- Skyrim SE 1.6.640 support.
2.0.12.4 (2022-09-30)
- Skyrim SE 1.6.640 (Steam) and 1.6.659 (GOG) support.
- Fixed the dialog quit popup appearing in non-locked conversations.
- Fixed swapped objectives in Call of the Hunt.
2.0.12.3 (2022-09-16)

BIN
SKSE/Plugins/EnderalSE.dll (Stored with Git LFS)

Binary file not shown.

View File

@ -1,6 +1,6 @@
Enderal Credits.txt
Report a bug in Enderal SE.url
Enderal SE v2.0.12.3 Changelog.txt
Enderal SE v2.0.12.4 Changelog.txt
Enderal - Forgotten Stories.esm
Enderal - Forgotten Stories.ini
E - Update.bsa

View File

@ -6,7 +6,7 @@ message("Using toolchain file ${CMAKE_TOOLCHAIN_FILE}.")
########################################################################################################################
project(
EnderalSE
VERSION 1.1
VERSION 1.1.0
DESCRIPTION "Enderal SE DLL"
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)

View File

@ -1331,3 +1331,217 @@ inline void CheckEnderalNPCs()
}
}
}
inline void CheckEnderalActivators()
{
// Base forms of Enderal activators, having collisions with Skyrim
uint32_t formids[46] = {
0x20A1C,
0x23AB1,
0x36739,
0x3BCA5,
0x3BCB3,
0x3C570,
0x3C57F,
0x43BEB,
0x43BEE,
0x447D3,
0x469F6,
0x469F8,
0x469FA,
0x469FC,
0x46ADE,
0x46AEA,
0x69F89,
0x69F8C,
0x6A00D,
0x6A00E,
0x6A00F,
0x6A010,
0x6A011,
0x6A013,
0x6A016,
0x6A024,
0x6A025,
0x6A026,
0x6A027,
0x6A029,
0x6A02A,
0x6A02B,
0x6A02C,
0x6A02D,
0x6A02E,
0x6A030,
0x6A032,
0x6A033,
0x77358,
0xADC71,
0xB35AB,
0xB35B4,
0xB35B5,
0xB6282,
0x106644,
0x1080DA
};
for (int i = 0; i < 46; i++) {
const auto* form = RE::TESForm::LookupByID(formids[i]);
if (!form || !form->Is(RE::FormType::Activator)) {
logger::warn("Detected invalid activator: {:08X}", formids[i]);
NotifyInvalidForm(form);
}
}
}
inline void CheckEnderalStatics()
{
// Base forms of Enderal statics, having collisions with Skyrim
uint32_t formids[138] = {
0x15C6F,
0x1725C,
0x20BC9,
0x20BDF,
0x23E46,
0x2E6F8,
0x2EC26,
0x2EE3F,
0x31949,
0x3194B,
0x3195B,
0x31974,
0x327AD,
0x328D7,
0x33F45,
0x34944,
0x34946,
0x34BCD,
0x36747,
0x36775,
0x36779,
0x3700B,
0x3742A,
0x37667,
0x37668,
0x37C01,
0x3A1C2,
0x3BCE3,
0x3BCE7,
0x3C58A,
0x3ECAA,
0x41449,
0x4B258,
0x4B25A,
0x565F0,
0x6717B,
0x6717C,
0x6717D,
0x69524,
0x69525,
0x69526,
0x69527,
0x6A034,
0x6A035,
0x6A036,
0x6A037,
0x6A038,
0x6A039,
0x6A03A,
0x6A03B,
0x6A03C,
0x6A03D,
0x6A03E,
0x6A03F,
0x6A040,
0x6A041,
0x6A042,
0x6A045,
0x6A046,
0x6A047,
0x6A048,
0x6A049,
0x6A04A,
0x6A04B,
0x6A04C,
0x6A04D,
0x6A04F,
0x6A050,
0x6A051,
0x6A052,
0x6A053,
0x6A054,
0x6A057,
0x6A058,
0x6A059,
0x6A05A,
0x6A094,
0x6D230,
0x6D233,
0x6D235,
0x6D23F,
0x6D24D,
0x6D253,
0x6D257,
0x6FEEA,
0x6FEED,
0x6FEEE,
0x6FEEF,
0x6FEF0,
0x6FEF1,
0x6FEF2,
0x6FEF3,
0x6FEF4,
0x6FEF5,
0x6FEF6,
0x6FEF7,
0x6FEF8,
0x6FEF9,
0x6FEFA,
0x6FEFD,
0x904B1,
0x904B2,
0x904B3,
0x904B4,
0x904B5,
0x904B6,
0x904B7,
0x904B8,
0x904B9,
0x904BA,
0x904BB,
0x904BC,
0x904BD,
0x904BE,
0x904BF,
0x904C0,
0xDAAF3,
0xDAAF5,
0xDAAF8,
0xDAAFC,
0xDAAFE,
0xDAB01,
0xE49F3,
0xE4A12,
0xE77BF,
0xE77C0,
0xE77C1,
0xE77C2,
0xE77C3,
0xE77C4,
0xE77C5,
0xE77C6,
0xE77C7,
0xE77C8,
0xE77C9,
0xE77CA,
0xE77CB,
0xE77CF
};
for (int i = 0; i < 138; i++) {
const auto* form = RE::TESForm::LookupByID(formids[i]);
if (!form || !form->Is(RE::FormType::Static)) {
logger::warn("Detected invalid static: {:08X}", formids[i]);
NotifyInvalidForm(form);
}
}
}

View File

@ -83,7 +83,6 @@ namespace {
if (!bVoices) {
RE::DebugMessageBox("L - Voices.bsa is not loaded. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files.");
exit(EXIT_FAILURE);
}
bool bMeshes = RE::BSResourceNiBinaryStream("meshes/enderal/loadscreenart/loadscreenundercity.nif").good();

View File

@ -61,6 +61,8 @@ inline void CheckIncompatibleMods()
CheckEnderalCells();
CheckEnderalContainers();
CheckEnderalNPCs();
CheckEnderalActivators();
CheckEnderalStatics();
}
inline void LoadINI(std::map<std::string, bool>* settings, const char* iniPath)