1
Fork 0

Compare commits

..

No commits in common. 'e850c56af8767e346bbca1bf533774f8e48823a2' and 'd4c94e1877be7b450d10865ad4868182e4e2cced' have entirely different histories.

  1. BIN
      Enderal - Forgotten Stories.esm
  2. 614
      Enderal - Forgotten Stories.esm.xml
  3. 3
      Enderal Credits.txt
  4. 24
      Enderal SE v2.0.12 Changelog.txt
  5. BIN
      SKSE/Plugins/EnderalSE.dll
  6. BIN
      SKSE/Plugins/EnderalSteam.dll
  7. 1
      SKSE/Plugins/EnderalVersion.ini
  8. BIN
      SKSE/Plugins/versionlib-1-6-629-0.bin
  9. BIN
      SKSE/Plugins/versionlib-1-6-640-0.bin
  10. BIN
      SKSE/Plugins/versionlib-1-6-659-0.bin
  11. BIN
      Skyrim.esm
  12. BIN
      Update.esm
  13. 5
      _build/loose_files.txt
  14. 3
      interface/credits.txt
  15. 3
      interface/credits_plru.txt
  16. BIN
      interface/dialoguemenu.swf
  17. BIN
      interface/translate_polish.txt
  18. BIN
      meshes/clutter/common/cratesmall01.nif
  19. BIN
      meshes/clutter/common/cratesmall01eeco.nif
  20. BIN
      meshes/clutter/common/cratesmall02.nif
  21. BIN
      meshes/clutter/common/cratesmall03.nif
  22. BIN
      meshes/clutter/common/cratesmall03eeco.nif
  23. BIN
      meshes/clutter/common/cratesmall04.nif
  24. BIN
      meshes/clutter/common/cratesmalllong01.nif
  25. BIN
      meshes/clutter/common/cratesmalllong01eeco.nif
  26. BIN
      meshes/clutter/common/cratesmalllong02.nif
  27. BIN
      meshes/clutter/common/cratesmalllong03.nif
  28. BIN
      meshes/clutter/common/cratesmalllong04.nif
  29. BIN
      meshes/clutter/common/cratesmalllong04eeco.nif
  30. BIN
      meshes/enderal/armor/ranger/rangercuirass_0.nif
  31. BIN
      meshes/enderal/armor/ranger/rangercuirass_1.nif
  32. BIN
      meshes/enderal/armor/ranger/rangercuirassf_0.nif
  33. BIN
      meshes/enderal/armor/ranger/rangercuirassf_1.nif
  34. BIN
      meshes/enderal/medievalpack/door01.nif
  35. BIN
      meshes/enderal/medievalpack/door02.nif
  36. BIN
      meshes/enderal/medievalpack/towerbase.nif
  37. BIN
      meshes/enderal/medievalpack/towerbasealt.nif
  38. BIN
      meshes/enderal/miscellaneous/streetlamhanging01.nif
  39. BIN
      meshes/enderal/miscellaneous/streetlamp.nif
  40. BIN
      meshes/enderal/miscellaneous/streetlamprod.nif
  41. BIN
      scripts/_00e_frozenmescript.pex
  42. BIN
      scripts/_00e_fs_nqr05_functions.pex
  43. BIN
      scripts/_00e_playersetupscript.pex
  44. BIN
      scripts/_00e_questfunctions.pex
  45. BIN
      scripts/_00e_theriantrophist_alchemycontrol.pex
  46. 2
      source/Enderal DLL/CMakeLists.txt
  47. 232
      source/Enderal DLL/src/CheckInvalidForms.h
  48. 74
      source/Enderal DLL/src/Main.cpp
  49. 38
      source/Enderal DLL/src/Util.h
  50. 22
      source/Enderal DLL/vcpkg-configuration.json
  51. 2
      source/Steam DLL/CMakeLists.txt
  52. 22
      source/Steam DLL/src/Achievements.cpp
  53. 6
      source/Steam DLL/src/EventListener.cpp
  54. 12
      source/Steam DLL/src/Main.cpp
  55. 2
      source/Steam DLL/src/Papyrus.cpp
  56. 4
      source/Steam DLL/src/PapyrusFunctions.h
  57. 2
      source/Steam DLL/src/Util.h
  58. 22
      source/Steam DLL/vcpkg-configuration.json
  59. 2
      source/Steam DLL/vcpkg.json
  60. 14
      source/scripts/_00e_frozenmescript.psc
  61. 11
      source/scripts/_00e_fs_nqr05_functions.psc
  62. 16
      source/scripts/_00e_playersetupscript.psc
  63. 51
      source/scripts/_00e_questfunctions.psc
  64. 4
      source/scripts/_00e_theriantrophist_alchemycontrol.psc
  65. BIN
      textures/architecture/solitude/sfloorhouse01_vanilla.dds
  66. BIN
      textures/architecture/solitude/sfloorhouse01_vanilla_n.dds

Binary file not shown.

@ -2,10 +2,10 @@
<plugin version="0.7.4"> <plugin version="0.7.4">
<TES4 flags="0x00000081" id="00000000" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000"> <TES4 flags="0x00000081" id="00000000" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000">
<HEDR> <HEDR>
<struct version="1.70000005" numRecords="42922" nextObjectID="00015977" /> <struct version="1.70000005" numRecords="42939" nextObjectID="00015977" />
</HEDR> </HEDR>
<CNAM>Niseam</CNAM> <CNAM>Niseam</CNAM>
<SNAM>Enderal: Forgotten Stories (Special Edition) 2.0.12.3</SNAM> <SNAM>Enderal: Forgotten Stories (Special Edition) 2.0.12</SNAM>
<MAST>Skyrim.esm</MAST> <MAST>Skyrim.esm</MAST>
<DATA>0</DATA> <DATA>0</DATA>
<MAST>Update.esm</MAST> <MAST>Update.esm</MAST>
@ -18306,6 +18306,7 @@
<TINC>000e6e16</TINC> <TINC>000e6e16</TINC>
<TINV>1</TINV> <TINV>1</TINV>
<TIRS>1139</TIRS> <TIRS>1139</TIRS>
<RNAM>00000019</RNAM>
</RACE> </RACE>
<RACE flags="0x00080000" id="0004e785" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000"> <RACE flags="0x00080000" id="0004e785" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000">
<EDID>CowRace</EDID> <EDID>CowRace</EDID>
@ -137600,6 +137601,34 @@
</FLOR> </FLOR>
</GRUP> </GRUP>
<GRUP label="FURN" groupType="0" day="9" month="45" lastUserID="0" currentUserID="0" unknown="0x00000000"> <GRUP label="FURN" groupType="0" day="9" month="45" lastUserID="0" currentUserID="0" unknown="0x00000000">
<FURN flags="0x10000000" id="0001a2ad" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x000f">
<EDID>CraftingBlacksmithAnvil</EDID>
<OBND>
<struct min="-32,-10,-33" max="50,94,65" />
</OBND>
<FULL>7607</FULL>
<MODL>Furniture\Clutter\BlacksmithAnvil.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="1879623364" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1253574659" textureType="0x00736464" unknown02="1969867521" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>0006e9c7,00088105,000a56d8,0004f680,000eb60b</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1207959553</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="10" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="00043282" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000"> <FURN flags="0x00000000" id="00043282" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000">
<EDID>_00E_Placeable_CraftingAlchemyWorkbenchNEW</EDID> <EDID>_00E_Placeable_CraftingAlchemyWorkbenchNEW</EDID>
<VMAD version="5" format="2"> <VMAD version="5" format="2">
@ -137752,6 +137781,587 @@
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" /> <struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR> </FNPR>
</FURN> </FURN>
<FURN flags="0x00000000" id="00068adb" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x000c">
<EDID>CraftingCookingFireSpit</EDID>
<OBND>
<struct min="-129,-55,-34" max="123,31,109" />
</OBND>
<FULL>7601</FULL>
<MODL>Furniture\FireSpitCooking.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="3594530037" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="3426394783" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1379563085" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1805171391" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="2699304643" textureType="0x00736464" unknown02="1558007136" />
<unknownStruct unknown01="2381386958" textureType="0x00736464" unknown02="1558007136" />
<unknownStruct unknown01="2216632689" textureType="0x00736464" unknown02="1558007136" />
<unknownStruct unknown01="3982807346" textureType="0x00736464" unknown02="1558007136" />
<unknownStruct unknown01="3389168381" textureType="0x00736464" unknown02="1558007136" />
<unknownStruct unknown01="652288620" textureType="0x00736464" unknown02="1558007136" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,00068ada,000a5cb3,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="0006e9c2" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0007">
<EDID>CraftingBlacksmithSharpeningWheel</EDID>
<OBND>
<struct min="-31,-9,-34" max="32,143,68" />
</OBND>
<FULL>7600</FULL>
<MODL>Furniture\Clutter\BlacksmithSharpeningWheelAnimating.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="3193485295" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="466254480" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="3723664411" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="3349595331" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1411829315" textureType="0x00736464" unknown02="3929839416" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>0006e9c7,00088108,000a56d8,0004f6fd,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="2" actorValueSkill="10" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000727a1" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x000c">
<EDID>CraftingTanningRackMarker</EDID>
<OBND>
<struct min="-56,-10,-34" max="56,112,120" />
</OBND>
<FULL>7599</FULL>
<MODL>Furniture\TanningRackMarker.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="1328996372" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="428701663" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="3987547591" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="1486255527" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="4130591688" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="2345674207" textureType="0x00736464" unknown02="314452046" />
</unknown4>
</MODT>
<KSIZ>4</KSIZ>
<KWDA>000727a0,000a56d8,0006e9c7,0007866a</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="0009c6ce" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0001">
<EDID>CraftingSmelterMarker1</EDID>
<OBND>
<struct min="-229,-149,-34" max="212,305,254" />
</OBND>
<FULL>7598</FULL>
<MODL>Furniture\SmelterMarker.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="4099871861" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="1662055531" textureType="0x00736464" unknown02="3075339569" />
<unknownStruct unknown01="2884692669" textureType="0x00736464" unknown02="3075339569" />
<unknownStruct unknown01="2205743547" textureType="0x00736464" unknown02="2756990635" />
<unknownStruct unknown01="1417261943" textureType="0x00736464" unknown02="2756990635" />
<unknownStruct unknown01="4248776144" textureType="0x00736464" unknown02="3854867874" />
<unknownStruct unknown01="1406036369" textureType="0x00736464" unknown02="3854867874" />
<unknownStruct unknown01="2696983751" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="261620559" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="2860817006" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3893345188" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3756742260" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="3842979269" textureType="0x00736464" unknown02="3929839416" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,0009c6c3,000a5cce,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000bad0c" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0002">
<EDID>CraftingAlchemyWorkbench</EDID>
<OBND>
<struct min="-60,-10,-34" max="60,123,112" />
</OBND>
<FULL>7597</FULL>
<MODL>Furniture\AlchemyWorkbench.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="2900664440" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="2786718006" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="1643990641" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="854384084" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="2317324634" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="3134883325" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="2066803896" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="2139825103" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2029396392" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="4222490580" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3756742260" textureType="0x00736464" unknown02="861219928" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>0002a40b,0004f6e6,0006e9c7,000a56d8,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="5" actorValueSkill="16" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000bad0d" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000">
<EDID>CraftingEnchantingWorkbench</EDID>
<OBND>
<struct min="-88,-10,-34" max="88,160,166" />
</OBND>
<FULL>7596</FULL>
<MODL>Furniture\EnchantingWorkbench.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5>49</unknown5>
<unknown4>
<unknownStruct unknown01="596376629" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="750707863" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="239999942" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="154940878" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="4237422690" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2520767592" textureType="0x00736464" unknown02="2531152908" />
<unknownStruct unknown01="3043550379" textureType="0x00736464" unknown02="2531152908" />
<unknownStruct unknown01="2006098786" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="3109427725" textureType="0x00736464" unknown02="664767518" />
<unknownStruct unknown01="3756340133" textureType="0x00736464" unknown02="664767518" />
<unknownStruct unknown01="2788788993" textureType="0x00736464" unknown02="664767518" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>0006e2a3,000a56d8,0006e9c7,0004f6dd,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="3" actorValueSkill="23" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000bf9e1" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x000c">
<EDID>CraftingBlackSmithForgeWR</EDID>
<VMAD version="5" format="2">
<script name="BlacksmithForge01" status="0">
<property name="FlameDamage" type="1" status="1">
<object formID="000153bd" alias="65535" unused="0x0000" />
</property>
</script>
</VMAD>
<OBND>
<struct min="-154,-157,-38" max="137,344,260" />
</OBND>
<FULL>7595</FULL>
<MODL>Furniture\BlacksmithForgeMarkerWR.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5>4</unknown5>
<unknown4>
<unknownStruct unknown01="3249903863" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="533228140" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2921338215" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="4290908030" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3756742260" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="2984945680" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2618504884" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="3967850257" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="206929423" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3743753636" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="4099871861" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3569054534" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="1336364341" textureType="0x00736464" unknown02="3232065151" />
<unknownStruct unknown01="911814939" textureType="0x00736464" unknown02="3232065151" />
<unknownStruct unknown01="4130591688" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="2345674207" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="2532311636" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="2817548872" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1308762508" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1282835679" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1685963155" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="556155462" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1639329509" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1760978452" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="4222490580" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="1879623364" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1253574659" textureType="0x00736464" unknown02="1969867521" />
</unknown4>
</MODT>
<KSIZ>6</KSIZ>
<KWDA>000a56d8,0006e9c7,000cae0a,0004f680,00088105,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="10" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000cae0b" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0003">
<EDID>CraftingBlackSmithForge</EDID>
<VMAD version="5" format="2">
<script name="BlacksmithForge01" status="0">
<property name="FlameDamage" type="1" status="1">
<object formID="000153bd" alias="65535" unused="0x0000" />
</property>
</script>
</VMAD>
<OBND>
<struct min="-161,-92,-38" max="137,344,260" />
</OBND>
<FULL>7594</FULL>
<MODL>Furniture\BlacksmithForgeMarker.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5>4</unknown5>
<unknown4>
<unknownStruct unknown01="3249903863" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="533228140" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2921338215" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="4290908030" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3756742260" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="2984945680" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2618504884" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="3967850257" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="206929423" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3743753636" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="4099871861" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3569054534" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="1685963155" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="556155462" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="2532311636" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="2817548872" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="4130591688" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="2345674207" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="3437121445" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="2721764791" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="3987547591" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="1486255527" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="193437980" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="3499083872" textureType="0x00736464" unknown02="314452046" />
<unknownStruct unknown01="4222490580" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="4113219352" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1324142250" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="925922830" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1879623364" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="1253574659" textureType="0x00736464" unknown02="1969867521" />
</unknown4>
</MODT>
<KSIZ>6</KSIZ>
<KWDA>000a56d8,0006e9c7,000cae0a,0004f680,00088105,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="10" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000d54ff" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0002">
<EDID>CraftingAlchemyWorkbenchTabletop</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,82,87" />
</OBND>
<FULL>7593</FULL>
<MODL>Furniture\AlchemyWorkstation.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="2900664440" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="2786718006" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="854384084" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="2317324634" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="2066803896" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="3134883325" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="2139825103" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2029396392" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="4222490580" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3756742260" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="1643990641" textureType="0x00736464" unknown02="3929839416" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>0002a40b,0004f6e6,0006e9c7,000a56d8,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="5" actorValueSkill="16" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000d5501" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0002">
<EDID>CraftingEnchantingWorkbenchTabletop</EDID>
<OBND>
<struct min="-41,-10,-34" max="41,100,139" />
</OBND>
<FULL>7592</FULL>
<MODL>Furniture\EnchantingWorkStation.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5>49</unknown5>
<unknown4>
<unknownStruct unknown01="596376629" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="750707863" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="239999942" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="154940878" textureType="0x00736464" unknown02="993209382" />
<unknownStruct unknown01="4237422690" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="2006098786" textureType="0x00736464" unknown02="3659922111" />
<unknownStruct unknown01="3109427725" textureType="0x00736464" unknown02="664767518" />
<unknownStruct unknown01="3756340133" textureType="0x00736464" unknown02="664767518" />
<unknownStruct unknown01="2788788993" textureType="0x00736464" unknown02="664767518" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,0006e2a3,0004f6dd,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="3" actorValueSkill="23" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="000d932f" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x000d">
<EDID>CraftingBlacksmithArmorWorkbench</EDID>
<OBND>
<struct min="-71,-84,-34" max="45,79,117" />
</OBND>
<FULL>7591</FULL>
<MODL>furniture\_Rblacksmithworkbench01.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="4256002273" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="2152285176" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="359208431" textureType="0x00736464" unknown02="1969867521" />
<unknownStruct unknown01="588387173" textureType="0x00736464" unknown02="1969867521" />
</unknown4>
</MODT>
<KSIZ>6</KSIZ>
<KWDA>000a56d8,0006e9c7,000d932e,000fd0e1,000adb78,0004f6fd</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="7" actorValueSkill="10" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="001010b3" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0009">
<EDID>CraftingCookingPotSm</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,64,94" />
</OBND>
<FULL>7590</FULL>
<MODL>Furniture\SmallCookingPot.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="4099871861" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3569054534" textureType="0x00736464" unknown02="861219928" />
<unknownStruct unknown01="4205593030" textureType="0x00736464" unknown02="3929839416" />
<unknownStruct unknown01="3594530037" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="3426394783" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1379563085" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1805171391" textureType="0x00736464" unknown02="2460462734" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,001010b2,000a5cb3,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="00104110" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0008">
<EDID>CraftingCookingPotLG</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,64,111" />
</OBND>
<FULL>7589</FULL>
<MODL>Furniture\LargeCookingPot.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="3594530037" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="3426394783" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1379563085" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1805171391" textureType="0x00736464" unknown02="2460462734" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,001010b2,000a5cb3,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="00108230" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0007">
<EDID>CraftingCookingPotSmNoHandle</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,64,64" />
</OBND>
<FULL>7588</FULL>
<MODL>Furniture\SmallCookingPotNoHandle.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="3594530037" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="3426394783" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="1379563085" textureType="0x00736464" unknown02="2460462734" />
<unknownStruct unknown01="1805171391" textureType="0x00736464" unknown02="2460462734" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,001010b2,000a5cb3,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="0010bfe3" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0005">
<EDID>CraftingCookingPotInvisible</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,64,64" />
</OBND>
<MODL>Furniture\SmallCookingPotNoHandleInv.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4>
<unknownStruct unknown01="3594530037" textureType="0x00736464" unknown02="2906384854" />
<unknownStruct unknown01="3426394783" textureType="0x00736464" unknown02="2906384854" />
</unknown4>
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0006e9c7,001010b2,000a5cb3,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>2</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="1" actorValueSkill="255" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x00000000" id="00133d52" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0001">
<EDID>CraftingAlchemyWorkbenchTabletopNoAct</EDID>
<OBND>
<struct min="-32,-10,-34" max="32,82,87" />
</OBND>
<MODL>Furniture\AlchemyWorkstation.nif</MODL>
<MODT count="2">
<unknown3></unknown3>
<unknown5></unknown5>
<unknown4 />
</MODT>
<KSIZ>5</KSIZ>
<KWDA>000a56d8,0002a40b,0006e9c7,0004f6e6,000fd0e1</KWDA>
<PNAM>0</PNAM>
<FNAM>0</FNAM>
<KNAM>00013794</KNAM>
<MNAM>1073741825</MNAM>
<WBDT>
<struct workbench="5" actorValueSkill="16" />
</WBDT>
<FNPR>
<struct flagsMarkerType="0x0001" flagsMarkerEntryPoint="0x0002" />
</FNPR>
</FURN>
<FURN flags="0x20000000" id="00140f38" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000"> <FURN flags="0x20000000" id="00140f38" day="0" month="0" lastUserID="0" currentUserID="0" version="44" unknown="0x0000">
<EDID>_00E_Placeable_CommonChair01NEW</EDID> <EDID>_00E_Placeable_CommonChair01NEW</EDID>
<VMAD version="5" format="2"> <VMAD version="5" format="2">

@ -144,7 +144,7 @@ Zearderes
TRANSLATION - POLISH VERSION TRANSLATION - POLISH VERSION
led by led by
Anna Łagowska (anathema83/my_summertime) Anna Łagowska (anathema88/my_summertime)
Szymon "Herob" Wrzos Szymon "Herob" Wrzos
Bartłomiej "Święty" Jabłoński Bartłomiej "Święty" Jabłoński
@ -755,6 +755,7 @@ Savior's Pants by Sam04956
Bowlegged jump animation Fix by mirap Bowlegged jump animation Fix by mirap
Magic Runes HD by HXP Magic Runes HD by HXP
XP32 Maximum Skeleton Extended - XPMSE by Groovtama XP32 Maximum Skeleton Extended - XPMSE by Groovtama
Armor Addon Fix for Qyranians and Arazealeans by SatansFetusLegs
Vanilla Script (micro)Optimizations by subhuman0100 Vanilla Script (micro)Optimizations by subhuman0100
Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage

@ -6,30 +6,6 @@ See https://en.wiki.sureai.net/Enderal:Patch for the list of official patches up
Beware, spoilers ahead! Beware, spoilers ahead!
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.
- Making a Wolf Blood in Call of the Hunt led to the objective to drink Chymikum, and vice versa.
2.0.12.3 (2022-09-16)
- Excluded a few distant cells from testing, fixes compatibility with SkyVRaan.
- Reverted dialoguemenu.swf to the pre-2.0.12 version and replaced quest journal in locked dialogs with a quit prompt. Discarded solution caused decreased input delay in menu mode and was making scrolling unusable.
- Reverted the Armor Addon Fix for Qyranians and Arazealeans, was enabling to equip two necklaces and two rings.
- NPCs, shattered after being frozen with Arctic Wind, were respawning in frozen state.
gavrant:
- Fixed a neck hole in Vagrant Dress.
- Mesh improvements in meshes/clutter/common/cratesmall*.nif - textures, normals, geometry issues.
2.0.12.2 (2022-09-12)
- The Father's arrival scene might fail to properly start (reported by KappaPride).
2.0.12.1 (2022-09-11)
- Fixed inability to create quest potions if 2.0.12 was installed during certain quest stages.
2.0.12 (2022-09-08) 2.0.12 (2022-09-08)
- Added Polish translation by Anna Łagowska, Szymon Wrzos, Bartłomiej Jabłoński, and contributors. - Added Polish translation by Anna Łagowska, Szymon Wrzos, Bartłomiej Jabłoński, and contributors.
- Fixed inability to open quest journal in locked dialogs. Modded dialoguemenu.swf requires re-patching to use this fix. - Fixed inability to open quest journal in locked dialogs. Modded dialoguemenu.swf requires re-patching to use this fix.

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

Binary file not shown.

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

Binary file not shown.

@ -1 +0,0 @@
version = 2.0.12.4

BIN
SKSE/Plugins/versionlib-1-6-629-0.bin (Stored with Git LFS)

Binary file not shown.

BIN
SKSE/Plugins/versionlib-1-6-640-0.bin (Stored with Git LFS)

Binary file not shown.

BIN
SKSE/Plugins/versionlib-1-6-659-0.bin (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,6 +1,6 @@
Enderal Credits.txt Enderal Credits.txt
Report a bug in Enderal SE.url Report a bug in Enderal SE.url
Enderal SE v2.0.12.4 Changelog.txt Enderal SE v2.0.12 Changelog.txt
Enderal - Forgotten Stories.esm Enderal - Forgotten Stories.esm
Enderal - Forgotten Stories.ini Enderal - Forgotten Stories.ini
E - Update.bsa E - Update.bsa
@ -30,11 +30,8 @@ Scripts\SKI_FavoritesManager.pex
Scripts\SKI_ConfigMenu.pex Scripts\SKI_ConfigMenu.pex
SKSE\Plugins\EnderalSE.dll SKSE\Plugins\EnderalSE.dll
SKSE\Plugins\EnderalSE.ini SKSE\Plugins\EnderalSE.ini
SKSE\Plugins\EnderalVersion.ini
SKSE\Plugins\version-1-5-97-0.bin SKSE\Plugins\version-1-5-97-0.bin
SKSE\Plugins\versionlib-1-6-353-0.bin SKSE\Plugins\versionlib-1-6-353-0.bin
SKSE\Plugins\versionlib-1-6-640-0.bin
SKSE\Plugins\versionlib-1-6-659-0.bin
SKSE\SKSE.ini SKSE\SKSE.ini
Skyrim.esm Skyrim.esm
Update.esm Update.esm

@ -145,7 +145,7 @@ Zearderes
TRANSLATION - POLISH VERSION TRANSLATION - POLISH VERSION
led by led by
Anna Łagowska (anathema83/my_summertime) Anna Łagowska (anathema88/my_summertime)
Szymon "Herob" Wrzos Szymon "Herob" Wrzos
Bartłomiej "Święty" Jabłoński Bartłomiej "Święty" Jabłoński
@ -756,6 +756,7 @@ Savior's Pants by Sam04956
Bowlegged jump animation Fix by mirap Bowlegged jump animation Fix by mirap
Magic Runes HD by HXP Magic Runes HD by HXP
XP32 Maximum Skeleton Extended - XPMSE by Groovtama XP32 Maximum Skeleton Extended - XPMSE by Groovtama
Armor Addon Fix for Qyranians and Arazealeans by SatansFetusLegs
Vanilla Script (micro)Optimizations by subhuman0100 Vanilla Script (micro)Optimizations by subhuman0100
Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage

@ -145,7 +145,7 @@ Zearderes
TRANSLATION - POLISH VERSION TRANSLATION - POLISH VERSION
led by led by
Anna Łagowska (anathema83/my_summertime) Anna Łagowska (anathema88/my_summertime)
Szymon "Herob" Wrzos Szymon "Herob" Wrzos
Bartłomiej "Święty" Jabłoński Bartłomiej "Święty" Jabłoński
@ -756,6 +756,7 @@ Savior's Pants by Sam04956
Bowlegged jump animation Fix by mirap Bowlegged jump animation Fix by mirap
Magic Runes HD by HXP Magic Runes HD by HXP
XP32 Maximum Skeleton Extended - XPMSE by Groovtama XP32 Maximum Skeleton Extended - XPMSE by Groovtama
Armor Addon Fix for Qyranians and Arazealeans by SatansFetusLegs
Vanilla Script (micro)Optimizations by subhuman0100 Vanilla Script (micro)Optimizations by subhuman0100
Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage Unnecessarily Fixed Fixed Dragon Stalking Fix by tarlazo and KirbonatedBeverage

BIN
interface/dialoguemenu.swf (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
meshes/clutter/common/cratesmall01.nif (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
meshes/clutter/common/cratesmall02.nif (Stored with Git LFS)

Binary file not shown.

BIN
meshes/clutter/common/cratesmall03.nif (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
meshes/clutter/common/cratesmall04.nif (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
meshes/enderal/medievalpack/door01.nif (Stored with Git LFS)

Binary file not shown.

BIN
meshes/enderal/medievalpack/door02.nif (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

@ -81,7 +81,7 @@ inline void CheckSkyrimCells()
// FormIDs of all Skyrim cells. // FormIDs of all Skyrim cells.
// 9 of them are commented out, because they are cells in Enderal as well. // 9 of them are commented out, because they are cells in Enderal as well.
uint32_t formids[574] = { uint32_t formids[582] = {
0x0004B8FB, 0x0004B8FB,
0x000352C7, 0x000352C7,
0x000161E7, 0x000161E7,
@ -95,7 +95,7 @@ inline void CheckSkyrimCells()
0x000A8B23, 0x000A8B23,
0x000918D3, 0x000918D3,
0x0004761B, 0x0004761B,
//0x0003CBCB, 0x0003CBCB,
0x00016A07, 0x00016A07,
0x00015233, 0x00015233,
0x000138CF, 0x000138CF,
@ -143,7 +143,7 @@ inline void CheckSkyrimCells()
0x000161F1, 0x000161F1,
0x00015251, 0x00015251,
0x00013A7D, 0x00013A7D,
//0x00030442, 0x00030442,
0x000152AA, 0x000152AA,
0x00013A72, 0x00013A72,
0x000571B4, 0x000571B4,
@ -326,7 +326,7 @@ inline void CheckSkyrimCells()
0x000C9DAB, 0x000C9DAB,
0x000A1793, 0x000A1793,
0x00094BAB, 0x00094BAB,
//0x00030313, 0x00030313,
0x00016DFF, 0x00016DFF,
0x000152A7, 0x000152A7,
0x0007FCDD, 0x0007FCDD,
@ -468,7 +468,7 @@ inline void CheckSkyrimCells()
0x00015237, 0x00015237,
0x00077289, 0x00077289,
0x00075669, 0x00075669,
//0x0002FD85, 0x0002FD85,
0x000165B5, 0x000165B5,
0x0003FC8F, 0x0003FC8F,
0x000165AB, 0x000165AB,
@ -542,7 +542,7 @@ inline void CheckSkyrimCells()
0x0001F358, 0x0001F358,
0x00016780, 0x00016780,
0x00015268, 0x00015268,
//0x0002F83E, 0x0002F83E,
0x0002529E, 0x0002529E,
0x00016776, 0x00016776,
0x000161FE, 0x000161FE,
@ -599,7 +599,7 @@ inline void CheckSkyrimCells()
0x00015267, 0x00015267,
0x001052FD, 0x001052FD,
0x00104871, 0x00104871,
//0x0002F83D, 0x0002F83D,
0x00016775, 0x00016775,
0x000152C1, 0x000152C1,
0x0001525D, 0x0001525D,
@ -632,7 +632,7 @@ inline void CheckSkyrimCells()
0x0009CCDE, 0x0009CCDE,
//0x0007284E, //0x0007284E,
0x00067F2A, 0x00067F2A,
//0x0003016A, 0x0003016A,
0x000198DE, 0x000198DE,
0x000169FE, 0x000169FE,
0x000165B2, 0x000165B2,
@ -674,7 +674,7 @@ inline void CheckSkyrimCells()
0x00027D1C 0x00027D1C
}; };
for (int i = 0; i < 574; i++) { for (int i = 0; i < 582; i++) {
const auto* form = RE::TESForm::LookupByID(formids[i]); const auto* form = RE::TESForm::LookupByID(formids[i]);
if (form && form->Is(RE::FormType::Cell)) { if (form && form->Is(RE::FormType::Cell)) {
logger::warn("Detected invalid cell: {:08X}", formids[i]); logger::warn("Detected invalid cell: {:08X}", formids[i]);
@ -1331,217 +1331,3 @@ 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);
}
}
}

@ -34,8 +34,18 @@ namespace {
void InitializeMessaging() void InitializeMessaging()
{ {
GetMessagingInterface()->RegisterListener([](MessagingInterface::Message* message) { GetMessagingInterface()->RegisterListener([](MessagingInterface::Message* message) {
if (message->type == MessagingInterface::kPostLoad) { if (message->type == MessagingInterface::kPostLoad) {
if (DataFileExists("Dawnguard.esm") || DataFileExists("Dragonborn.esm") || DataFileExists("HearthFires.esm") || DataFileExists("Update.esm")) {
MessageBoxW(NULL, L"Skyrim DLCs are incompatible with Enderal.", L"Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
}
if (DataFileExists("Unofficial Skyrim Special Edition Patch.esp")) {
MessageBoxW(NULL, L"Unofficial Skyrim Special Edition Patch is incompatible with Enderal.", L"Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
}
CheckCCMods();
if (g_settings.at("StayAtSystemPage")) { if (g_settings.at("StayAtSystemPage")) {
if (const auto pluginInfo = GetLoadInterface()->GetPluginInfo("StayAtSystemPage"); pluginInfo) { if (const auto pluginInfo = GetLoadInterface()->GetPluginInfo("StayAtSystemPage"); pluginInfo) {
MessageBoxW(NULL, L"Stay At The System Page is already included in Enderal, please, disable it.", L"Error", MB_OK | MB_ICONERROR); MessageBoxW(NULL, L"Stay At The System Page is already included in Enderal, please, disable it.", L"Error", MB_OK | MB_ICONERROR);
@ -49,6 +59,11 @@ namespace {
} }
} }
SetINISettings();
EventListener::Install();
} else if (message->type == MessagingInterface::kPostPostLoad) {
SKSE::GetModCallbackEventSource()->AddEventSink(EventListener::GetSingleton());
} else if (message->type == MessagingInterface::kDataLoaded) { } else if (message->type == MessagingInterface::kDataLoaded) {
const auto dataHandler = RE::TESDataHandler::GetSingleton(); const auto dataHandler = RE::TESDataHandler::GetSingleton();
if (dataHandler) { if (dataHandler) {
@ -62,37 +77,21 @@ namespace {
} }
} }
if (!RE::BSScript::Internal::VirtualMachine::GetSingleton()->TypeIsValid("UI")) {
RE::DebugMessageBox("Unable to detect SKSE scripts, make sure SKSE is properly installed.");
}
bool bScripts = RE::BSScript::Internal::VirtualMachine::GetSingleton()->TypeIsValid("PRKF__00E_CraftQuestPotionPe_0300146D"); bool bScripts = RE::BSScript::Internal::VirtualMachine::GetSingleton()->TypeIsValid("PRKF__00E_CraftQuestPotionPe_0300146D");
bool bInterface = RE::BSResourceNiBinaryStream("interface/00e_heromenu.swf").good();
if (!bScripts || !bInterface) {
RE::DebugMessageBox("E - Misc.bsa is not loaded or is outdated. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files.");
}
bool bSounds = RE::BSResourceNiBinaryStream("sound/fx/enderal/laughingchild.wav").good(); bool bSounds = RE::BSResourceNiBinaryStream("sound/fx/enderal/laughingchild.wav").good();
if (!bSounds) {
RE::DebugMessageBox("E - Sounds.bsa is not loaded. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files.");
}
bool bVoices = RE::BSResourceNiBinaryStream("sound/voice/enderal - forgotten stories.esm/vt_calia/fs_mq18c__0002a4ed_1.fuz").good(); bool bVoices = RE::BSResourceNiBinaryStream("sound/voice/enderal - forgotten stories.esm/vt_calia/fs_mq18c__0002a4ed_1.fuz").good();
if (!bVoices) {
RE::DebugMessageBox("L - Voices.bsa is not loaded. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files.");
}
bool bMeshes = RE::BSResourceNiBinaryStream("meshes/enderal/loadscreenart/loadscreenundercity.nif").good(); bool bMeshes = RE::BSResourceNiBinaryStream("meshes/enderal/loadscreenart/loadscreenundercity.nif").good();
bool bTextures = RE::BSResourceNiBinaryStream("textures/enderal/forgottenstories/theriantrophist/theriantrophistrecipe.dds").good();
bool bInterface = RE::BSResourceNiBinaryStream("interface/00e_heromenu.swf").good();
if (!bMeshes) { if (!bScripts || !bSounds || !bVoices || !bMeshes || !bTextures || !bInterface) {
RE::DebugMessageBox("E - Meshes.bsa is not loaded. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files."); MessageBoxW(NULL, L"One or more of Enderal's BSA archives are not loaded. Make sure Enderal - Forgotten Stories.esm is enabled and revalidate your files.", L"Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
} }
CheckIncompatibleMods(); CheckIncompatibleMods();
} else if (message->type == MessagingInterface::kPreLoadGame) {
//
} else if ((message->type == MessagingInterface::kPostLoadGame && message->data) || message->type == MessagingInterface::kNewGame) { } else if ((message->type == MessagingInterface::kPostLoadGame && message->data) || message->type == MessagingInterface::kNewGame) {
NewGameCount(true); NewGameCount(true);
} }
@ -102,31 +101,6 @@ namespace {
SKSEPluginLoad(const LoadInterface* skse) { SKSEPluginLoad(const LoadInterface* skse) {
std::string filenames[4] = {
"fs.dll",
"fs_se.dll",
"fs_skse_functions.dll",
"FlatMapMarkersEnderal.dll"
};
for (int i = 0; i < 4; i++) {
if (std::filesystem::exists(std::format("Data\\SKSE\\Plugins\\{}", filenames[i]))) {
MessageBoxA(NULL, std::format("Found a leftover file from a previous version of Enderal SE. Please, delete Data\\SKSE\\Plugins\\{}.", filenames[i]).c_str(), "Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
}
}
if (DataFileExists("Dawnguard.esm") || DataFileExists("Dragonborn.esm") || DataFileExists("HearthFires.esm") || DataFileExists("Update.esm")) {
MessageBoxW(NULL, L"Skyrim DLCs are incompatible with Enderal.", L"Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
}
if (DataFileExists("Unofficial Skyrim Special Edition Patch.esp")) {
MessageBoxW(NULL, L"Unofficial Skyrim Special Edition Patch is incompatible with Enderal.", L"Error", MB_OK | MB_ICONERROR);
exit(EXIT_FAILURE);
}
CheckCCMods();
GetLoadInterface(skse); GetLoadInterface(skse);
InitializeLogging(); InitializeLogging();
@ -140,8 +114,6 @@ SKSEPluginLoad(const LoadInterface* skse) {
Init(skse); Init(skse);
InitializeMessaging(); InitializeMessaging();
SKSE::GetModCallbackEventSource()->AddEventSink(EventListener::GetSingleton());
GetPapyrusInterface()->Register(Papyrus::Bind); GetPapyrusInterface()->Register(Papyrus::Bind);
if (!IsVR()) { if (!IsVR()) {

@ -2,7 +2,6 @@
#include "CheckInvalidForms.h" #include "CheckInvalidForms.h"
#include <SimpleIni.h> #include <SimpleIni.h>
#include <regex>
inline const SKSE::LoadInterface* GetLoadInterface(const SKSE::LoadInterface* loadInterface = nullptr) inline const SKSE::LoadInterface* GetLoadInterface(const SKSE::LoadInterface* loadInterface = nullptr)
{ {
@ -34,26 +33,31 @@ inline bool IsVR()
return GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_VR_1_4_15 || GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_LATEST_VR; return GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_VR_1_4_15 || GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_LATEST_VR;
} }
inline void CheckIncompatibleMods() inline void SetINISettings()
{ {
bool bPrinted = false; auto* setting = RE::INIPrefSettingCollection::GetSingleton()->GetSetting("bFreebiesSeen:General");
if (std::filesystem::exists("Data\\SKSE\\Plugins\\EnderalVersion.ini")) { if (setting && !setting->GetBool()) {
CSimpleIniA ini; setting->data.b = true;
ini.SetUnicode(false); RE::INIPrefSettingCollection::GetSingleton()->WriteSetting(setting);
ini.SetMultiKey(false);
ini.LoadFile("Data/SKSE/Plugins/EnderalVersion.ini");
const char* version = ini.GetValue("", "version", "2.0.x");
std::regex version_expr("^[\\d\\.]+$");
if (std::regex_match(version, version_expr)) {
RE::ConsoleLog::GetSingleton()->Print(std::format("Loaded SureAI's Enderal: Forgotten Stories | Special Edition v{} by Eddoursul and contributors", version).c_str());
bPrinted = true;
}
} }
if (!bPrinted) { setting = RE::INISettingCollection::GetSingleton()->GetSetting("bInvalidateOlderFiles:Archive");
RE::ConsoleLog::GetSingleton()->Print("Loaded SureAI's Enderal: Forgotten Stories | Special Edition v2.0.x by Eddoursul and contributors"); if (setting && !setting->GetBool()) {
setting->data.b = true;
RE::INISettingCollection::GetSingleton()->WriteSetting(setting);
} }
setting = RE::INISettingCollection::GetSingleton()->GetSetting("bModManagerMenuEnabled:General");
if (setting && setting->GetBool()) {
setting->data.b = false;
RE::INISettingCollection::GetSingleton()->WriteSetting(setting);
}
}
inline void CheckIncompatibleMods()
{
RE::ConsoleLog::GetSingleton()->Print("Loaded SureAI's Enderal: Forgotten Stories | Special Edition v2.0.12 by Eddoursul and contributors");
CheckBlacklist(); CheckBlacklist();
CheckWorldspaces(); CheckWorldspaces();
CheckUnconvertedMap(); CheckUnconvertedMap();
@ -61,8 +65,6 @@ inline void CheckIncompatibleMods()
CheckEnderalCells(); CheckEnderalCells();
CheckEnderalContainers(); CheckEnderalContainers();
CheckEnderalNPCs(); CheckEnderalNPCs();
CheckEnderalActivators();
CheckEnderalStatics();
} }
inline void LoadINI(std::map<std::string, bool>* settings, const char* iniPath) inline void LoadINI(std::map<std::string, bool>* settings, const char* iniPath)

@ -1,15 +1,15 @@
{ {
"registries": [ "registries": [
{ {
"kind": "git", "kind": "git",
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass", "repository": "https://gitlab.com/colorglass/vcpkg-colorglass",
"baseline": "bbd09a56b951d86dec3ea484ec183d00b013b486", "baseline": "5a11d06fd1b2d7cd6339d6aea48d450309e89cc1",
"packages": [ "packages": [
"commonlibsse-ng", "commonlibsse-ng",
"gluino", "gluino",
"script-extender-common", "script-extender-common",
"skse" "skse"
] ]
} }
] ]
} }

@ -6,7 +6,7 @@ message("Using toolchain file ${CMAKE_TOOLCHAIN_FILE}.")
######################################################################################################################## ########################################################################################################################
project( project(
EnderalSteam EnderalSteam
VERSION 1.0.1 VERSION 1.0.0
DESCRIPTION "Enderal SE Steam Support" DESCRIPTION "Enderal SE Steam Support"
LANGUAGES CXX) LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)

@ -10,7 +10,7 @@ namespace Achievements {
{ {
std::map<std::string, bool> settings{ std::map<std::string, bool> settings{
{ "SendAchievementsToLE", false }, { "SendAchievementsToLE", false },
{ "TestMode", false }, { "TestMode", true },
{ "ShowWarningOnInitFail", true } { "ShowWarningOnInitFail", true }
}; };
LoadINI(&settings, "Data/SKSE/Plugins/EnderalSteam.ini"); LoadINI(&settings, "Data/SKSE/Plugins/EnderalSteam.ini");
@ -36,9 +36,9 @@ namespace Achievements {
bool success = SteamAPI_Init(); bool success = SteamAPI_Init();
if (success) { if (success) {
logger::info("{}", "Steam api init was successfull"); logger::info("Steam api init was successfull");
} else { } else {
logger::error("{}", "Error while initializing the steam api"); logger::error("Error while initializing the steam api");
if (settings.at("ShowWarningOnInitFail")) { if (settings.at("ShowWarningOnInitFail")) {
RE::DebugMessageBox("Unable to initialize Steam achievements. Try to restart the game and the Steam client. This warning can be disabled in SKSE\\Plugins\\EnderalSteam.ini."); RE::DebugMessageBox("Unable to initialize Steam achievements. Try to restart the game and the Steam client. This warning can be disabled in SKSE\\Plugins\\EnderalSteam.ini.");
} }
@ -47,12 +47,12 @@ namespace Achievements {
SteamInstance(new AchievementHolder()); SteamInstance(new AchievementHolder());
} }
else { else {
logger::info("{}", "Already initialized steam api, skipping it"); logger::info("Already initialized steam api, skipping it");
} }
} }
catch (const std::exception& ex) { catch (const std::exception& ex) {
std::string msg = "Exception while initializing the Steam API, steam achievements will not be available: " + std::string(ex.what()); std::string msg = "Exception while initializing the Steam API, steam achievements will not be available: " + std::string(ex.what());
logger::error("{}", msg.c_str()); logger::error(msg.c_str());
if (settings.at("ShowWarningOnInitFail")) { if (settings.at("ShowWarningOnInitFail")) {
RE::DebugMessageBox("Unable to initialize Steam achievements. Try to restart the game and the Steam client. This warning can be disabled in SKSE\\Plugins\\EnderalSteam.ini."); RE::DebugMessageBox("Unable to initialize Steam achievements. Try to restart the game and the Steam client. This warning can be disabled in SKSE\\Plugins\\EnderalSteam.ini.");
} }
@ -66,30 +66,30 @@ namespace Achievements {
void AchievementHolder::onUserStatsReceived(UserStatsReceived_t * event) { void AchievementHolder::onUserStatsReceived(UserStatsReceived_t * event) {
try { try {
std::string msg = "User id: " + std::to_string(event->m_steamIDUser.ConvertToUint64()) + ", game id: " + std::to_string(event->m_nGameID) + ", success state: " + std::to_string(event->m_eResult); std::string msg = "User id: " + std::to_string(event->m_steamIDUser.ConvertToUint64()) + ", game id: " + std::to_string(event->m_nGameID) + ", success state: " + std::to_string(event->m_eResult);
logger::info("{}", msg.c_str()); logger::info(msg.c_str());
uint32 achievementCount = this->stats->GetNumAchievements(); uint32 achievementCount = this->stats->GetNumAchievements();
msg = "There are " + std::to_string(achievementCount) + " achievements"; msg = "There are " + std::to_string(achievementCount) + " achievements";
logger::info("{}", msg.c_str()); logger::info(msg.c_str());
} }
catch (const std::exception& ex) { catch (const std::exception& ex) {
std::string msg = "Exception during steam callback: onUserStatsReceived. Failed to print data: " + std::string(ex.what()); std::string msg = "Exception during steam callback: onUserStatsReceived. Failed to print data: " + std::string(ex.what());
logger::info("{}", msg.c_str()); logger::info(msg.c_str());
} }
} }
bool AchievementHolder::setAchievementUnlocked(const char * achievementName) bool AchievementHolder::setAchievementUnlocked(const char * achievementName)
{ {
std::string msg = "Unlocking achievement: " + std::string(achievementName); std::string msg = "Unlocking achievement: " + std::string(achievementName);
logger::info("{}", msg.c_str()); logger::info(msg.c_str());
bool success = this->stats->SetAchievement(achievementName); bool success = this->stats->SetAchievement(achievementName);
if (!success) { if (!success) {
logger::error("{}", "Error while unlocking achievement"); logger::error("Error while unlocking achievement");
return false; return false;
} }
success = this->stats->StoreStats(); success = this->stats->StoreStats();
if (!success) { if (!success) {
logger::error("{}", "Error while storing unlocked achievement"); logger::error("Error while storing unlocked achievement");
} }
return success; return success;
} }

@ -19,9 +19,11 @@ auto EventListener::ProcessEvent(
-> RE::BSEventNotifyControl -> RE::BSEventNotifyControl
{ {
if (a_event->opening && a_event->menuName == "Main Menu") { if (a_event->opening && a_event->menuName == "Main Menu") {
SKSE::GetTaskInterface()->AddTask([]() {
logger::info("Main menu opened, trying to init steam API.");
Achievements::startSteam();
});
RE::UI::GetSingleton()->RemoveEventSink<RE::MenuOpenCloseEvent>(GetSingleton()); RE::UI::GetSingleton()->RemoveEventSink<RE::MenuOpenCloseEvent>(GetSingleton());
logger::info("{}", "Main menu opened, trying to init steam API.");
Achievements::startSteam();
} }
return RE::BSEventNotifyControl::kContinue; return RE::BSEventNotifyControl::kContinue;

@ -24,6 +24,15 @@ namespace {
spdlog::set_default_logger(std::move(log)); spdlog::set_default_logger(std::move(log));
spdlog::set_pattern("[%l] %v"s); spdlog::set_pattern("[%l] %v"s);
} }
void InitializeMessaging()
{
GetMessagingInterface()->RegisterListener([](MessagingInterface::Message* message) {
if (message->type == MessagingInterface::kPostLoad) {
EventListener::Install();
}
});
}
} }
SKSEPluginLoad(const LoadInterface* skse) { SKSEPluginLoad(const LoadInterface* skse) {
@ -37,8 +46,7 @@ SKSEPluginLoad(const LoadInterface* skse) {
logger::info("{} {} is loading...", plugin->GetName(), version); logger::info("{} {} is loading...", plugin->GetName(), version);
Init(skse); Init(skse);
InitializeMessaging();
EventListener::Install();
GetPapyrusInterface()->Register(Papyrus::Bind); GetPapyrusInterface()->Register(Papyrus::Bind);

@ -6,7 +6,7 @@ namespace Papyrus
bool Bind(VM* a_vm) bool Bind(VM* a_vm)
{ {
if (!a_vm) { if (!a_vm) {
logger::critical("{}", "couldn't get VM State"sv); logger::critical("couldn't get VM State"sv);
return false; return false;
} }

@ -11,7 +11,7 @@ namespace Papyrus::PapyrusFunctions
return SteamInstance()->setAchievementUnlocked(achievement.c_str()); return SteamInstance()->setAchievementUnlocked(achievement.c_str());
} else { } else {
RE::DebugNotification(std::format("Achievement unlocked: {}", achievement.c_str()).c_str()); RE::DebugNotification(std::format("Achievement unlocked: {}", achievement.c_str()).c_str());
logger::info("{}", std::format("Achievement unlocked: {}", achievement.c_str()).c_str()); logger::info(std::format("Achievement unlocked: {}", achievement.c_str()).c_str());
return true; return true;
} }
} }
@ -19,6 +19,6 @@ namespace Papyrus::PapyrusFunctions
inline void Bind(VM& a_vm) inline void Bind(VM& a_vm)
{ {
BIND(CallUnlockAchievement); BIND(CallUnlockAchievement);
logger::info("{}", "Registered CallUnlockAchievement"sv); logger::info("Registered CallUnlockAchievement"sv);
} }
} }

@ -73,6 +73,6 @@ inline void LoadINI(std::map<std::string, bool>* settings, const char* iniPath)
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
logger::error("{}", e.what()); logger::error(e.what());
} }
} }

@ -1,15 +1,15 @@
{ {
"registries": [ "registries": [
{ {
"kind": "git", "kind": "git",
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass", "repository": "https://gitlab.com/colorglass/vcpkg-colorglass",
"baseline": "bbd09a56b951d86dec3ea484ec183d00b013b486", "baseline": "5a11d06fd1b2d7cd6339d6aea48d450309e89cc1",
"packages": [ "packages": [
"commonlibsse-ng", "commonlibsse-ng",
"gluino", "gluino",
"script-extender-common", "script-extender-common",
"skse" "skse"
] ]
} }
] ]
} }

@ -1,7 +1,7 @@
{ {
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "enderal-se-steam", "name": "enderal-se-steam",
"version-string": "1.0.1", "version-string": "1.0.0",
"port-version": 0, "port-version": 0,
"description": "Enderal SE Steam Support", "description": "Enderal SE Steam Support",
"homepage": "https://eddoursul.win/mods/enderal-se/", "homepage": "https://eddoursul.win/mods/enderal-se/",

@ -10,11 +10,11 @@ Auto State Default
Debug.Trace(self + ", OnEffectStart (Default): akTarget = " + akTarget + "; akCaster = " + akCaster) Debug.Trace(self + ", OnEffectStart (Default): akTarget = " + akTarget + "; akCaster = " + akCaster)
FrozenActor = akCaster FrozenActor = akCaster
If FrozenActor && FrozenActor.GetActorValuePercentage("Health") > 0.1 && FrozenActor.HasPerk(_00E_FrozenPerk) == False If FrozenActor && FrozenActor.GetAVPercentage("Health") > 0.1 && FrozenActor.HasPerk(_00E_FrozenPerk) == False
_00E_A1_ArcticWindFreezeM.Play(akTarget) _00E_A1_ArcticWindFreezeM.Play(akTarget)
FrozenActor.AddPerk(_00E_FrozenPerk) FrozenActor.AddPerk(_00E_FrozenPerk)
FrozenActor.EnableAI(False) FrozenActor.EnableAI(False)
FrozenActor.SetActorValue("Paralysis", 1.0) ; Prevents movement and attacking. FrozenActor.SetAV("Paralysis", 1.0) ; Prevents movement and attacking.
GoToState("Frozen") GoToState("Frozen")
EndIf EndIf
@ -120,11 +120,7 @@ EndState
State Finished State Finished
Event OnEffectFinish(Actor akTarget, Actor akCaster) ; Do nothing
FrozenActor.SetActorValue("Paralysis", 0)
FrozenActor.EnableAI(True)
FrozenActor.RemovePerk(_00E_FrozenPerk)
EndEvent
EndState EndState
@ -156,7 +152,7 @@ Function ShatterEnemy()
Steam.UnlockAchievement("END_FROZEN_01") Steam.UnlockAchievement("END_FROZEN_01")
_00E_FrozenAchievementUnlocked.SetValueInt(1) _00E_FrozenAchievementUnlocked.SetValueInt(1)
EndIf EndIf
; DeletePositionMarker() ; DeletePositionMarker()
EndFunction EndFunction
@ -171,7 +167,7 @@ EndFunction
Function EnableTargetAI() Function EnableTargetAI()
If bReenabledAI == False If bReenabledAI == False
bReenabledAI = True bReenabledAI = True
FrozenActor.SetActorValue("Paralysis", 0) FrozenActor.SetAV("Paralysis", 0)
;/ If PositionMarkerRef ;/ If PositionMarkerRef
FrozenActor.MoveTo(PositionMarkerRef) FrozenActor.MoveTo(PositionMarkerRef)
EndIf /; EndIf /;

@ -281,24 +281,25 @@ Function StartSC06()
FS_NQR05_SC06_ActivationTriggerREF.Disable() FS_NQR05_SC06_ActivationTriggerREF.Disable()
; transform the player back if currently a werewolf, due to being used as actor in scenes in SC06 ; transform the player back if currently a werewolf, due to being used as actor in scenes in SC06
_FS_TheriantrophistControlQuest.TransformBackIfTransformed() _FS_TheriantrophistControlQuest.TransformBackIfTransformed()
FS_NQR05_SC06_FatherArrival.ForceStart()
FadeToBlackIMOD.Apply()
Wait(2.5)
FadeToBlackHoldIMOD.ApplyCrossFade() FadeToBlackHoldIMOD.ApplyCrossFade()
Levelsystem.SetAllowIdleChatter(false) Timescale.SetValue(0.01) ; preventing the time from advancing during this lengthy scene
Timescale.SetValue(0.1) ; preventing the time from advancing during this lengthy scene
Levelsystem.SkipTimeToHour(18.75) Levelsystem.SkipTimeToHour(18.75)
Wait(2.5)
_00E_FS_NQR05_SiteWeatherSnow.ForceActive(True) _00E_FS_NQR05_SiteWeatherSnow.ForceActive(True)
Levelsystem.SetAllowIdleChatter(false)
FS_NQR05_SC05_GateREF.SetOpen(False) FS_NQR05_SC05_GateREF.SetOpen(False)
FS_NQR05_SC05_GateREF.BlockActivation(True) FS_NQR05_SC05_GateREF.BlockActivation(True)
_00E_TeleportGlobal.SetValueInt(1) _00E_TeleportGlobal.SetValueInt(1)
PlayerREF.MoveTo(FS_NQR05_SC06_WallMarkerREF) PlayerREF.MoveTo(FS_NQR05_SC06_WallMarkerREF)
Game.DisablePlayerControls() Game.DisablePlayerControls()
FS_NQR05_SC06_FatherArrival.ForceStart()
EndFunction EndFunction
Function FadeBack() Function FadeBack()
; Called in Phase 1, FS_NQR05_SC06_FatherArrival ; Called in Phase 2, FS_NQR05_SC06_FatherArrival
; FadeToBlackHoldIMOD.Remove() ; FadeToBlackHoldIMOD.Remove()
; FS_NQR05_ZaraahREF.Enable() ; FS_NQR05_ZaraahREF.Enable()
FadeToBlackBackIMOD.ApplyCrossFade() FadeToBlackBackIMOD.ApplyCrossFade()

@ -1,7 +1,7 @@
Scriptname _00E_PlayerSetUpScript extends ObjectReference Scriptname _00E_PlayerSetUpScript extends ObjectReference
{Initializes all the necessary Quests, maintains the player, contains various OnPlayerLoadGame() failsafes. This script is important for proper updating, do not overwrite it.} {Initializes all the necessary Quests, maintains the player, contains various OnPlayerLoadGame() failsafes. This script is important for proper updating, do not overwrite it.}
Float Property CURRENT_PATCH_VERSION = 2.124 AutoReadOnly Float Property CURRENT_PATCH_VERSION = 2.12 AutoReadOnly
;===================================================================================== ;=====================================================================================
@ -170,17 +170,6 @@ Function Update_212()
PlayerREF.AddPerk(Game.GetFormFromFile(0x14CF9, "Enderal - Forgotten Stories.esm") as Perk) ; _00E_SE_2_0_12_UpgradePerk PlayerREF.AddPerk(Game.GetFormFromFile(0x14CF9, "Enderal - Forgotten Stories.esm") as Perk) ; _00E_SE_2_0_12_UpgradePerk
EndFunction EndFunction
Function Update_212_hotfix1()
Quest rNQ05 = Game.GetFormFromFile(0x1C82F, "Enderal - Forgotten Stories.esm") as Quest
if rNQ05.GetCurrentStageID() >= 30 && rNQ05.GetCurrentStageID() < 40
PlayerREF.AddPerk(Game.GetFormFromFile(0x14CF6, "Enderal - Forgotten Stories.esm") as Perk) ; _00E_FS_NQ05_CraftPotionPerk
endif
Quest rNQ07 = Game.GetFormFromFile(0x1CA09, "Enderal - Forgotten Stories.esm") as Quest
if rNQ07.GetCurrentStageID() == 115
PlayerREF.AddPerk(Game.GetFormFromFile(0x14CF7, "Enderal - Forgotten Stories.esm") as Perk) ; _00E_FS_NQ07_CraftPotionPerk
endif
EndFunction
;===================================================================================== ;=====================================================================================
; ALL UPDATES ; ALL UPDATES
@ -278,9 +267,6 @@ Function Maintenance()
If fPatchVersion < 2.12 If fPatchVersion < 2.12
Update_212() Update_212()
EndIf EndIf
If fPatchVersion < 2.121
Update_212_hotfix1()
EndIf
fPatchVersion = CURRENT_PATCH_VERSION fPatchVersion = CURRENT_PATCH_VERSION
endif endif

@ -134,58 +134,26 @@ endFunction
Function DisableDialogueQuitting() Global Function DisableDialogueQuitting() Global
{Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.} {Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.}
if ! UI.IsMenuOpen("Dialogue Menu") if UI.IsMenuOpen("Dialogue Menu")
UnregisterDialogQuitKey()
return
endif
if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true
; Suspected non-Enderal dialoguemenu.swf replacer, rechecking value in order to be sure.
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True)
if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true
Debug.Notification("Detected incompatible dialoguemenu.swf!") ; Suspected non-Enderal dialoguemenu.swf replacer, rechecking value in order to be sure.
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True)
if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true
Debug.Notification("Detected incompatible dialoguemenu.swf!")
endif
endif endif
endif endif
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", False) UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", False)
Quest Levelsystem = Game.GetForm(0x10AA2) as Quest
Levelsystem.RegisterForKey(1) ; Escape
Levelsystem.RegisterForKey(15) ; Tab
int iControllerKey = Input.GetMappedKey("Tween Menu", 0x02)
if iControllerKey > -1
Levelsystem.RegisterForKey(iControllerKey) ; Controller
endif
Levelsystem.RegisterForMenu("Dialogue Menu")
EndFunction EndFunction
Function EnableDialogueQuitting() Global Function EnableDialogueQuitting() Global
{Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.} {Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.}
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True) UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True)
UnregisterDialogQuitKey()
EndFunction
function UnregisterDialogQuitKey() Global
Quest Levelsystem = Game.GetForm(0x10AA2) as Quest
Levelsystem.UnregisterForAllKeys()
Levelsystem.UnregisterForMenu("Dialogue Menu")
endfunction
Event OnKeyDown(Int KeyCode) EndFunction
if UI.IsMenuOpen("Dialogue Menu")
if ! UI.IsMenuOpen("MessageBoxMenu") && ! UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab")
if (Game.GetFormFromFile(0x163D, "Update.esm") as Message).Show() == 1
Game.QuitToMainMenu()
endif
endif
else
UnregisterDialogQuitKey()
endif
EndEvent
Function RefreshFace() Global Function RefreshFace() Global
@ -969,8 +937,6 @@ Event OnMenuClose(String MenuName)
If MenuName == "Book Menu" If MenuName == "Book Menu"
MTToRemove.Remove() MTToRemove.Remove()
UnregisterForMenu("Book Menu") UnregisterForMenu("Book Menu")
elseif MenuName == "Dialogue Menu"
UnregisterDialogQuitKey()
EndIf EndIf
EndEvent EndEvent
@ -1400,7 +1366,6 @@ Message Property _00E_Levelsystem_sEldritchBloodAttackTargetMarked Auto
Message Property _00E_Levelsystem_sEldritchBloodAttackVictimMarkingRemoved Auto Message Property _00E_Levelsystem_sEldritchBloodAttackVictimMarkingRemoved Auto
Message Property _00E_Levelsystem_sEldritchBloodVictimMarkingRemoved Auto Message Property _00E_Levelsystem_sEldritchBloodVictimMarkingRemoved Auto
Message Property _00E_Levelsystem_sGhostwalkEnemyTooCloseToWall Auto Message Property _00E_Levelsystem_sGhostwalkEnemyTooCloseToWall Auto
Message Property _00E_DialogueQuitGame Auto
ObjectReference Property PlayerVisionStartMarker Auto Hidden ObjectReference Property PlayerVisionStartMarker Auto Hidden
ObjectReference Property PlayerVisionFailsaveMarker Auto Hidden ObjectReference Property PlayerVisionFailsaveMarker Auto Hidden
@ -1460,4 +1425,4 @@ MusicType MTToRemove
;for sets ;for sets
Sound Property MAGIllusionCharm Auto Sound Property MAGIllusionCharm Auto
Message Property _00E_ArmorSetScript_sSetBonusRemoved Auto Message Property _00E_ArmorSetScript_sSetBonusRemoved Auto
bool bSetAchievementUnlocked = false bool bSetAchievementUnlocked = false

@ -381,9 +381,9 @@ Function _UpdateNQ11(Potion newPotion)
If bDoneChymikum && bDoneDarkBlood If bDoneChymikum && bDoneDarkBlood
_SetNewStageNQ11(17) _SetNewStageNQ11(17)
ElseIf bDoneDarkBlood
_SetNewStageNQ11(15)
ElseIf bDoneChymikum ElseIf bDoneChymikum
_SetNewStageNQ11(15)
ElseIf bDoneDarkBlood
_SetNewStageNQ11(16) _SetNewStageNQ11(16)
EndIf EndIf
EndIf EndIf

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save