Come creare un installer per Windows

Tutti i linguaggi più usati per scrivere avventure non generano file eseguibili (che sarebbero utilizzabili su di una sola famiglia di sistemi operativi), ma bensì generano degli story file che devono essere caricati su di un interprete, e sono quindi indipendenti dal sistema operativo. Tutto questo è ottimo per la portabilità e in generale per l’utente esperto, ma può risultare complicato per il giocatore occasionale.
Questa guida vuole spiegare come realizzare un programma che una volta lanciato installi su di un qualsiasi computer (con sistema operativo Windows) una vostra avventura (in formato Glulx o Z-Code) con tanto di voci nel menù Start, icona sul desktop e uninstaller.

L’installer realizzato seguendo questa guida è destinato ai sistemi operativi Windows (2000, XP, Vista e 7), ma dovrebbe essere eseguibile, tramite Wine o Crossover, anche su sistemi operativi Linux o Mac OsX.

Cosa serve

Anzitutto dovete scaricare il programma NSIS, un creatore di installer potente, flessibile, leggero e open source. Potete scaricarlo da SourceForge (home page ufficiale) o da IfItalia, lanciarlo e scegliere l’opzione per l’installazione completa (full).

Poi vi servirà anche l’ultima versione di Gargoyle (interprete multiformato dalle pregevoli doti tipografiche) per Windows. Vi consigliamo di non scaricare l’installer, ma l’archivio dei file binari; lo potete trovare su Google Code (home page ufficiale) o su IfItalia. Estraete l’archivio in una cartella di vostra scelta.

Infine avete bisogno di questo template di script per NSIS, di un editor di testi (andrebbe bene anche Notepad, ma esistono moltissimi editor gratuiti e molto più avanzati) e di un programma qualsiasi per realizzare immagini in formato bitmap e che possa salvare icone in formato .ico (ad esempio Gimp)

Preparazione

Dovete avere nella stessa cartella (che può essere anche la cartella dove tenete normalmente il gioco, anche se rischiate di avere troppi file):

  • il file della vostra avventura in formato Z-Code (.z5, .z8, .zblorb) o Glulx (.ulx, .blb, .gblorb)
  • una copia del file template.nsi, rinominata come volete ma sempre con la stessa estensione
  • un’immagine in formato bitmap (.bmp), di dimensioni 164 x 314 pixel, che apparirà a sinistra durante l’installazione
  • un’icona di windows, chiamata ad esempio icon.ico, di dimensioni 48 x 48 pixel, che verrà usata sia per l’installer che per il gioco
  • un file di configurazione di Gargoyle per la vostra avventura, che quindi si chiamerà come il gioco, ma con estensione .ini
  • un manualetto in formato .pdf o .html (a titolo d’esempio)

Modifica dello script

NSIS è un programma estremamente versatile, e viene normalmente controllato da un file di script (il vostro file .nsi), la cui sintassi può risultare abbastanza complicata. Per questo motivo partirete da un template generico e lo modificherete secondo le vostre esigenze. Per far ciò aprite con un editor di testi (notepad, o possibilmente qualcosa di meglio) il vostro file .nsi.

Individuate le seguenti righe (da 8 a 15):

!define MUI_ABORTWARNING
!define MUI_ICON “icon.ico”
!define MUI_WELCOMEPAGE_TITLE “Installazione di $(^Name)”
!define MUI_WELCOMEFINISHPAGE_BITMAP “inst_image.bmp”
!define MUI_WELCOMEPAGE_TEXT “$(^Name)\r\n\r\nUn’avventura interattiva\r\ndi Autore, 2010.\r\n\r\n$_CLICK”
!insertmacro MUI_PAGE_WELCOME

!define MUI_STARTMENUPAGE_DEFAULTFOLDER “CartellaMenuAvvio”

Sostutuite a inst_image.bmp il nome della vostra immagine bitmap, e modificate la stringa Un’avventura interattiva\r\ndi Autore, 2010. a vostro piacere; la sequenza \r\n indica il ritorno a capo. Poi sostituite a CartellaMenuAvvio il nome della cartella che verrà creata nel menù Start.

Passate alle righe da 25 a 30:

Name “Avventura”
OutFile “Avventura_Setup.exe”
InstallDir “$PROGRAMFILES\Directory”
ShowInstDetails show
ShowUnInstDetails show
BrandingText “Avventura”

Sostituite ad Avventura il nome del vostro gioco (entrambe le volte), e ad Avventura_Setup il nome che avrà l’installer una volta creato. Poi sostituite a Directory il nome della cartella, sotto Programmi, dove verrà installata di default la vostra avventura.

La sezione successiva (righe da 32 a 43) contiene l’elenco dei file che verranno installati:

Section -Files
  SetOutPath “$INSTDIR\”
  File “avventura.gblorb”
  File “avventura.ini”
  File “manuale.pdf”
  File “icon.ico”
  File “pathgargoyle\*.dll”
  File “pathgargoyle\glulxe.exe”
  File “pathgargoyle\frotz.exe”
  File “pathgargoyle\gnu general public license.txt”
  FILE “pathgargoyle\luxi license.txt”
SectionEnd

Sostituite ad avventura.gblorb il nome del file (z-code o glulx) della vostra avventura, a avventura.ini il nome del file di configurazione di Gargoyle e a manuale.pdf il nome del file del manualetto di istruzioni. Poi, nelle 5 righe successive, sostituite a pathgargoyle il path (assoluto o relativo) della cartella dove avete installato Gargoyle (ad esempio ..\bin\gargoyle).
Potete aggiungere anche altri file (ad esempio un file contenente la licenza), o addirittura toglierne alcuni, come la configurazione di Gargoyle o il manuale.

La prossima sezione (righe da 45 a 53), un po’ più delicata, si occupa di creare le voci del menù Start e l’icona sul desktop:

Section -Icons
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory “$SMPROGRAMS\$STARTMENU_FOLDER”
CreateShortCut “$SMPROGRAMS\$STARTMENU_FOLDER\Avventura.lnk” “$INSTDIR\glulxe.exe” ‘ “$INSTDIR\avventura.gblorb” ’ “$INSTDIR\icon.ico”
CreateShortCut “$SMPROGRAMS\$STARTMENU_FOLDER\Manuale di Avventura.lnk” “$INSTDIR\manuale.pdf”
CreateShortCut “$SMPROGRAMS\$STARTMENU_FOLDER\Disinstalla Avventura.lnk” “$INSTDIR\uninstall.exe”
CreateShortCut “$DESKTOP\Avventura.lnk” “$INSTDIR\glulxe.exe” ‘ “$INSTDIR\avventura.gblorb” ’ $INSTDIR\icon.ico”
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Sostituite la parola Avventura (nei due Avventura.lnk, in Manuale di Avventura.lnk e in Disinstalla Avventura.lnk) con il nome del vostro gioco. Di nuovo sostituite ad avventura.blorb il nome del file della vostra avventura (due volte); se la vostra avventura è in formato Z-code dovete anche sostituire glulxe.exe con frotz.exe (di nuovo due volte). Sostituite a manuale.pdf il nome del file del manualetto (se nella sezione precedente l’avete tolto, eliminate l’intera riga CreateShortCut “$SMPROGRAMS\$STARTMENU_FOLDER\Manuale di Avventura.lnk” “$INSTDIR\manuale.pdf”).

Le prossime due sezioni che dovrete modificare, e che si occupano della disinstallazione, sono particolarmente delicate. Prendete le righe da 55 a 59: Section -PostInstall

 WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\ID_Avventura” “DisplayName” “Avventura (rimozione)”
 WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\ID_Avventura” “UninstallString” ‘ “$INSTDIR\uninstall.exe” ’
 WriteUninstaller “$INSTDIR\uninstall.exe”

SectionEnd Sostituite a ID_Avventura, in entrambe le righe, una stringa che identifichi in modo univoco il vostro gioco: il nome del gioco può essere sufficiente se è abbastanza particolare, oppure le vostre iniziali seguite dal nome del gioco (ad es. PL_VillaMorgana). Se avete due o più versioni diverse del gioco (ad esempio in Inglese e in Italiano, o solo testo e con grafica), queste devono essere identificate da stringhe distinte.
Al posto di Avventura (rimozione) scrivete il nome del vostro gioco (lasciando o togliendo (rimozione), a vostro gusto).

Infine prendiamo l’ultima sezione, le righe da 74 a 84:

Section Uninstall
  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
  Delete “$SMPROGRAMS\$MUI_TEMP\Avventura.lnk”
  Delete “$SMPROGRAMS\$MUI_TEMP\Manuale di Avventura.lnk”
  Delete “$SMPROGRAMS\$MUI_TEMP\Disinstalla Avventura.lnk”
  RMDir “$SMPROGRAMS\$MUI_TEMP\”
  RMDir “$SMPROGRAMS\$MUI_TEMP\..\”
  Delete “$DESKTOP\Avventura.lnk”
  RMDir /r “$INSTDIR”
  DeleteRegKey HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\ID_Avventura”
SectionEnd

Sostituite il nome del vostro gioco alla parola Avventura nei due Avventura.lnk, in Manuale di Avventura.lnk e in Disinstalla Avventura.lnk. Sostituite a ID_Avventura la stringa che identifica il vostro gioco (stabilita nella sezione precedente).

Salvate il file e uscite dall’editor.

Ultimi passi

Clickate con il tasto destro sul vostro file .nsi e scegliete la voce Compile NSIS Script. Attendete qualche decina di secondi mentre NSIS elabora il vostro script e crea l’eseguibile. Il vostro file (il nome lo avete scelto nello script) dovrebbe apparire nella cartella.
A questo punto eseguitelo, installate la vostra avventura e controllate che funzioni tutto (compreso l’uninstaller). Se è tutto a posto, potete pubblicare l’installer per windows della vostra avventura. Ricordate però che non tutti usano Windows, e che i giocatori più smaliziati preferiscono usare il loro interprete; pubblicate anche una distribuzione tradizionale dello story file (magari in uno zip assieme con il manuale).

Avanzate: installer in Inglese

La riga 22 dello script è

!insertmacro MUI_LANGUAGE “Italian”

Basta sostituire “English” a “Italian” e, ovviamente, scrivere in Inglese le varie frasi che si incontrano in tutto lo script e che devono essere visualizzate durante l’installazione o la disinstallazione.

Avanzate: Aggiungere nuove voci di Menù

I comandi CreateShortcut servono a creare voci di menù e icone sul desktop, e potete aggiungerne quanti volete. Inoltre, come già detto, potete aggiungere altre voci all’elenco dei file da installare.

Ad esempio, immaginiamo di voler permettere al giocatore di scegliere, oltre alla versione con grafica (che è già a posto), anche la versione solo testo della nostra avventura. Quindi nella sezione -Files aggiungiamo la riga

File “nomefile.zblorb”

dove nomefile.zblorb è il nome del file in formato Z-Code.

Nella sezione -Icons aggiungiamo le seguenti righe:

CreateShortCut “$SMPROGRAMS\$STARTMENU_FOLDER\Avventura (solo testo).lnk” “$INSTDIR\frotz.exe” ‘ “$INSTDIR\nomefile.zblorb” ’ $INSTDIR\icon.ico”
CreateShortCut “$DESKTOP\Avventura (solo testo).lnk” “$INSTDIR\frotz.exe” ‘ “$INSTDIR\nomefile.zblorb” ’ $INSTDIR\icon.ico”

ovviamente modificate in accordo con il resto dello script.

E infine nella sezione Uninstall aggiungiamo le righe (adattate):

Delete “$SMPROGRAMS\$MUI_TEMP\Avventura (solo testo).lnk”
Delete “$DESKTOP\Avventura (solo testo).lnk”

prima del comando DeleteRegKey.

Salvate, compilate e provate.

Avanzate: Usare un interprete diverso

Se preferite usare un interprete diverso da Gargoyle, potete farlo. Scaricate l’interprete di vostra scelta in una cartella e sostituite, nella sezione -Files, le righe:

File “pathgargoyle\*.dll”
File “pathgargoyle\glulxe.exe”
File “pathgargoyle\frotz.exe”
File “pathgargoyle\gnu general public license.txt”
FILE “pathgargoyle\luxi license.txt”

con un elenco dei file necessari (in genere tutti tranne gli esempi) del vostro interprete, ovviamente con il loro percorso assoluto o relativo. Potete usare caratteri speciali come * (ad esempio *.dll indica tutti i file con estensione .dll).

Poi nella sezione -Icons modificate, se necessario, i vari comandi CreateShortCut sostituendo a glulxe.exe o frotz.exe il comando d’avvio del vostro interprete.

Salvate, compilate e provate.