55
66 !include " MUI2.nsh"
77 !include " x64.nsh"
8+ !include " Sections.nsh"
89
910; --------------------------------
1011; Defines
3334; Variables
3435
3536 Var StartMenuFolder
37+ Var STEAMDIR
3638 Var UFODIR
3739
3840; --------------------------------
5557
5658 !insertmacro MUI_PAGE_WELCOME
5759 !insertmacro MUI_PAGE_COMPONENTS
60+ !define MUI_PAGE_CUSTOMFUNCTION_PRE PreDirectory
5861 !insertmacro MUI_PAGE_DIRECTORY
5962
6063 ; UFO Folder Page Configuration
6467 !define MUI_DIRECTORYPAGE_TEXT_DESTINATION $(DEST_UfoFolder)
6568 !define MUI_DIRECTORYPAGE_VARIABLE $UFODIR
6669 !define MUI_DIRECTORYPAGE_VERIFYONLEAVE
70+ !define MUI_PAGE_CUSTOMFUNCTION_PRE PreUFO
6771 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE ValidateUFO
6872
6973 !insertmacro MUI_PAGE_DIRECTORY
119123
120124 !insertmacro MUI_RESERVEFILE_LANGDLL
121125
122- ; --------------------------------
123- ; Installer functions
124-
125- Function .onInit
126- ${If} ${RunningX64}
127- StrCpy $INSTDIR " $PROGRAMFILES64\${GAME_NAME}"
128- ${Else}
129- StrCpy $INSTDIR " $PROGRAMFILES32\${GAME_NAME}"
130- ${EndIf}
131- StrCpy $StartMenuFolder " ${GAME_NAME}"
132-
133- ; Get UFO folder from Steam
134- StrCpy $UFODIR " "
135- ReadRegStr $R0 HKLM " Software\Valve\Steam" " InstallPath"
136- IfErrors ufo_no
137- StrCpy $R0 " $R0\steamapps\common\xcom ufo defense\XCOM"
138- IfFileExists " $R0\*.*" ufo_yes ufo_no
139- ufo_yes:
140- StrCpy $UFODIR $R0
141- ufo_no:
142-
143- !insertmacro MUI_LANGDLL_DISPLAY
144- FunctionEnd
145-
146- ; --------------------------------
147- ; Validate UFO folder
148-
149- Function ValidateUFO
150- StrCmp $UFODIR " " validate_yes
151- IfFileExists " $UFODIR\GEODATA\*.*" 0 confirm_ufo
152- IfFileExists " $UFODIR\GEOGRAPH\*.*" 0 confirm_ufo
153- IfFileExists " $UFODIR\MAPS\*.*" 0 confirm_ufo
154- IfFileExists " $UFODIR\ROUTES\*.*" 0 confirm_ufo
155- IfFileExists " $UFODIR\SOUND\*.*" 0 confirm_ufo
156- IfFileExists " $UFODIR\TERRAIN\*.*" 0 confirm_ufo
157- IfFileExists " $UFODIR\UFOGRAPH\*.*" 0 confirm_ufo
158- IfFileExists " $UFODIR\UFOINTRO\*.*" 0 confirm_ufo
159- IfFileExists " $UFODIR\UNITS\*.*" 0 confirm_ufo
160- IfFileExists " $UFODIR\XcuSetup.bat" confirm_xcu
161- Goto validate_yes
162- confirm_ufo:
163- MessageBox MB_ICONEXCLAMATION |MB_YESNO $(WARN_UFOMissing) /SD IDYES IDYES validate_yes IDNO validate_no
164- confirm_xcu:
165- MessageBox MB_ICONEXCLAMATION |MB_YESNO $(WARN_XCUDetected) /SD IDYES IDYES validate_yes IDNO validate_no
166- validate_no:
167- Abort
168- validate_yes:
169- FunctionEnd
170-
171126; --------------------------------
172127; Installer Sections
173128
@@ -176,6 +131,16 @@ Section "$(NAME_SecMain)" SecMain
176131 SectionIn RO
177132
178133 SetOutPath " $INSTDIR"
134+
135+ IfFileExists " $INSTDIR\dosbox.exe" 0 no_steam
136+ CreateDirectory " $INSTDIR\bak"
137+ Rename " $INSTDIR\dosbox.exe" " $INSTDIR\bak\dosbox.exe"
138+ Rename " $INSTDIR\dosbox.conf" " $INSTDIR\bak\dosbox.conf"
139+ Rename " $INSTDIR\readme.txt" " $INSTDIR\bak\readme.txt"
140+ Rename " $INSTDIR\SDL.dll" " $INSTDIR\bak\SDL.dll"
141+ Rename " $INSTDIR\SDL_net.dll" " $INSTDIR\bak\SDL_net.dll"
142+
143+ no_steam:
179144
180145${If} ${RunningX64}
181146 File " ..\..\bin\x64\Release\OpenXcom.exe"
@@ -273,6 +238,20 @@ Section "$(NAME_SecPatch)" SecPatch
273238
274239SectionEnd
275240
241+ Section /o " $(NAME_SecPortable)" SecPortable
242+
243+ CreateDirectory " $INSTDIR\user"
244+
245+ SectionEnd
246+
247+ Section /o " $(NAME_SecSteam)" SecSteam
248+
249+ SectionIn RO
250+
251+ Rename " $INSTDIR\OpenXcom.exe" " $INSTDIR\dosbox.exe"
252+
253+ SectionEnd
254+
276255Section /o " $(NAME_SecDesktop)" SecDesktop
277256
278257 SetOutPath " $INSTDIR"
@@ -288,9 +267,79 @@ SectionEnd
288267 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
289268 !insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain)
290269 !insertmacro MUI_DESCRIPTION_TEXT ${SecPatch} $(DESC_SecPatch)
270+ !insertmacro MUI_DESCRIPTION_TEXT ${SecPortable} $(DESC_SecPortable)
271+ !insertmacro MUI_DESCRIPTION_TEXT ${SecSteam} $(DESC_SecSteam)
291272 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop)
292273 !insertmacro MUI_FUNCTION_DESCRIPTION_END
293274
275+ ; --------------------------------
276+ ; Installer functions
277+
278+ Function .onInit
279+ ${If} ${RunningX64}
280+ StrCpy $INSTDIR " $PROGRAMFILES64\${GAME_NAME}"
281+ ${Else}
282+ StrCpy $INSTDIR " $PROGRAMFILES32\${GAME_NAME}"
283+ ${EndIf}
284+ StrCpy $StartMenuFolder " ${GAME_NAME}"
285+
286+ ; Get UFO folder from Steam
287+ StrCpy $STEAMDIR " "
288+ StrCpy $UFODIR " "
289+ ReadRegStr $R1 HKLM " Software\Valve\Steam" " InstallPath"
290+ IfErrors ufo_no
291+ StrCpy $R0 " $R1\steamapps\common\xcom ufo defense\XCOM"
292+ IfFileExists " $R0\*.*" ufo_yes ufo_no
293+ ufo_yes:
294+ StrCpy $STEAMDIR " $R1\steamapps\common\xcom ufo defense"
295+ StrCpy $UFODIR $R0
296+ SectionSetFlags ${SecSteam} 0
297+ ufo_no:
298+
299+ !insertmacro MUI_LANGDLL_DISPLAY
300+ FunctionEnd
301+
302+ ; --------------------------------
303+ ; Skip pages for Steam installation
304+
305+ Function PreDirectory
306+ ${If} ${SectionIsSelected} ${SecSteam}
307+ StrCpy $INSTDIR $STEAMDIR
308+ Abort
309+ ${EndIf}
310+ FunctionEnd
311+
312+ Function PreUFO
313+ ${If} ${SectionIsSelected} ${SecSteam}
314+ Abort
315+ ${EndIf}
316+ FunctionEnd
317+
318+ ; --------------------------------
319+ ; Validate UFO folder
320+
321+ Function ValidateUFO
322+ StrCmp $UFODIR " " validate_yes
323+ IfFileExists " $UFODIR\GEODATA\*.*" 0 confirm_ufo
324+ IfFileExists " $UFODIR\GEOGRAPH\*.*" 0 confirm_ufo
325+ IfFileExists " $UFODIR\MAPS\*.*" 0 confirm_ufo
326+ IfFileExists " $UFODIR\ROUTES\*.*" 0 confirm_ufo
327+ IfFileExists " $UFODIR\SOUND\*.*" 0 confirm_ufo
328+ IfFileExists " $UFODIR\TERRAIN\*.*" 0 confirm_ufo
329+ IfFileExists " $UFODIR\UFOGRAPH\*.*" 0 confirm_ufo
330+ IfFileExists " $UFODIR\UFOINTRO\*.*" 0 confirm_ufo
331+ IfFileExists " $UFODIR\UNITS\*.*" 0 confirm_ufo
332+ IfFileExists " $UFODIR\XcuSetup.bat" confirm_xcu
333+ Goto validate_yes
334+ confirm_ufo:
335+ MessageBox MB_ICONEXCLAMATION |MB_YESNO $(WARN_UFOMissing) /SD IDYES IDYES validate_yes IDNO validate_no
336+ confirm_xcu:
337+ MessageBox MB_ICONEXCLAMATION |MB_YESNO $(WARN_XCUDetected) /SD IDYES IDYES validate_yes IDNO validate_no
338+ validate_no:
339+ Abort
340+ validate_yes:
341+ FunctionEnd
342+
294343; --------------------------------
295344; Uninstaller Functions
296345
@@ -308,6 +357,7 @@ Section /o "un.$(NAME_UnData)" UnData
308357SectionEnd
309358
310359Section /o " un.$(NAME_UnUser)" UnUser
360+ RMDir /r " $INSTDIR\user"
311361 RMDir /r " $DOCUMENTS\OpenXcom"
312362SectionEnd
313363
@@ -321,7 +371,7 @@ Section "-un.Main"
321371 Delete " $INSTDIR\README.txt"
322372 Delete " $INSTDIR\CHANGELOG.txt"
323373
324- Delete " $INSTDIR\data\README.txt "
374+ Delete " $INSTDIR\data\*.* "
325375 Delete " $INSTDIR\data\Language\*.*"
326376 RMDir " $INSTDIR\data\Language"
327377 Delete " $INSTDIR\data\Ruleset\Aliens_Pick_Up_Weapons.rul"
@@ -344,7 +394,14 @@ Section "-un.Main"
344394 RMDir " $INSTDIR\data"
345395
346396 Delete " $INSTDIR\Uninstall.exe"
347- RMDir " $INSTDIR"
397+ RMDir " $INSTDIR"
398+
399+ IfFileExists " $INSTDIR\bak\*.*" 0 no_backup
400+ Delete " $INSTDIR\dosbox.exe"
401+ CopyFiles " $INSTDIR\bak\*.*" " $INSTDIR"
402+ RMDir " $INSTDIR\bak"
403+
404+ no_backup:
348405
349406 !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
350407
0 commit comments