Frozen Bubble

From NSIS Wiki
Jump to navigationJump to search
Author: KiCHiK (talk, contrib)


Description

This is my script for the Win32 port of Frozen Bubble. Frozen Bubble is an addictive game for one or two players. It's written in Perl (yes, you've heard me... Perl!) and SDL.

Screenshots

Fb-1.0.0-1p-smaller.jpg Fb-1.0.0-2p-smaller.jpg

The Script

; Frozen Bubble Win32 port installer script
; This script requires NSIS 2.0b3 and above
; http://nsis.sf.net
;
; Written by Amir Szekely
 
#SetCompressor bzip2
 
!define MUI_PRODUCT "Frozen Bubble"
!define MUI_VERSION "1.0.0"
 
!include "MUI.nsh"
 
;--------------------------------
;Configuration
 
  !define MUI_FINISHPAGE
  !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\Frozen Bubble.lnk"
 
  !define MUI_LICENSEPAGE
  !define MUI_COMPONENTSPAGE
  !define MUI_DIRECTORYPAGE
  !define MUI_ABORTWARNING
  !define MUI_UNCONFIRMPAGE
  !define MUI_UNINSTALLER
 
  !define MUI_STARTMENUPAGE
 
  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
  !define MUI_STARTMENUPAGE_REGISTRY_KEY \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\Frozen Bubble"
  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
  !define MUI_STARTMENUPAGE_VARIABLE $R9
 
  !define MUI_HEADERBITMAP "branding.bmp"
 
  ;Language
  !define MUI_TEXT_FINISH_SHOWREADME "Run ${MUI_PRODUCT}"
  !insertmacro MUI_LANGUAGE "English"
 
  ;General
  OutFile "Frozen Bubble.exe"
 
  ;License page
  LicenseData "license.rtf"
 
  ;Folder-selection page
  InstallDir "$PROGRAMFILES\${MUI_PRODUCT}"
 
;--------------------------------
;Check for Perl and SDL_Perl and show splash screen
Function .onInit
  Banner::show /NOUNLOAD "Checking for Perl and SDL_Perl..."
 
  ReadRegStr $0 HKLM Software\Perl BinDir
  StrCmp $5 "" 0 +2
    StrCpy $5 perl.exe
  nsExec::Exec '"$5" -v'
  Pop $0
  StrCmp $0 0 checkSDL
    MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION "The installer can not find Perl and \
	SDL_perl on this computer!$\r$\nPlease install Perl and SDL_perl and run this \
	installer again.$\r$\nPress cancel if you are sure you have Perl and SDL_Perl \
	installed.$\r$\n$\r$\nWould you like the installer to open Perl's download page \
	for you?" IDNO abort IDCANCEL splash
      ExecShell open \
	    http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl
      MessageBox MB_OK|MB_ICONINFORMATION "Please make sure you download Perl 5.6.*. \
	    The current version of SDL_Perl doesn't work with Perl 5.8.*." IDOK abort
 
  checkSDL:
    nsExec::Exec '"$5" -e "use SDL; print $$SDL::VERSION;"'
    Pop $0
    StrCmp $0 0 splash
      ReadRegStr $0 HKLM Software\SDL_Perl Install_Dir
      IfFileExists $0 0 install_SDL_Perl
        MessageBox MB_YESNO|MB_ICONEXCLAMATION `It seems that you have installed \
		SDL_Perl but didn't add it to Perl's package list.$\r$\nTo add it to Perl's \
		package list you must call "ppm install SDL_perl.ppd". Would you like the \
		installer to call it for you?` IDNO abort
          SetOutPath $0
          ExecWait "ppm install SDL_perl.ppd" $1
          StrCmp $1 0 splash
            MessageBox MB_OK|MB_ICONSTOP "Installation failed. Please install \
			SDL_Perl manually and run this installer again." IDOK abort
      install_SDL_Perl:
        MessageBox MB_YESNO|MB_ICONEXCLAMATION "The installer can not find SDL_Perl \
		on this computer!$\r$\nPlease install SDL_Perl and run this installer \
		again.$\r$\n$\r$\nWould you like the installer to open SDL_Perl's download \
		page for you?" IDNO abort
        ExecShell open http://www.sdlperl.org/index.htpl?id=0&cat=projects
        Goto abort
 
  splash:
    Banner::destroy
    File /oname=$PLUGINSDIR\splash.bmp splash.bmp
    File /oname=$PLUGINSDIR\splash.wav ..\snd\malus.wav
 
    advsplash::show 1800 350 187 -1 $PLUGINSDIR\splash
 
    Pop $0 ; $0 has '1' if the user closed the splash screen early,
        ; '0' if everything closed normal, and '-1' if some error occurred.
    Return
 
  abort:
    Banner::destroy
    Abort
FunctionEnd
 
;--------------------------------
;Installer Sections
 
Section "!Frozen Bubble" SecCore
SectionIn RO
  SetOutPath $INSTDIR
  File ..\AUTHORS.txt
  File ..\CHANGES.txt
  File ..\COPYING.txt
  File ..\README.txt
  File "..\Windows Port.txt"
  File ..\frozen-bubble
  File ..\frozen-bubble-editor
 
  File /r ..\gfx
  File /r ..\lib
  File /r ..\snd
  File /r ..\data
  File /r ..\doc
 
  StrCmp $5 perl.exe 0 +2
    SearchPath $5 perl.exe
  StrCmp $5 "" 0 +2
    StrCpy $5 perl.exe
  CreateShortcut "$INSTDIR\Frozen Bubble.lnk" $5 \
    "-I.\lib frozen-bubble" $INSTDIR\gfx\icon.ico
 
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Frozen \
    Bubble" DisplayName "Frozen Bubble"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Frozen \
    Bubble" UninstallString '"$INSTDIR\Uninstall.exe"'
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Frozen \
    Bubble" DisplayIcon $INSTDIR\gfx\icon.ico
  WriteUninstaller $INSTDIR\Uninstall.exe
SectionEnd
 
Section -StartMenu
  !insertmacro MUI_STARTMENU_WRITE_BEGIN
  SetShellVarContext all
  CreateDirectory $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}
  IfFileExists $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE} createIcons
    SetShellVarContext current
    CreateDirectory $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}
 
  createIcons:
    CreateShortcut "$SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}\Frozen Bubble.lnk" \
	  $5 "-I.\lib frozen-bubble" $INSTDIR\gfx\icon.ico
    CreateShortCut $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}\Uninstall.lnk \
	  $INSTDIR\Uninstall.exe
    CreateShortCut $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}\License.lnk \
	  $INSTDIR\COPYING.txt
    CreateShortCut $SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}\Readme.lnk \
	  $INSTDIR\README.txt
    CreateShortCut "$SMPROGRAMS\${MUI_STARTMENUPAGE_VARIABLE}\Windows Port.lnk" \
	  "$INSTDIR\Windows Port.txt"
  !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
 
Section "Desktop icon" SecDesktop
  CreateShortcut "$DESKTOP\Frozen Bubble.lnk" $5 \
    "-I.\lib frozen-bubble" $INSTDIR\gfx\icon.ico
SectionEnd
 
Section "Quick Launch icon" SecQuick
  StrCmp $QUICKLAUNCH $TEMP +2
    CreateShortcut "$QUICKLAUNCH\Frozen Bubble.lnk" $5 \
	  "-I.\lib frozen-bubble" $INSTDIR\gfx\icon.ico
SectionEnd
 
Section "Install script" SecScript
  SetOutPath $INSTDIR\install
  File "Frozen Bubble.nsi"
  File license.rtf
  File splash.bmp
  File branding.bmp
SectionEnd
 
;--------------------------------
;Descriptions
 
!insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "Game files"
  !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "An icon of Frozen Bubble \
    on the desktop"
  !insertmacro MUI_DESCRIPTION_TEXT ${SecQuick} "An icon of Frozen Bubble \
    in the Quick Launch bar"
  !insertmacro MUI_DESCRIPTION_TEXT ${SecScript} "This installer scripts \
    (requires NSIS)"
!insertmacro MUI_FUNCTIONS_DESCRIPTION_END
 
;--------------------------------
;Uninstaller Section
 
Section "Uninstall"
  Delete $INSTDIR\AUTHORS.txt
  Delete $INSTDIR\CHANGES.txt
  Delete $INSTDIR\COPYING.txt
  Delete $INSTDIR\README.txt
  Delete "$INSTDIR\Windows Port.txt"
  Delete $INSTDIR\frozen-bubble
  Delete $INSTDIR\frozen-bubble-editor
  Delete "$INSTDIR\Frozen Bubble.lnk"
  Delete $INSTDIR\.fbrc
  Delete $INSTDIR\.fbhighscores
  Delete $INSTDIR\.fbhighlevelshistory
  Delete $INSTDIR\Uninstall.exe
 
  RMDir /r $INSTDIR\gfx
  RMDir /r $INSTDIR\lib
  RMDir /r $INSTDIR\snd
  RMDir /r $INSTDIR\data
  RMDir /r $INSTDIR\install
  RMDir /r $INSTDIR\doc
  RMDir /r $INSTDIR\.fblevels
 
  RMDir $INSTDIR
 
  ReadRegStr $0 "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" \
    "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
 
  StrCmp $0 "" noshortcuts
    Delete "$0\Frozen Bubble.lnk"
    Delete $0\Uninstall.lnk
    Delete $0\License.lnk
    Delete $0\Readme.lnk
    Delete "$0\Windows Port.lnk"
    RMDir $0
 
  noshortcuts:
 
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Frozen Bubble"
 
  Delete "$DESKTOP\Frozen Bubble.lnk"
  Delete "$QUICKLAUNCH\Frozen Bubble.lnk"
 
SectionEnd
 
;eof