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