Animated Menu Background

== What Is This? ==
This implementation allows you to use a .bik file as your main menu's background. Similar to those seen in Left 4 Dead 2 and Portal 2.
File:Small AnimatedBackgroundL4D2.gif|From 
File:Small_AnimatedBackgroundP2.gif|From 
== The Implementation ==
First off you'll need these two files:
* menu_background.h
* menu_background.cpp
Which you'll put into src/game/client/
Once that's done, open up cdll_client_int.cpp and add this:
void SwapDisconnectCommand();
Above
void CHLClient::PostInit()
Then at the bottom of the PostInit() function, add this:
	SwapDisconnectCommand();
Now head over to baseviewport.cpp, and add this at the top:
#include "../menu_background.h"
In the same file, add this in the constructor (CBaseViewport::CBaseViewport()):
	m_pMainMenuPanel = NULL;
Add this in the destructor (CBaseViewport::~CBaseViewport()):
	if ( !m_bHasParent && m_pMainMenuPanel )
		m_pMainMenuPanel->MarkForDeletion();
	m_pMainMenuPanel = NULL;
Add this in the CBaseViewport::Start( ... ) function:
	m_pMainMenuPanel = new CMainMenu( NULL, NULL );
	m_pMainMenuPanel->SetZPos( 500 );
	m_pMainMenuPanel->SetVisible( false );
	m_pMainMenuPanel->StartVideo();
Add this in the CBaseViewport::OnScreenSizeChanged() function:
	bool bRestartMainMenuVideo = false;
	if ( m_pMainMenuPanel )
		bRestartMainMenuVideo = m_pMainMenuPanel->IsVideoPlaying();
	m_pMainMenuPanel = new CMainMenu( NULL, NULL );
	m_pMainMenuPanel->SetZPos( 500 );
	m_pMainMenuPanel->SetVisible( false );
	if ( bRestartMainMenuVideo )
		m_pMainMenuPanel->StartVideo();
Add this in the CBaseViewport::RemoveAllPanels( void ):
	if ( m_pMainMenuPanel )
	{
		m_pMainMenuPanel->MarkForDeletion();
		m_pMainMenuPanel = NULL;
	}
Below the GetDeathMessageStartHeight( void ) function add these:
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBaseViewport::StartMainMenuVideo()
{
	if ( m_pMainMenuPanel )
		m_pMainMenuPanel->StartVideo();
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBaseViewport::StopMainMenuVideo()
{
	if ( m_pMainMenuPanel )
		m_pMainMenuPanel->StopVideo();
}
Now head over to baseviewport.h, add these:
	void StartMainMenuVideo();
	void StopMainMenuVideo();
Below
	virtual int GetDeathMessageStartHeight( void );	
After the last function under public:, add:
private:
	class CMainMenu *m_pMainMenuPanel;
Now head over to convar.h, and make this public (protected: -> public:):
protected:
	virtual void Create( const char *pName, const char *pHelpString = 0, int flags = 0 );
== What Next? ==
=== The Bink File ===
Now that you're done with the implementation, you'll need a .bik file to play as your background.
I won't show you how to make your own .bik file, but I can recommend following this guide for that:
* Tutorial: Modding the Background of the Menu (MP4 to Bik) - By "BreakingFuse"
Once you've got your .bik file ready, rename it to mainmenu.bik, and place it in your mod's media folder. If a media folder doesn't exist, create one.
=== The Chapter Images ===
You might notice that your chapter images are all white now, this can be fixed by adding this to your chapter's VMT file:
 "$ignorez" "1"
Example of working VMT chapter file:
"UnlitGeneric"
{
 "$baseTexture" "VGUI/chapters/chapterX"
 "$vertexalpha" "1"
 "$gammaColorRead" "1"
 "$linearWrite" "1"
 "$ignorez" "1"
}
File:AnimatedMainMenuBackground-issue02.png
File:AnimatedMainMenuBackground-issue02-fixed-single.png
== Conclusion ==
And that's it, try launching your mod to see if it works!
This is currently only tested on the SP branch of Source SDK 2013. The MP branch and Source SDK 2007 remain untested as of writing this article. (this was tested in Source SDK 2013 MP as could be followed and unless adding the code incorrectly this did not work. but this was followed to what i thought was most approprietely. for a MP fix please contribute!)
== Special Thanks ==
Special thanks to Taz, OzxyBox, and Gocnak from the Source Modding Community for solving the problems this implementation was originally facing!
Category:Programming
Category:Free source code