Skip to content

Commit 51294b1

Browse files
committed
New installer options
1 parent ef7c1c7 commit 51294b1

2 files changed

Lines changed: 112 additions & 51 deletions

File tree

‎install/win/installer.nsi‎

Lines changed: 108 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
!include "MUI2.nsh"
77
!include "x64.nsh"
8+
!include "Sections.nsh"
89

910
;--------------------------------
1011
;Defines
@@ -33,6 +34,7 @@
3334
;Variables
3435

3536
Var StartMenuFolder
37+
Var STEAMDIR
3638
Var UFODIR
3739

3840
;--------------------------------
@@ -55,6 +57,7 @@
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
@@ -64,6 +67,7 @@
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
@@ -119,55 +123,6 @@
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

274239
SectionEnd
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+
276255
Section /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
308357
SectionEnd
309358

310359
Section /o "un.$(NAME_UnUser)" UnUser
360+
RMDir /r "$INSTDIR\user"
311361
RMDir /r "$DOCUMENTS\OpenXcom"
312362
SectionEnd
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

‎install/win/installerlang.nsh‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ LangString NAME_SecMain ${LANG_ENGLISH} "Game Files"
1717
LangString DESC_SecMain ${LANG_ENGLISH} "Files required to run ${GAME_NAME}."
1818
LangString NAME_SecPatch ${LANG_ENGLISH} "Data Patch"
1919
LangString DESC_SecPatch ${LANG_ENGLISH} "Fixes errors in the X-COM 1 data. Recommended for first installations. (requires an internet connection)"
20+
LangString NAME_SecPortable ${LANG_ENGLISH} "Portable Installation"
21+
LangString DESC_SecPortable ${LANG_ENGLISH} "Puts all ${GAME_NAME} files in the same folder, making a portable installation."
22+
LangString NAME_SecSteam ${LANG_ENGLISH} "Launch from Steam"
23+
LangString DESC_SecSteam ${LANG_ENGLISH} "Replaces your Steam X-COM 1 installation with ${GAME_NAME}. Uninstall restores it."
2024
LangString NAME_SecDesktop ${LANG_ENGLISH} "Desktop Shortcut"
2125
LangString DESC_SecDesktop ${LANG_ENGLISH} "Creates a shortcut in the desktop to play ${GAME_NAME}."
2226

0 commit comments

Comments
 (0)