# VBForums CodeBank > Codebank - Game Programming >  Install script for a Game (Inno Setup)

## DracullSoft

When your game is complete and your want to offer it to the public you will need to write an installer - a setup program - that will install your game and game resources so the novice computer user also has a chance to play your game.

I have been using Jordan Russel's great free setup maker, called InnoSetup. Below is an example of script for a sample game make with Ice2D Game Engine. The script will check for the correct vesion of directX is present and will offer the user to upgrade directX if its missing as it's a requirement for my game. Some lines are commented out ( with a leading ; ), but i have left them because they show how to install VB6 runtime files and a few common ocx's

I have used a script like this for the Ice2D Game Engine Demo suite in this topic http://www.vbforums.com/showthread.php?t=657161

InnoSetup uses just a single file called Ice2DInst.iss 


```
; -- Ice2DInst.iss --
; Demonstrates how to install a game made with Ice2D Game Engine.
; Website: http://www.ice2d.com
; Copyright &#169;2011 DracullSoft™
[Setup]
AppName=Ice2D Setup Test
AppVerName=Ice2D Game Engine Setup Test
DefaultDirName={pf}\Ice2DSetupTest
DefaultGroupName=Ice2D Games
;UninstallDisplayIcon={app}\DxIceSampleD.exe
OutputDir=..\DELIVERY
SourceDir=..\SETUP
OutputBaseFilename=Ice2DSetupTest
AppCopyright=Copyright &#169;2011 DracullSoft™
AppPublisher=DracullSoft.
AppPublisherURL=http://www.Ice2d.com/
AppVersion=1.87
VersionInfoVersion=1.8.7.1
LicenseFile=License.txt
DisableFinishedPage=yes
;SetupIconFile=InstallICO.ico
Compression=lzma
SolidCompression=yes
WizardImageFile=Wiz-IS.bmp
WizardSmallImageFile=WizSmall-IS.bmp
PrivilegesRequired=admin
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"


[Files]
; begin VB system files  - not needed unless windows is pre XP
;Source: vbfiles\stdole2.tlb; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile regtypelib
;Source: vbfiles\msvbvm60.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile regserver
;Source: vbfiles\oleaut32.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile regserver
;Source: vbfiles\olepro32.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile regserver
;Source: vbfiles\asycfilt.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile
;Source: vbfiles\comcat.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile regserver

; begin VB Support files
;Source: MSWinSck.ocx; DestDir: {sys}; Flags: sharedfile regserver - win7 support for tool examples
;Source: vbextra\comdlg32.ocx; DestDir: {sys}; Flags: restartreplace sharedfile regserver        
;Source: vbextra\comctl32.ocx; DestDir: {sys}; Flags: restartreplace sharedfile regserver 

;Ice2D engine
Source: Ice2D\DxIce9H.dll; DestDir: "{app}\Ice2D"
Source: Ice2D\DxIce110.Pak; DestDir: "{app}\Ice2D"
Source: Ice2D\Dx9Ice187.dll; DestDir: "{app}\Ice2D";Flags: restartreplace regserver 32bit
Source: Ice2D\bass.dll; DestDir: "{app}\Ice2D"
Source: Ice2D\ReadMe.txt; DestDir: "{app}\Ice2D"

; Ice2D Game Demo
; install recursive folders and files
Source: "Prog\*"; DestDir: "{app}"; Excludes: "*.m,.svn"; Flags: recursesubdirs createallsubdirs  ignoreversion
Source: Ice2D\Ice2D.url; DestDir: "{app}"

; direct X installer 
Source: "dxwebsetup.exe"; Flags: dontcopy

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Icons]
Name: "{group}\Ice2DSetupTest"; Filename: "{app}\DxIceSampleD.exe"
Name: "{group}\Visit Ice2D.com"; Filename: {app}\Ice2D.url
Name: "{group}\{cm:UninstallProgram,Ice2D Demo}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Ice2DSetupTest"; Filename: "{app}\DxIceSampleD.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\DxIceSampleD.exe"; Description: "{cm:LaunchProgram,Ice2D SetupTest App}"; Flags: nowait postinstall skipifsilent hidewizard

[InstallDelete]
Type: filesandordirs; Name: "{app}"


<<code>>
procedure DecodeVersion( verstr: String; var verint: array of Integer );
var
  i,p: Integer; s: string;

begin
  verint := [0,0,0,0];
  i := 0;

  while ( (Length(verstr) > 0) and (i < 4) ) do
  begin
     p := pos('.', verstr);
     if p > 0 then
     begin
      if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
       verint[i] := StrToInt(s);
       i := i + 1;
       verstr := Copy( verstr, p+1, Length(verstr) );
     end
     else
     begin
       verint[i] := StrToInt( verstr );
       verstr := '';
     end;
  end;
end;

function CompareVersion( ver1, ver2: String ) : Integer;
var
  verint1, verint2: array of Integer;
  i: integer;

begin
  SetArrayLength( verint1, 4 );
  DecodeVersion( ver1, verint1 );

  SetArrayLength( verint2, 4 );
  DecodeVersion( ver2, verint2 );

  Result := 0; i := 0;
  while ( (Result = 0) and ( i < 4 ) ) do
  begin
     if verint1[i] > verint2[i] then
       Result := 1
     else
      if verint1[i] < verint2[i] then
         Result := -1
       else
         Result := 0;

     i := i + 1;
  end;
end;

function GetDirectXVersion(): String;
var
  sVersion:  String;

begin
  sVersion := '';
  RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\DirectX', 'Version', sVersion );
  Result := sVersion;
end;

function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
begin
  if CompareVersion( GetDirectXVersion(), '4.9.0.904') < 0 then
  begin
    Result := MsgBox('DirectX 9.0.904 or higher is needed but it has not been found. Do you wish to continue with the installation?',
        mbConfirmation, MB_YESNO) = idYes;
    if Result = False then begin
      MsgBox('Please upgrade your DirectX Version to at least least 9.0.904. (DirectX 9,0c aug 2009)', mbInformation, MB_OK);
    end 
    else begin
        ExtractTemporaryFile('dxwebsetup.exe');

      // Launch Notepad and wait for it to terminate
        if Exec(ExpandConstant('{tmp}\dxwebsetup.exe'), '', '', SW_SHOW,
           ewWaitUntilTerminated, ResultCode) then   
        begin
          // handle success if necessary; ResultCode contains the exit code
        end
        else begin
          // handle failure if necessary; ResultCode contains the error code
        end;

     end
  end
  else
    Result := true;
end;
```

----------

