Source Mod Installers: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
 
(27 intermediate revisions by 11 users not shown)
Line 1: Line 1:
<small>Extra thanks to [[User:Garry Newman]] for relaying the basics of a mod installer.</small>
{{Underlinked|date=January 2024}}
{{lang|Source Mod Installers}}
<small>Extra thanks to [[User:Garry Newman|Garry Newman]] for relaying the basics of a mod installer.</small>


For this, you need [http://nsis.sourceforge.net/ NSIS] and [http://hmne.sourceforge.net/ HM NIS Edit].
For this, you need [http://nsis.sourceforge.net/ NSIS] and [http://hmne.sourceforge.net/ HM NIS Edit].
{{note|The steam restart script block requires [http://nsis.sourceforge.net/Find_Process_By_Name FindProc] to be installed in your NSIS Plugins folder.}}


{{note|To automate the file list, use the NSIS Script Wizard in HM NIS Edit, then copy the list to your <code>setup.nsi</code>.}}
{{note|To automate the file list, use the NSIS Script Wizard in HM NIS Edit, then copy the list to your <code>setup.nsi</code>.}}


{{note|You might want to be sure to include a [[Wikipedia:ZIP (file format)|ZIP]]-compressed version of the mod as a download. This will make certain people who do not like third-party setup files will be able to get the mod.}}
{{note|You might want to be sure to include a [[Wikipedia:ZIP (file format)|ZIP]]-compressed version of the mod as a download. This will make it so people who are uneasy with EXE files able to get the mod.}}
=Code from setup.nsi=
=Code from setup.nsi=
<pre>!define PRODUCT_NAME "Mod's Name"
<pre>!define PRODUCT_NAME "Mod's Name"
!define PRODUCT_VERSION "Release Version"
!define PRODUCT_VERSION "Release Version"
!define PRODUCT_PUBLISHER "Mod Team/Company Name"
!define PRODUCT_PUBLISHER "Mod Team/Company Name"
!define PRODUCT_WEB_SITE "Mod Website"


!define PRODUCT_WEB_SITE "Mod Website"
!define APPID 220


!define MODDIR "Mod's root directory"
!define MODDIR "Mod's root directory"
;(i.e. cstrike)
;(i.e. cstrike)
!define LOCALDIR "C:\Program Files\Valve\Steam\SteamApps\SourceMods"
;This value should be set depending on the PC this will be compiled under


!define MUI_ICON "Installer Icon"
!define MUI_ICON "Installer Icon"
Line 36: Line 38:


;Uncomment this if you want to use ZipDLL
;Uncomment this if you want to use ZipDLL
;The zip file should be in the LOCALDIR for this
;!define ZIPDLL
;!define ZIPDLL


;Uncomment this if you want to use the restart steam script
;======DO NOT EDIT BEYOND THIS POINT======
;!define RESTARTSTEAM


!ifdef ZIPDLL
!ifdef ZIPDLL
Line 55: Line 57:


Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
OutFile "${PRODUCT_NAME}.exe"
ShowInstDetails show
ShowInstDetails show


Section "Mod Files" SEC01
Section "Mod Files" FILES
SetOverwrite ifdiff
SetOverwrite ifdiff
SetOutPath "$INSTDIR"
!ifdef ZIPDLL
!ifdef ZIPDLL
File "C:\...\zipfile.zip"
File "${LOCALDIR}\${MODDIR}.zip"
StrCpy $R0 "$INSTDIR\zipfile.zip"
StrCpy $R0 "$INSTDIR\${MODDIR}.zip"
ZipDLL::extractall "$R0" "$INSTDIR"
ZipDLL::extractall "$R0" "$INSTDIR"
Delete "$R0"
Delete "$R0"
!else
!else
SetOutPath "$INSTDIR"
File /r "${LOCALDIR}\${MODDIR}"
;!! CHANGE THE LINE BELOW - /r tells it to include all files and dirs below this path
File /r "x:\path\to\your\mod\directory\"
!endif
!endif


Line 78: Line 79:
SectionEnd
SectionEnd
!ifndef NO_DESKTOP_ICON
!ifndef NO_DESKTOP_ICON
Section "Desktop Shortcut" SEC02
Section "Desktop Shortcut" SHORTCUT
SetOutPath "$DESKTOP"
SetOutPath "$DESKTOP"
CreateShortcut "${FULL_GAME_NAME}.lnk" $STEAMEXE \
CreateShortcut "${FULL_GAME_NAME}.lnk" $STEAMEXE \
'-applaunch 220 -game "$INSTDIR"' "$ICONDIR\${FULL_GAME_NAME}.ico"
'-applaunch ${APPID} -game "$INSTDIR"' "$ICONDIR\${FULL_GAME_NAME}.ico"
SectionEnd
SectionEnd
!endif
!endif
!ifdef RESTARTSTEAM
Page custom Finish
Page custom Finish
Function TickCountStart
!define TickCountStart `!insertmacro TickCountStartCall`
!macro TickCountStartCall
Call TickCountStart
!macroend
Push $0
System::Call 'kernel32::GetTickCount()i .r0'
Exch $0
FunctionEnd
Function TickCountEnd
!define TickCountEnd `!insertmacro TickCountEndCall`
!macro TickCountEndCall _RESULT
Call TickCountEnd
Pop ${_RESULT}
!macroend
Exch $0
Push $1
System::Call 'kernel32::GetTickCount()i .r1'
System::Int64Op $1 - $0
Pop $0
Pop $1
Exch $0
FunctionEnd
Function Finish
Function Finish
  ReadRegStr $R0 HKCU "Software\Valve\Steam\Steam.exe" UpTimeStart
   MessageBox MB_OK|MB_ICONEXCLAMATION "Steam must be restarted for the game to show on the games list."
  StrCmp $R0 0 final 0
   MessageBox MB_YESNO|MB_ICONEXCLAMATION "Steam must be restarted for the game to show on the games list.$\r$\nWould you like the installer to restart steam for you?$\r$\n$\r$\n(Restart may take a while)$\r$\nInstaller will timeout after 30 seconds." IDNO final
  ReadRegStr $R1 HKCU "Software\Valve\Steam" SteamExe
  ExecWait '"$R1" "-shutdown"'
  loop:
  ${TickCountStart}
  FindProcDLL::FindProc "steam.exe"
  StrCmp $R0 1 0 exit
  ${TickCountEnd} $R3
  IntOp $R4 $R4 + $R3
  IntCmp $R4 30000 timeout loop timeout
  exit:
  Exec '"$R1"'
  Goto final
  timeout:
  MessageBox MB_OK|MB_ICONINFORMATION "$R4$\r$\nSteam restart timed out"
  final:
  MessageBox MB_OK "Installation was successful"
FunctionEnd
FunctionEnd
!endif
Function .onInit
Function .onInit
ReadRegStr $R0 HKLM "Software\Valve\Steam" InstallPath
ReadRegStr $R0 HKLM "Software\Valve\Steam" InstallPath
ReadRegStr $R1 HKCU "Software\Valve\Steam" SourceModInstallPath
ReadRegStr $R1 HKCU "Software\Valve\Steam" SourceModInstallPath
IfErrors lbl_error 0
IfErrors lbl_error 0
StrCpy $INSTDIR "$R1\${MODDIR}"
StrCpy $INSTDIR "$R1"
!ifndef NO_DESKTOP_ICON
!ifndef NO_DESKTOP_ICON
StrCpy $ICONDIR "$R0\steam\games"
StrCpy $ICONDIR "$R0\steam\games"
SectionSetFlags ${SEC02} 0
SectionSetFlags ${SHORTCUT} 0
StrCpy $STEAMEXE "$R0\steam.exe"
!endif
!endif
SectionSetFlags ${SEC01} 17
SectionSetFlags ${FILES} 17
StrCpy $STEAMEXE "$R0\steam.exe"
Return
Return
lbl_error:
lbl_error:
ClearErrors
ClearErrors
SectionSetFlags ${SEC01} 16
SectionSetFlags ${FILES} 17
FunctionEnd</pre>
FunctionEnd</pre>


=See Also=
=See also=
* [[Steam 3rd Party Mod Support]]
* [[Steam 3rd Party Mod Support]]
* [http://nsis.sourceforge.net/wiki/Main_Page NSIS Wiki]
* [http://nsis.sourceforge.net/wiki/Main_Page NSIS Wiki]
* [http://nsis.sourceforge.net/wiki/ZipDLL ZipDLL] &mdash; Use this to possibly compress your installer
* [http://nsis.sourceforge.net/wiki/ZipDLL_plug-in ZipDLL plug-in] &mdash; {{wiki|Zip}} decompression support
* [http://nsis.sourceforge.net/UnTGZ_plug-in UnTGZ plug-in] &mdash; {{wiki|Gzip}} & [[Bzip2]] decompression support
* [http://www.towofu.net/soft/e-aicon.php @icon sushi]
:It's a great free icon application. Supports XP icons.
* [http://www.iconxp.com/ IconXP]
* [http://www.iconxp.com/ IconXP]
:It's a great icon application with a trial version available (link is broken)
:It's a great icon application with a trial version available
* [http://www.dodbits.com/dods/index.php/source-graphics/nsis-installlers NSIS Basic Installer For Steam Content and Mods. dodbits.com]
:This tutorial will make a step-by-step basic to advanced installer for steam games. Mostly for CS:S and Day of Defeat but can be used for any VALVe game that requires a installer to automatically find the Mods address in the Steam folders. Use for installing whole Mods, Maps, Models... any content you like. All tools used are FREEWARE with links to them in the articles.
 
* [http://www.jrsoftware.org/isdl.php Inno Setup]
An easy user-friendly GUI based setup compiler, very easy to setup for mods and other applications.
 
[[Category:Tutorials]]
[[Category:Tutorials]]
[[Category:Modding]]
[[Category:Modding]]
[[Category:Publicity & Publication]]

Latest revision as of 09:43, 20 September 2024

Underlinked - Logo.png
This article needs more Wikipedia icon links to other articles to help Wikipedia icon integrate it into the encyclopedia. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
January 2024
English (en)Русский (ru)Translate (Translate)

Extra thanks to Garry Newman for relaying the basics of a mod installer.

For this, you need NSIS and HM NIS Edit.

Note.pngNote:To automate the file list, use the NSIS Script Wizard in HM NIS Edit, then copy the list to your setup.nsi.
Note.pngNote:You might want to be sure to include a ZIP-compressed version of the mod as a download. This will make it so people who are uneasy with EXE files able to get the mod.

Code from setup.nsi

!define PRODUCT_NAME "Mod's Name"
!define PRODUCT_VERSION "Release Version"
!define PRODUCT_PUBLISHER "Mod Team/Company Name"
!define PRODUCT_WEB_SITE "Mod Website"

!define APPID 220

!define MODDIR "Mod's root directory"
;(i.e. cstrike)

!define LOCALDIR "C:\Program Files\Valve\Steam\SteamApps\SourceMods"
;This value should be set depending on the PC this will be compiled under

!define MUI_ICON "Installer Icon"
;This is the location on the local computer where the icon for the installer executable is.

!define FULL_GAME_NAME "Full Game Name"
;This is the name of the game defined in gameinfo.txt
;Remove all colons from this (as well as any other invalid char in a file name)

!define DESKICO "Desktop Icon"
;This is the location on the local computer where the icon for the desktop icon for the game is.
;The icon name must be the same as the one in gameinfo.txt
;Remove all colons from this (as well as any other invalid char in a file name)

;Uncomment this if you do not wish to have a custom desktop icon:
;!define NO_DESKTOP_ICON

;Uncomment this if you want to use ZipDLL
;The zip file should be in the LOCALDIR for this
;!define ZIPDLL

;======DO NOT EDIT BEYOND THIS POINT======

!ifdef ZIPDLL
	!include "zipdll.nsh"
!endif

var ICONDIR
var STEAMEXE

!include "MUI.nsh"
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}.exe"
ShowInstDetails show

Section "Mod Files" FILES
	SetOverwrite ifdiff
	SetOutPath "$INSTDIR"
!ifdef ZIPDLL
	File "${LOCALDIR}\${MODDIR}.zip"
	StrCpy $R0 "$INSTDIR\${MODDIR}.zip"
	ZipDLL::extractall "$R0" "$INSTDIR"
	Delete "$R0"
!else
	File /r "${LOCALDIR}\${MODDIR}"
!endif

!ifndef NO_DESKTOP_ICON
	SetOutPath "$ICONDIR"
	File "${DESKICO}"
!endif

SectionEnd
!ifndef NO_DESKTOP_ICON
Section "Desktop Shortcut" SHORTCUT
	SetOutPath "$DESKTOP"
	CreateShortcut "${FULL_GAME_NAME}.lnk" $STEAMEXE \
		'-applaunch ${APPID} -game "$INSTDIR"' "$ICONDIR\${FULL_GAME_NAME}.ico"
SectionEnd
!endif
Page custom Finish
Function Finish
  MessageBox MB_OK|MB_ICONEXCLAMATION "Steam must be restarted for the game to show on the games list."
FunctionEnd
Function .onInit
	ReadRegStr $R0 HKLM "Software\Valve\Steam" InstallPath
	ReadRegStr $R1 HKCU "Software\Valve\Steam" SourceModInstallPath
	IfErrors lbl_error 0
	StrCpy $INSTDIR "$R1"
!ifndef NO_DESKTOP_ICON
	StrCpy $ICONDIR "$R0\steam\games"
	SectionSetFlags ${SHORTCUT} 0
	StrCpy $STEAMEXE "$R0\steam.exe"
!endif
	SectionSetFlags ${FILES} 17
	Return
	lbl_error:
		ClearErrors
		SectionSetFlags ${FILES} 17
FunctionEnd

See also

It's a great free icon application. Supports XP icons.
It's a great icon application with a trial version available
This tutorial will make a step-by-step basic to advanced installer for steam games. Mostly for CS:S and Day of Defeat but can be used for any VALVe game that requires a installer to automatically find the Mods address in the Steam folders. Use for installing whole Mods, Maps, Models... any content you like. All tools used are FREEWARE with links to them in the articles.

An easy user-friendly GUI based setup compiler, very easy to setup for mods and other applications.