1;NSIS OpenXcom Windows Installer 2 3;-------------------------------- 4;Includes 5 6 !include "MUI2.nsh" 7 !include "x64.nsh" 8 9;-------------------------------- 10;Defines 11 12 !define GAME_NAME "OpenXcom" 13 !define GAME_VERSION "1.0" 14 !define GAME_AUTHOR "OpenXcom Developers" 15 16;-------------------------------- 17;General 18 19 ;Name and file 20 Name "${GAME_NAME} ${GAME_VERSION}" 21 OutFile "openxcom-v${GAME_VERSION}-win.exe" 22 23 ;Default installation folder 24 InstallDir "$PROGRAMFILES\${GAME_NAME}" 25 26 ;Get installation folder from registry if available 27 InstallDirRegKey HKLM "Software\${GAME_NAME}" "" 28 29 ;Request application privileges for Windows Vista 30 RequestExecutionLevel admin 31 32;-------------------------------- 33;Variables 34 35 Var StartMenuFolder 36 Var UFODIR 37 38;-------------------------------- 39;Interface Settings 40 41 !define MUI_HEADERIMAGE 42 !define MUI_HEADERIMAGE_BITMAP logo.bmp 43 !define MUI_WELCOMEFINISHPAGE_BITMAP side.bmp 44 45;-------------------------------- 46;Language Selection Dialog Settings 47 48 ;Remember the installer language 49 !define MUI_LANGDLL_REGISTRY_ROOT "HKLM" 50 !define MUI_LANGDLL_REGISTRY_KEY "Software\${GAME_NAME}" 51 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" 52 53;-------------------------------- 54;Pages 55 56 !insertmacro MUI_PAGE_WELCOME 57 !insertmacro MUI_PAGE_COMPONENTS 58 !insertmacro MUI_PAGE_DIRECTORY 59 60 ; UFO Folder Page Configuration 61 !define MUI_PAGE_HEADER_TEXT $(PAGE_UfoFolder_TITLE) 62 !define MUI_PAGE_HEADER_SUBTEXT $(PAGE_UfoFolder_SUBTITLE) 63 !define MUI_DIRECTORYPAGE_TEXT_TOP $(PAGE_UfoFolder) 64 !define MUI_DIRECTORYPAGE_TEXT_DESTINATION $(DEST_UfoFolder) 65 !define MUI_DIRECTORYPAGE_VARIABLE $UFODIR 66 !define MUI_DIRECTORYPAGE_VERIFYONLEAVE 67 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE ValidateUFO 68 69 !insertmacro MUI_PAGE_DIRECTORY 70 71 ;Start Menu Folder Page Configuration 72 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" 73 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${GAME_NAME}" 74 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" 75 76 !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder 77 78 !insertmacro MUI_PAGE_INSTFILES 79 80 ;Finish Page Configuration 81 !define MUI_FINISHPAGE_RUN "$INSTDIR\OpenXcom.exe" 82 !define MUI_FINISHPAGE_NOREBOOTSUPPORT 83 84 !insertmacro MUI_PAGE_FINISH 85 86 !insertmacro MUI_UNPAGE_COMPONENTS 87 !insertmacro MUI_UNPAGE_CONFIRM 88 !insertmacro MUI_UNPAGE_INSTFILES 89 90;-------------------------------- 91;Languages 92 93 !insertmacro MUI_LANGUAGE "English" ;first language is the default language 94 !insertmacro MUI_LANGUAGE "Czech" 95 !insertmacro MUI_LANGUAGE "French" 96 !insertmacro MUI_LANGUAGE "Finnish" 97 !insertmacro MUI_LANGUAGE "German" 98 !insertmacro MUI_LANGUAGE "Hungarian" 99 !insertmacro MUI_LANGUAGE "Italian" 100 !insertmacro MUI_LANGUAGE "Portuguese" 101 !insertmacro MUI_LANGUAGE "PortugueseBR" 102 !insertmacro MUI_LANGUAGE "Polish" 103 !insertmacro MUI_LANGUAGE "Romanian" 104 !insertmacro MUI_LANGUAGE "Russian" 105 !insertmacro MUI_LANGUAGE "Slovak" 106 !insertmacro MUI_LANGUAGE "Spanish" 107 !insertmacro MUI_LANGUAGE "SpanishInternational" 108 !insertmacro MUI_LANGUAGE "Turkish" 109 !insertmacro MUI_LANGUAGE "Ukrainian" 110 111 !include "installerlang.nsh" ; Language strings 112 113;-------------------------------- 114;Reserve Files 115 116 ;If you are using solid compression, files that are required before 117 ;the actual installation should be stored first in the data block, 118 ;because this will make your installer start faster. 119 120 !insertmacro MUI_RESERVEFILE_LANGDLL 121 122;-------------------------------- 123;Installer functions 124 125Function .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 144FunctionEnd 145 146;-------------------------------- 147;Validate UFO folder 148 149Function 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: 169FunctionEnd 170 171;-------------------------------- 172;Installer Sections 173 174Section "$(NAME_SecMain)" SecMain 175 176 SectionIn RO 177 178 SetOutPath "$INSTDIR" 179 180${If} ${RunningX64} 181 File "..\..\bin\x64\Release\OpenXcom.exe" 182 File "..\..\bin\x64\*.dll" 183${Else} 184 File "..\..\bin\Win32\Release\OpenXcom.exe" 185 File "..\..\bin\Win32\*.dll" 186${EndIf} 187 File "..\..\LICENSE.txt" 188 File "..\..\CHANGELOG.txt" 189 File "..\..\README.txt" 190 191 SetOutPath "$INSTDIR\data" 192 193 File "..\..\bin\data\README.txt" 194 195 ;Copy UFO files 196 IfFileExists "$UFODIR\*.*" 0 ufo_no 197 198 CreateDirectory "$INSTDIR\data\GEODATA" 199 CopyFiles /SILENT "$UFODIR\GEODATA\*.*" "$INSTDIR\data\GEODATA" 361 200 CreateDirectory "$INSTDIR\data\GEOGRAPH" 201 CopyFiles /SILENT "$UFODIR\GEOGRAPH\*.*" "$INSTDIR\data\GEOGRAPH" 2770 202 CreateDirectory "$INSTDIR\data\MAPS" 203 CopyFiles /SILENT "$UFODIR\MAPS\*.*" "$INSTDIR\data\MAPS" 278 204 CreateDirectory "$INSTDIR\data\ROUTES" 205 CopyFiles /SILENT "$UFODIR\ROUTES\*.*" "$INSTDIR\data\ROUTES" 27 206 CreateDirectory "$INSTDIR\data\SOUND" 207 CopyFiles /SILENT "$UFODIR\SOUND\*.*" "$INSTDIR\data\SOUND" 2386 208 CreateDirectory "$INSTDIR\data\TERRAIN" 209 CopyFiles /SILENT "$UFODIR\TERRAIN\*.*" "$INSTDIR\data\TERRAIN" 620 210 CreateDirectory "$INSTDIR\data\UFOGRAPH" 211 CopyFiles /SILENT "$UFODIR\UFOGRAPH\*.*" "$INSTDIR\data\UFOGRAPH" 437 212 CreateDirectory "$INSTDIR\data\UFOINTRO" 213 CopyFiles /SILENT "$UFODIR\UFOINTRO\*.*" "$INSTDIR\data\UFOINTRO" 2736 214 CreateDirectory "$INSTDIR\data\UNITS" 215 CopyFiles /SILENT "$UFODIR\UNITS\*.*" "$INSTDIR\data\UNITS" 467 216 217 ufo_no: 218 219 SetOutPath "$INSTDIR\data\Language" 220 221 File "..\..\bin\data\Language\*.*" 222 223 SetOutPath "$INSTDIR\data\Ruleset" 224 225 File "..\..\bin\data\Ruleset\Xcom1Ruleset.rul" 226 File "..\..\bin\data\Ruleset\XcomUtil_*.rul" 227 File "..\..\bin\data\Ruleset\UFOextender_*.rul" 228 229 SetOutPath "$INSTDIR\data\Resources\BulletSprites" 230 231 File "..\..\bin\data\Resources\BulletSprites\*.*" 232 233 SetOutPath "$INSTDIR\data\Resources\Pathfinding" 234 235 File "..\..\bin\data\Resources\Pathfinding\*.*" 236 237 SetOutPath "$INSTDIR\data\Resources\UI" 238 239 File "..\..\bin\data\Resources\UI\*.*" 240 241 SetOutPath "$INSTDIR\data\Resources\Weapons" 242 243 File "..\..\bin\data\Resources\Weapons\*.*" 244 245 SetOutPath "$INSTDIR\data\SoldierName" 246 247 File "..\..\bin\data\SoldierName\*.*" 248 249 SetOutPath "$INSTDIR\data\Shaders" 250 251 File "..\..\bin\data\Shaders\*.*" 252 253 ;Store installation folder 254 WriteRegStr HKLM "Software\${GAME_NAME}" "" $INSTDIR 255 256 ;Write the uninstall keys for Windows 257 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "DisplayName" "${GAME_NAME} ${GAME_VERSION}" 258 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "DisplayIcon" '"$INSTDIR\OpenXcom.exe",0' 259 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "DisplayVersion" "${GAME_VERSION}.0.0" 260 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "InstallLocation" "$INSTDIR" 261 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "Publisher" "${GAME_AUTHOR}" 262 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "UninstallString" '"$INSTDIR\Uninstall.exe"' 263 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "URLInfoAbout" "http://openxcom.org" 264 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "NoModify" 1 265 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" "NoRepair" 1 266 267 ;Create uninstaller 268 WriteUninstaller "$INSTDIR\Uninstall.exe" 269 270 ;Create shortcuts 271 SetOutPath "$INSTDIR" 272 273 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application 274 275 CreateDirectory "$SMPROGRAMS\$StartMenuFolder" 276 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(LINK_DataFolder).lnk" "$INSTDIR\data" 277 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${GAME_NAME}.lnk" "$INSTDIR\OpenXcom.exe" 278 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(LINK_Readme).lnk" "$INSTDIR\README.TXT" 279 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(LINK_Uninstall).lnk" "$INSTDIR\Uninstall.exe" 280 CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(LINK_UserFolder).lnk" "$DOCUMENTS\OpenXcom" 281 282 !insertmacro MUI_STARTMENU_WRITE_END 283 284SectionEnd 285 286Section "$(NAME_SecPatch)" SecPatch 287 288 ;(uses NSISdl.dll) 289 NSISdl::download "http://openxcom.org/download/extras/universal-patch.zip" "$TEMP\universal-patch.zip" 290 Pop $0 291 StrCmp $0 success success1 292 SetDetailsView show 293 DetailPrint "download failed: $0" 294 Abort 295 success1: 296 297 ;(uses nsisunz.dll) 298 nsisunz::UnzipToLog "$TEMP\universal-patch.zip" "$INSTDIR\data" 299 Pop $0 300 StrCmp $0 "success" success2 301 SetDetailsView show 302 DetailPrint "unzipping failed: $0" 303 Abort 304 success2: 305 306 Delete "$TEMP\universal-patch.zip" 307 308SectionEnd 309 310Section /o "$(NAME_SecDesktop)" SecDesktop 311 312 SetOutPath "$INSTDIR" 313 314 CreateShortCut "$DESKTOP\${GAME_NAME}.lnk" "$INSTDIR\OpenXcom.exe" 315 316SectionEnd 317 318;-------------------------------- 319;Descriptions 320 321 ;Assign language strings to sections 322 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN 323 !insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain) 324 !insertmacro MUI_DESCRIPTION_TEXT ${SecPatch} $(DESC_SecPatch) 325 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop) 326 !insertmacro MUI_FUNCTION_DESCRIPTION_END 327 328;-------------------------------- 329;Uninstaller Functions 330 331Function un.onInit 332 333 !insertmacro MUI_UNGETLANGUAGE 334 335FunctionEnd 336 337;-------------------------------- 338;Uninstaller Sections 339 340Section /o "un.$(NAME_UnData)" UnData 341 RMDir /r "$INSTDIR\data" 342SectionEnd 343 344Section /o "un.$(NAME_UnUser)" UnUser 345 RMDir /r "$DOCUMENTS\OpenXcom" 346SectionEnd 347 348Section "-un.Main" 349 350 SetOutPath "$TEMP" 351 352 Delete "$INSTDIR\OpenXcom.exe" 353 Delete "$INSTDIR\*.dll" 354 Delete "$INSTDIR\LICENSE.txt" 355 Delete "$INSTDIR\README.txt" 356 Delete "$INSTDIR\CHANGELOG.txt" 357 358 Delete "$INSTDIR\data\README.txt" 359 Delete "$INSTDIR\data\Language\*.*" 360 RMDir "$INSTDIR\data\Language" 361 Delete "..\..\bin\data\Ruleset\Xcom1Ruleset.rul" 362 Delete "..\..\bin\data\Ruleset\XcomUtil_*.rul" 363 Delete "..\..\bin\data\Ruleset\UFOextender_*.rul" 364 RMDir "$INSTDIR\Ruleset" 365 Delete "..\..\bin\data\Resources\BulletSprites\*.*" 366 RMDir "$INSTDIR\data\Resources\BulletSprites" 367 Delete "..\..\bin\data\Resources\Pathfinding\*.*" 368 RMDir "$INSTDIR\data\Resources\Pathfinding" 369 Delete "..\..\bin\data\Resources\UI\*.*" 370 RMDir "$INSTDIR\data\Resources\UI" 371 Delete "..\..\bin\data\Resources\Weapons\*.*" 372 RMDir "$INSTDIR\data\Resources\Weapons" 373 Delete "$INSTDIR\data\SoldierName\*.*" 374 RMDir "$INSTDIR\data\SoldierName" 375 Delete "$INSTDIR\data\Shaders\*.*" 376 RMDir "$INSTDIR\data\Shaders" 377 RMDir "$INSTDIR\data" 378 379 Delete "$INSTDIR\Uninstall.exe" 380 RMDir "$INSTDIR" 381 382 !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder 383 384 Delete "$SMPROGRAMS\$StartMenuFolder\*.*" 385 RMDir "$SMPROGRAMS\$StartMenuFolder" 386 387 Delete "$DESKTOP\${GAME_NAME}.lnk" 388 389 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GAME_NAME}" 390 DeleteRegKey /ifempty HKLM "Software\${GAME_NAME}" 391 392SectionEnd 393 394;-------------------------------- 395;Uninstaller Descriptions 396 397 ;Assign language strings to sections 398 !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN 399 !insertmacro MUI_DESCRIPTION_TEXT ${UnData} $(DESC_UnData) 400 !insertmacro MUI_DESCRIPTION_TEXT ${UnUser} $(DESC_UnUser) 401 !insertmacro MUI_UNFUNCTION_DESCRIPTION_END 402 403;-------------------------------- 404;Version Information 405 406 VIProductVersion "${GAME_VERSION}.0.0" 407 VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${GAME_NAME} Installer" 408 VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${GAME_VERSION}.0.0" 409 VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${GAME_AUTHOR}" 410 VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright 2010-2014 ${GAME_AUTHOR}" 411 VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${GAME_NAME} Installer" 412 VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${GAME_VERSION}.0.0" 413