Skip to content

Instantly share code, notes, and snippets.

@plexish
Created December 8, 2014 01:44
Show Gist options
  • Save plexish/6bb64ada2aa5f3812a85 to your computer and use it in GitHub Desktop.
Save plexish/6bb64ada2aa5f3812a85 to your computer and use it in GitHub Desktop.
SMAX Installer script
# TODO
# custom image on launch -> AdvSplash
# banner image
!include "MUI2.nsh"
!define APP_NAME "SMAC/X Unofficial Patch"
#!define WEB_SITE "http://www.civgaming.net/forums/"
!define VERSION "02.00.00.00"
!define VERSION_SHRT "2.00"
!define REG_ROOT "HKLM"
!define REG_APP_PATH "Software\Microsoft\DirectPlay\Applications"
#!define REG_GOG_PATH "Software\GOG.com"
!define PATCH_FILES_PATH "K:\#AC-ACX Project\##current patch files"
######################################################################
VIProductVersion "${VERSION}"
VIAddVersionKey "ProductName" "${APP_NAME}"
VIAddVersionKey "CompanyName" "scient"
VIAddVersionKey "LegalCopyright" "scient © 2013"
VIAddVersionKey "FileDescription" "${APP_NAME}"
VIAddVersionKey "FileVersion" "${VERSION}"
######################################################################
CRCCheck on
XPStyle on
SetCompressor /SOLID /FINAL LZMA
RequestExecutionLevel admin
Name "${APP_NAME}"
Caption "${APP_NAME} v${VERSION_SHRT} Installer"
OutFile "SMACX_UP_v${VERSION_SHRT}_Installer.exe"
######################################################################
!define MUI_ABORTWARNING
!define MUI_UNABORTWARNING
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
#!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
#!insertmacro MUI_LANGUAGE "French"
#!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_RESERVEFILE_LANGDLL
######################################################################
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
# try to obtain install path
ReadRegStr $0 ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "UnofficialPath"
StrCmp $0 "" 0 default_path
ReadRegStr $0 ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Planetary Pack" "Path"
StrCmp $0 "" 0 default_path
ReadRegStr $0 ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "Path"
StrCmp $0 "" 0 default_path
ReadRegStr $0 ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alien Crossfire" "Path"
StrCmp $0 "" 0 default_path
#ReadRegStr $0 ${REG_ROOT} "${REG_GOG_PATH}\GOGSIDMEIERSALPHACENTAURI" "Path"
#StrCmp $0 "" 0 default_path
#ReadRegStr $0 ${REG_ROOT} "${REG_GOG_PATH}\GOGSIDMEIERSALIENCROSSFIRE" "Path"
#StrCmp $0 "" 0 default_path
StrCpy $0 "$PROGRAMFILES\Sid Meier's Alpha Centauri" ; default path if can't read from registry
default_path:
StrCpy $INSTDIR $0
FunctionEnd
######################################################################
!define BCKPATH "$INSTDIR\_backup_v${VERSION_SHRT}"
Section -MainProgram
SetShellVarContext current
# fix incorrectly named images
Rename "$INSTDIR\fungalpayld_sm.pcx" "$INSTDIR\fungpayld_sm.pcx" ; used by "#FUNGALMISSILE", "#FUNGMOTIZED"
Rename "$INSTDIR\humref_sm.pcx" "$INSTDIR\humanref_sm.pcx" ; used by "#HOMELESS", "#HOMELESSONE"
Rename "$INSTDIR\sporelnch_sm.pcx" "$INSTDIR\sporlnch_sm.pcx" ; used in a number of locations having to do with Spore Launchers
# ini -> make sure ForceOldVoxelAlgorithm is set/reset
WriteINIStr "$INSTDIR\Alpha Centauri.ini" PREFERENCES ForceOldVoxelAlgorithm 0
# registry
IfFileExists "$INSTDIR\fx" 0 +2
WriteRegStr ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "Complete" "Yes" ; supressing #CDNOTFOUND -> fx/movies/voices folders
WriteRegStr ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "UnofficialVer" "${VERSION_SHRT}" ; version of unofficial patch
WriteRegStr ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "UnofficialPath" "$INSTDIR"
# create new dir
CreateDirectory "${BCKPATH}\fx" ; new dirs
# trashing SafeDisc and useless files
Delete "$INSTDIR\*.016" ; 00000407.016, 00000409.016
Delete "$INSTDIR\*.256" ; 00000407.256, 00000409.256
Delete "$INSTDIR\*.icd" ; Terran.icd, Terranx.icd
Delete "$INSTDIR\clcd*.dll" ; clcd16.dll, clcd32.dll
Delete "$INSTDIR\clokspl.exe"
Delete "$INSTDIR\dplayerx.dll"
Delete "$INSTDIR\drvmgt.dll"
Delete "$INSTDIR\secdrv.sys"
Delete "$INSTDIR\logfile.txt" ; general clean up
# SMAC base : back up original files
CopyFiles /SILENT "$INSTDIR\fx\CPU nn already linked.wav" "${BCKPATH}\fx" ; original wav
CopyFiles /SILENT "$INSTDIR\fx\wpn missile launcher.wav" "${BCKPATH}\fx" ; original wav
CopyFiles /SILENT "$INSTDIR\fx\wpn singularity laser.wav" "${BCKPATH}\fx" ; original wav
CopyFiles /SILENT "$INSTDIR\terran.exe" "${BCKPATH}" ; original exe
CopyFiles /SILENT "$INSTDIR\alpha.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\basename.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\believe.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\blurbs.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\concepts.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\credits.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\facedit.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\faction.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\flavor.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\gaians.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\help.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\hive.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\Holobook.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\interlude.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\jackal.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\labels.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\menu.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\monument.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\morgan.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\movlist.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\peace.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\scenario.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\script.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\spartans.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\system.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\techlongs.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\techshorts.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\tutor.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\univ.txt" "${BCKPATH}" ; original txt
# SMAC base : copy over new
SetOutPath "$INSTDIR\fx"
File "${PATCH_FILES_PATH}\ALL\CPU nn already linked.wav" ; updated wav -> add 0.015 of a second of silence to end of wav with Sony Sound Forge 10
File "${PATCH_FILES_PATH}\ALL\wpn missile launcher.wav" ; updated wav -> remixed stereo to mono (chuft), workaround for bug in sound/x.dll
File "${PATCH_FILES_PATH}\ALL\wpn singularity laser.wav" ; updated wav -> remixed stereo to mono (chuft), workaround for bug in sound/x.dll
SetOutPath "$INSTDIR"
WriteUninstaller "$INSTDIR\SMACX_UP_v${VERSION_SHRT}_Uninstaller.exe" ; new exe
File "${PATCH_FILES_PATH}\ALL\terran.exe" ; updated exe
File "${PATCH_FILES_PATH}\ALL\logo.pcx" ; original pcx -> missing from some installs (shown at launch)
File "${PATCH_FILES_PATH}\ALL\netcr_sm.pcx" ; new pcx -> missing (#NETCRASH), modified pcx from AA folder to include scan lines (BU)
File "${PATCH_FILES_PATH}\ALL\rdminldp_sm.pcx" ; new pcx -> missing (#PETERSOUT), modified pcx from AA folder to include scan lines (BU)
File "${PATCH_FILES_PATH}\EN\SMAC\*.txt" ; updated txt -> SMAC txt corrections (Guvner) with bug fixes (scient)
File "${PATCH_FILES_PATH}\ALL\OP_2000_XP\*.*" ; applying SMAC 2000/XP official patch supplemental files
IfFileExists "$INSTDIR\terranx.exe" 0 smacx_end
# SMACX base : back up original files
CopyFiles /SILENT "$INSTDIR\terranx.exe" "${BCKPATH}" ; original exe
CopyFiles /SILENT "$INSTDIR\alienIscript.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\alienuscript.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\alphax.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\angels.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\blurbsx.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\brian.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\caretake.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\conceptsx.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\cyborg.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\drone.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\fungboy.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\helpx.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\interludea.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\interludex.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\pirates.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\sid.txt" "${BCKPATH}" ; original txt
CopyFiles /SILENT "$INSTDIR\usurper.txt" "${BCKPATH}" ; original txt
# SMACX base : copy over new
File "${PATCH_FILES_PATH}\ALL\terranx.exe" ; updated exe
File "${PATCH_FILES_PATH}\EN\SMACX\*.txt" ; updated txt -> SMACX txt corrections (Guvner) with bug fixes (scient)
File "${PATCH_FILES_PATH}\ALL\OP_SMACX_20\*.*" ; applying SMACX 2.0 official patch supplemental files
smacx_end:
/*
StrCmp $LANGUAGE ${LANG_ENGLISH} 0 DE_specific
#Goto end_lang
DE_specific:
StrCmp $LANGUAGE ${LANG_GERMAN} 0 FR_specific
File "${PATCH_FILES_PATH}\DE\blurbs.txt" ; updated
File "${PATCH_FILES_PATH}\DE\script.txt" ; updated
IfFileExists "$INSTDIR\terranx.exe" 0 end_lang
File "${PATCH_FILES_PATH}\DE\blurbsx.txt" ; updated
File "${PATCH_FILES_PATH}\DE\movlistx.txt" ; new
Goto end_lang
FR_specific:
StrCmp $LANGUAGE ${LANG_FRENCH} 0 end_lang
File "${PATCH_FILES_PATH}\FR\blurbs.txt" ; updated
File "${PATCH_FILES_PATH}\FR\script.txt" ; updated
IfFileExists "$INSTDIR\terranx.exe" 0 end_lang
File "${PATCH_FILES_PATH}\FR\blurbsx.txt" ; updated
File "${PATCH_FILES_PATH}\FR\movlistx.txt" ; new
end_lang:
*/
SectionEnd
######################################################################
Section InstallFont
CopyFiles /SILENT "$INSTDIR\ARIAL*.ttf" "${BCKPATH}" ; back up original arial ttf
Delete "$INSTDIR\ARIAL*.ttf"
Delete "$INSTDIR\*.fot"
SetOutPath "$INSTDIR"
File "${PATCH_FILES_PATH}\ALL\FONT\*.ttf"
ReadRegStr $0 HKLM "Software\Microsoft\Windows NT\CurrentVersion\Fonts" "Alpha Centauri (TrueType)"
StrCmp $0 "ALPHC___.ttf" exit 0
SetOutPath "$FONTS"
File "${PATCH_FILES_PATH}\ALL\ALPHC___.ttf"
System::Call "gdi32::AddFontResource(t 'ALPHC___.ttf')"
WriteRegStr HKLM "Software\Microsoft\Windows NT\CurrentVersion\Fonts" "Alpha Centauri (TrueType)" "ALPHC___.ttf"
exit:
SectionEnd
######################################################################
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
Section "Uninstall"
Delete "$INSTDIR\SMACX_UP_v${VERSION_SHRT}_Uninstaller.exe"
CopyFiles /SILENT "${BCKPATH}\*.*" "$INSTDIR"
Delete "$INSTDIR\netcr_sm.pcx"
Delete "$INSTDIR\rdminldp_sm.pcx"
Delete "$INSTDIR\movlistx.txt"
RMDir /r "${BCKPATH}"
DeleteRegValue ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "UnofficialVer"
DeleteRegValue ${REG_ROOT} "${REG_APP_PATH}\Sid Meier's Alpha Centauri" "UnofficialPath"
SectionEnd
######################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment