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.
 

326 lines
18 KiB

#define RemoteHost GetEnv('REMOTE_HOST')
#define RemoteVersionDir GetEnv('REMOTE_DIR_VERSIONED')
#define RemoteMediaDir GetEnv('REMOTE_DIR_MEDIA')
[Setup]
AppId={{C42BF9E1-4791-4098-A19E-74D6EAF0750F}
AppName=Enderal SE
DefaultGroupName=Enderal SE
AppVersion=2.1.0
AppVerName=Enderal SE 2.1 [mod.pub]
AppPublisher=ModPub
AppPublisherURL=https://mod.pub/
AppReadmeFile=https://mod.pub/enderal-se/38-enderal-se
AppSupportURL=https://mod.pub/enderal-se/38/comments
AppUpdatesURL=https://mod.pub/enderal-se/38/files
WizardStyle=modern
DefaultDirName={drive:{src}}\Games\Enderal SE
ArchitecturesAllowed=x64
OutputBaseFilename=EnderalSE_Install
ExtraDiskSpaceRequired=20204613632
AllowNetworkDrive=no
Compression=lzma2/max
SolidCompression=yes
;SetupIconFile=enderal.ico
UninstallDisplayName=Enderal SE
UninstallDisplayIcon={app}\Game\Data\enderal.ico
DisableWelcomePage=yes
DisableDirPage=no
DisableProgramGroupPage=no
AllowNoIcons=yes
Password=mod.pub
Encryption=yes
[Files]
; Root
Source: "{code:GetSkyrimPath}\SkyrimSE.exe"; DestDir: "{app}\Game"; Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\SkyrimSELauncher.exe"; DestDir: "{app}\Game"; Check: IsNotVR(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\SkyrimVR.exe"; DestDir: "{app}\Game"; Check: IsVR(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\openvr_api.dll"; DestDir: "{app}\Game"; Check: IsVR(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\atimgpud.dll"; DestDir: "{app}\Game"; Check: IsVR(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\steam_api64.dll"; DestDir: "{app}\Game"; Check: IsSteam(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\Galaxy64.dll"; DestDir: "{app}\Game"; Check: IsGOG(); Flags: external ignoreversion
Source: "{code:GetSkyrimPath}\binkw64.dll"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist ignoreversion
Source: "{code:GetSkyrimPath}\bink2w64.dll"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist ignoreversion
Source: "{code:GetSkyrimPath}\ControlMap_Custom.txt"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\Skyrim_Default.ini"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\High.ini"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\Low.ini"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\Medium.ini"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\Ultra.ini"; DestDir: "{app}\Game"; Flags: external skipifsourcedoesntexist
; Data
Source: "{code:GetSkyrimPath}\Data\Skyrim - Animations.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Interface.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Meshes0.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Meshes1.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Shaders.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Sounds.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures0.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures1.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures2.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures3.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures4.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures5.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures6.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures7.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Textures8.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp
Source: "{code:GetSkyrimPath}\Data\Skyrim - Patch.bsa"; DestDir: "{app}\Game\Data"; Flags: external comparetimestamp skipifsourcedoesntexist
Source: "{code:GetSkyrimPath}\Data\Skyrim_VR - Main.bsa"; DestDir: "{app}\Game\Data"; Check: IsVR(); Flags: external comparetimestamp
; Enderal
Source: "base\*"; DestDir: "{app}\Game\Data"; Excludes: "*.esl,ccBGSSSE001-Fish.esm,ccBGSSSE025-AdvDSGS.esm,E - Meshes.bsa,E - Sounds.bsa,E - Textures1.bsa,E - Textures2.bsa,L - Voices.bsa,Enderal_Credits.bik,EnderalIntro.bik,MQ17BlackGuardian.bik,MQP03NearDeathExperience.bik"; Flags: recursesubdirs ignoreversion
; SKSE
Source: "skse\1.4.15.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.4.15.0'); Flags: ignoreversion
Source: "skse\1.5.97.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.5.97.0'); Flags: ignoreversion
Source: "skse\1.6.640.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.6.640.0'); Flags: ignoreversion
Source: "skse\1.6.659.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.6.659.0'); Flags: ignoreversion
Source: "skse\1.6.1130.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.6.1130.0'); Flags: ignoreversion
Source: "skse\1.6.1170.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.6.1170.0'); Flags: ignoreversion
Source: "skse\1.6.1179.0\*"; DestDir: "{app}\Game"; Check: IsSkyrimVersion('1.6.1179.0'); Flags: ignoreversion
Source: "wget.exe"; DestDir: "{app}"; Flags: deleteafterinstall ignoreversion
Source: "modlhandler.exe"; DestDir: "{app}\MO2"; Flags: uninsneveruninstall ignoreversion
[InstallDelete]
Type: files; Name: "{app}\Game\SkyrimSE.exe"
Type: files; Name: "{app}\Game\SkyrimSELauncher.exe"
Type: files; Name: "{app}\Game\SkyrimVR.exe"
Type: files; Name: "{app}\Game\sksevr_*.dll"
Type: files; Name: "{app}\Game\skse64_*.dll"
Type: files; Name: "{app}\Game\skse*_steam_loader.dll"
Type: files; Name: "{app}\Game\steam_api64.dll"
Type: files; Name: "{app}\Game\Galaxy64.dll"
Type: files; Name: "{app}\Game\binkw64.dll"
Type: files; Name: "{app}\Game\bink2w64.dll"
Type: files; Name: "{app}\Game\openvr_api.dll"
Type: files; Name: "{app}\Game\atimgpud.dll"
Type: files; Name: "{app}\Game\Data\SkyrimVR.esm"
[UninstallDelete]
Type: files; Name: "{app}\Game\Data\E - Meshes.bsa"
Type: files; Name: "{app}\Game\Data\E - Sounds.bsa"
Type: files; Name: "{app}\Game\Data\E - Textures1.bsa"
Type: files; Name: "{app}\Game\Data\E - Textures2.bsa"
Type: files; Name: "{app}\Game\Data\L - Voices.bsa"
Type: files; Name: "{app}\Game\Data\Video\Enderal_Credits.bik"
Type: files; Name: "{app}\Game\Data\Video\EnderalIntro.bik"
Type: files; Name: "{app}\Game\Data\Video\MQ17BlackGuardian.bik"
Type: files; Name: "{app}\Game\Data\Video\MQP03NearDeathExperience.bik"
Type: dirifempty; Name: "{app}\Game\Data"
Type: dirifempty; Name: "{app}\Game\Creations"
Type: dirifempty; Name: "{app}\Game\Mods"
Type: dirifempty; Name: "{app}\Game"
[Run]
Filename: "{app}\wget.exe"; StatusMsg: "Downloading E - Meshes.bsa (1.48 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data"" ""{#RemoteHost}/{#RemoteVersionDir}/E%20-%20Meshes.bsa"""; Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading E - Textures1.bsa (1.7 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data"" ""{#RemoteHost}/{#RemoteVersionDir}/E%20-%20Textures1.bsa"""; Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading E - Textures2.bsa (1.72 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data"" ""{#RemoteHost}/{#RemoteVersionDir}/E%20-%20Textures2.bsa"""; Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading E - Sounds.bsa (1.3 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data"" ""{#RemoteHost}/{#RemoteMediaDir}/E%20-%20Sounds.bsa"""; Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading L - Voices.bsa (1.38 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data"" ""{#RemoteHost}/{#RemoteMediaDir}/L%20-%20Voices.bsa"""; Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading Enderal_Credits.bik (1.29 Gb)..."; Parameters: "-nd -N -P ""{app}\Game\Data\Video"" ""{#RemoteHost}/{#RemoteMediaDir}/Video/Enderal_Credits.bik"""; Check: IsNotVR(); Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading EnderalIntro.bik (275 Mb)..."; Parameters: "-nd -N -P ""{app}\Game\Data\Video"" ""{#RemoteHost}/{#RemoteMediaDir}/Video/EnderalIntro.bik"""; Check: IsNotVR(); Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading MQ17BlackGuardian.bik (474 Mb)..."; Parameters: "-nd -N -P ""{app}\Game\Data\Video"" ""{#RemoteHost}/{#RemoteMediaDir}/Video/MQ17BlackGuardian.bik"""; Check: IsNotVR(); Flags: runhidden
Filename: "{app}\wget.exe"; StatusMsg: "Downloading MQP03NearDeathExperience.bik (38 Mb)..."; Parameters: "-nd -N -P ""{app}\Game\Data\Video"" ""{#RemoteHost}/{#RemoteMediaDir}/Video/MQP03NearDeathExperience.bik"""; Check: IsNotVR(); Flags: runhidden
Filename: "{tmp}\Mod.Organizer-2.5.0.exe"; Parameters: "/SILENT /DIR=""{app}\MO2"""
Filename: "{app}\MO2\modlhandler.exe"; Parameters: "forcereg"; Flags: runhidden
Filename: "{cmd}"; Parameters: "/d /c del /s /q ""{tmp}\Mod.Organizer-2.5.0.exe"""; Flags: runhidden
Filename: "{app}\MO2\ModOrganizer.exe"; Parameters: """moshortcut://:SKSE"""; Description: "Launch Enderal SE"; Flags: postinstall
Filename: "https://mod.pub/enderal-se/38/changelogs"; Description: "See changelog"; Flags: shellexec postinstall runmaximized
[INI]
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "gameName"; String: "Skyrim VR"; Check: IsVR()
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "gameName"; String: "Skyrim Special Edition"; Check: IsNotVR()
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "first_start"; String: "false"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "selected_profile"; String: "@ByteArray(Default)"; Flags: createkeyifdoesntexist
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "game_edition"; String: "Steam"; Check: IsSteam()
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "game_edition"; String: "GOG"; Check: IsGOG()
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "gamePath"; String: "@ByteArray({code:DoubleBackslashes|{app}}\\Game)"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "General"; Key: "version"; String: "2.5"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "profile_local_inis"; String: "true"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "profile_local_saves"; String: "true"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "profile_archive_invalidation"; String: "true"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "compact_downloads"; String: "true"; Flags: createkeyifdoesntexist
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "category_mappings"; String: "false"; Flags: createkeyifdoesntexist
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Settings"; Key: "base_directory"; String: "{code:ConvertBackslashes|{app}}/Data"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Plugins"; Key: "Enderal%20Support%20Plugin\sse_downloads"; String: "true"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Plugins"; Key: "Skyrim%20Special%20Edition%20Support%20Plugin\enderal_downloads"; String: "true"
Filename: "{app}\MO2\ModOrganizer.ini"; Section: "Plugins"; Key: "Skyrim%20VR%20Support%20Plugin\enderal_downloads"; String: "true"
Filename: "{app}\Data\profiles\Default\skyrimprefs.ini"; Section: "Display"; Key: "iShadowMaskQuarter"; String: "4"
Filename: "{app}\Data\profiles\Default\skyrimprefs.ini"; Section: "Controls"; Key: "fMouseHeadingSensitivity"; String: "0.0420"; Flags: createkeyifdoesntexist
[Icons]
Name: "{userdesktop}\Enderal SE"; Filename: "{app}\MO2\ModOrganizer.exe"; WorkingDir: "{app}\MO2"; Parameters: """moshortcut://:SKSE"""; IconFilename: "{app}\Game\Data\enderal.ico"
Name: "{app}\Run Enderal SE"; Filename: "{app}\MO2\ModOrganizer.exe"; WorkingDir: "{app}\MO2"; Parameters: """moshortcut://:SKSE"""; IconFilename: "{app}\Game\Data\enderal.ico"
Name: "{group}\Run Enderal SE"; Filename: "{app}\MO2\ModOrganizer.exe"; WorkingDir: "{app}\MO2"; Parameters: """moshortcut://:SKSE"""; IconFilename: "{app}\Game\Data\enderal.ico"
Name: "{group}\Manage mods"; Filename: "{app}\MO2\ModOrganizer.exe"; WorkingDir: "{app}\MO2"; Flags: runmaximized
Name: "{group}\Uninstall"; Filename: "{uninstallexe}"
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{app}\MO2\ModOrganizer.exe"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.1
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{app}\MO2\ModOrganizer.exe"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.1
Root: HKCU; Subkey: "Software\SureAI\EnderalSE"; ValueType: string; ValueName: "Install_Path"; ValueData: "{app}\Game\"
[Code]
var
SkyrimDirPage: TInputDirWizardPage;
DownloadPage: TDownloadWizardPage;
sSkyrimPath, sSkyrimVersion: String;
function IsSkyrimVersion(Param: String): Boolean;
begin
if sSkyrimVersion = Param then
Result := True;
end;
function IsGOG(): Boolean;
begin
Result := (sSkyrimVersion = '1.6.659.0') or (sSkyrimVersion = '1.6.1179.0');
end;
function IsVR(): Boolean;
begin
Result := (sSkyrimVersion = '1.4.15.0');
end;
function IsNotVR(): Boolean;
begin
Result := not IsVR();
end;
function IsSteam(): Boolean;
begin
Result := (not IsGOG()) and (not IsVR());
end;
function GetSkyrimPath(Param: String): String;
begin
Result := sSkyrimPath;
end;
function ConvertBackslashes(Param: String): String;
begin
StringChangeEx(Param, '\', '/', True);
Result := Param;
end;
function DoubleBackslashes(Param: String): String;
begin
StringChangeEx(Param, '\', '\\', True);
Result := Param;
end;
function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean;
begin
if Progress = ProgressMax then
Log(Format('Successfully downloaded file to {tmp}: %s', [FileName]));
Result := True;
end;
function FindSkyrimPath(): Boolean;
begin
Result := True;
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Bethesda Softworks\Skyrim Special Edition GOG', 'Installed Path', sSkyrimPath) then
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Bethesda Softworks\Skyrim Special Edition', 'Installed Path', sSkyrimPath) then
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Bethesda Softworks\Skyrim VR', 'Installed Path', sSkyrimPath) then
Result := False;
end;
procedure InitializeWizard;
begin
FindSkyrimPath();
SkyrimDirPage := CreateInputDirPage(wpSelectTasks, 'Skyrim SE location', 'All necessary files will be copied to the Enderal SE directory, creating a new copy of Skyrim. The original Skyrim installation will not be modified.', '', False, '');
SkyrimDirPage.Add('Select a directory with installed Skyrim Special Edition:');
SkyrimDirPage.Values[0] := RemoveBackslashUnlessRoot(sSkyrimPath);
DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
supportedVersions: TStringList;
begin
if CurPageID = SkyrimDirPage.ID then begin
sSkyrimPath := RemoveBackslashUnlessRoot(SkyrimDirPage.Values[0]) + '\';
if not GetVersionNumbersString(sSkyrimPath + 'SkyrimSE.exe', sSkyrimVersion) then begin
Result := False;
MsgBox('Please, select a directory with installed Skyrim Special Edition.', mbError, MB_OK);
Exit;
end
else if (sSkyrimVersion = '1.0.0.0') and FileExists(sSkyrimPath + 'binkw64.dll') then begin
if FileExists(sSkyrimPath + 'SkyrimVR.exe') then
sSkyrimVersion := '1.4.15.0'
else
sSkyrimVersion := '1.5.97.0';
end;
StringChangeEx(sSkyrimVersion, ' ', '', True);
supportedVersions := TStringList.Create;
supportedVersions.Add('1.4.15.0');
supportedVersions.Add('1.5.97.0');
supportedVersions.Add('1.6.640.0');
supportedVersions.Add('1.6.659.0');
supportedVersions.Add('1.6.1130.0');
supportedVersions.Add('1.6.1170.0');
supportedVersions.Add('1.6.1179.0');
if supportedVersions.IndexOf(sSkyrimVersion) < 0 then begin
Result := False;
MsgBox('Skyrim SE ' + sSkyrimVersion + ' is untested with this version of Enderal SE.', mbError, MB_OK);
Exit;
end;
end;
if CurPageID = wpReady then begin
if not FileExists(ExpandConstant('{app}') + '\Data\profiles\Default\plugins.txt') then begin
ForceDirectories(ExpandConstant('{app}') + '\Data\profiles\Default');
SaveStringToFile(ExpandConstant('{app}') + '\Data\profiles\Default\plugins.txt', '# This file was automatically generated by Mod Organizer.' + #13#10 + '*Enderal - Forgotten Stories.esm' + #13#10, False);
end;
DownloadPage.Clear;
DownloadPage.Add('https://github.com/ModOrganizer2/modorganizer/releases/download/v2.5.0/Mod.Organizer-2.5.0.exe', 'Mod.Organizer-2.5.0.exe', '');
DownloadPage.Show;
try
try
DownloadPage.Download; // This downloads the files to {tmp}
Result := True;
except
if DownloadPage.AbortedByUser then
Log('Aborted by user.')
else
SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK);
Result := False;
end;
finally
DownloadPage.Hide;
end;
end else
Result := True;
end;
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := MemoDirInfo;
S := S + NewLine + NewLine + 'Skyrim location:';
S := S + NewLine + Space + RemoveBackslashUnlessRoot(sSkyrimPath);
S := S + NewLine + Space + 'v' + sSkyrimVersion;
Result := S;
end;