Messed a lot with BMS reading. See changelog.txt.
This commit is contained in:
@@ -38,6 +38,8 @@ public:
|
|||||||
virtual void TurnDangerOn() { m_bShowDanger = true; };
|
virtual void TurnDangerOn() { m_bShowDanger = true; };
|
||||||
virtual void TurnDangerOff() { m_bShowDanger = false; };
|
virtual void TurnDangerOff() { m_bShowDanger = false; };
|
||||||
|
|
||||||
|
virtual bool IsDangerOn() { return m_bShowDanger; };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Sprite m_sprVisualizationOverlay;
|
Sprite m_sprVisualizationOverlay;
|
||||||
Sprite m_sprSongBackground;
|
Sprite m_sprSongBackground;
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ bool BitmapText::Load( CString sFontFilePath )
|
|||||||
split( sWidthsValue, ",", arrayCharWidths );
|
split( sWidthsValue, ",", arrayCharWidths );
|
||||||
|
|
||||||
if( arrayCharWidths.GetSize() != Sprite::GetNumStates() )
|
if( arrayCharWidths.GetSize() != Sprite::GetNumStates() )
|
||||||
RageError( ssprintf("The number of widths specified in '%s' do not match the number of frames in the texture.", m_sFontFilePath) );
|
RageError( ssprintf("The number of widths specified in '%s' (%d) do not match the number of frames in the texture (%u).", m_sFontFilePath, arrayCharWidths.GetSize(), Sprite::GetNumStates()) );
|
||||||
|
|
||||||
for( int i=0; i<arrayCharWidths.GetSize(); i++ )
|
for( int i=0; i<arrayCharWidths.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
@@ -130,7 +130,7 @@ bool BitmapText::Load( CString sFontFilePath )
|
|||||||
FRECT* pFrect = m_pTexture->GetTextureCoordRect( i );
|
FRECT* pFrect = m_pTexture->GetTextureCoordRect( i );
|
||||||
|
|
||||||
float fPixelsToChopOff = m_fFrameNoToWidth[i] - GetUnzoomedWidth();
|
float fPixelsToChopOff = m_fFrameNoToWidth[i] - GetUnzoomedWidth();
|
||||||
float fTexCoordsToChopOff = fPixelsToChopOff / m_pTexture->GetTextureWidth();
|
float fTexCoordsToChopOff = fPixelsToChopOff / m_pTexture->GetSourceWidth();
|
||||||
|
|
||||||
pFrect->left -= fTexCoordsToChopOff/2;
|
pFrect->left -= fTexCoordsToChopOff/2;
|
||||||
pFrect->right += fTexCoordsToChopOff/2;
|
pFrect->right += fTexCoordsToChopOff/2;
|
||||||
@@ -245,9 +245,9 @@ void BitmapText::RenderPrimitives()
|
|||||||
float fY;
|
float fY;
|
||||||
switch( m_VertAlign )
|
switch( m_VertAlign )
|
||||||
{
|
{
|
||||||
case align_top: fY = 0; break;
|
case align_top: fY = -(m_sTextLines.GetSize()) * fHeight / 2; break; break;
|
||||||
case align_middle: fY = (m_sTextLines.GetSize()-1) * fHeight / 2; break;
|
case align_middle: fY = 0; break;
|
||||||
case align_bottom: fY = (m_sTextLines.GetSize()-1) * fHeight; break;
|
case align_bottom: fY = (m_sTextLines.GetSize()) * fHeight / 2; break;
|
||||||
default: ASSERT( true );
|
default: ASSERT( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,15 +293,15 @@ void BitmapText::RenderPrimitives()
|
|||||||
|
|
||||||
// set vertex positions
|
// set vertex positions
|
||||||
|
|
||||||
v[iVNum++].p = D3DXVECTOR3( fX, fHeight/2, 0 ); // bottom left
|
v[iVNum++].p = D3DXVECTOR3( fX, fY+fHeight/2, 0 ); // bottom left
|
||||||
v[iVNum++].p = D3DXVECTOR3( fX, -fHeight/2, 0 ); // top left
|
v[iVNum++].p = D3DXVECTOR3( fX, fY-fHeight/2, 0 ); // top left
|
||||||
|
|
||||||
fX += fCharWidth;
|
fX += fCharWidth;
|
||||||
|
|
||||||
float fExtraPixels = fPercentExtra * GetUnzoomedWidth();
|
float fExtraPixels = fPercentExtra * GetUnzoomedWidth();
|
||||||
|
|
||||||
v[iVNum++].p = D3DXVECTOR3( fX+fExtraPixels, fHeight/2, 0 ); // bottom right
|
v[iVNum++].p = D3DXVECTOR3( fX+fExtraPixels, fY+fHeight/2, 0 ); // bottom right
|
||||||
v[iVNum++].p = D3DXVECTOR3( fX+fExtraPixels, -fHeight/2, 0 ); // top right
|
v[iVNum++].p = D3DXVECTOR3( fX+fExtraPixels, fY-fHeight/2, 0 ); // top right
|
||||||
|
|
||||||
|
|
||||||
// set texture coordinates
|
// set texture coordinates
|
||||||
|
|||||||
@@ -555,6 +555,7 @@ void MusicWheel::NextSort()
|
|||||||
{
|
{
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
case STATE_SWITCHING_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
|
case STATE_FLYING_ON_AFTER_NEXT_SORT:
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't continue
|
return; // don't continue
|
||||||
|
|||||||
@@ -67,6 +67,10 @@ void RageBitmapTexture::Create()
|
|||||||
{
|
{
|
||||||
fmtTexture = D3DFMT_A4R4G4B4;
|
fmtTexture = D3DFMT_A4R4G4B4;
|
||||||
}
|
}
|
||||||
|
else if( GAMEINFO->m_GameOptions.m_iDisplayColor == 16 )
|
||||||
|
{
|
||||||
|
fmtTexture = D3DFMT_A4R4G4B4;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch( GAMEINFO->m_GameOptions.m_iTextureColor )
|
switch( GAMEINFO->m_GameOptions.m_iTextureColor )
|
||||||
|
|||||||
@@ -69,10 +69,8 @@ LPRageTexture RageTextureManager::LoadTexture( CString sTexturePath )
|
|||||||
// RageLog( ssprintf("Found that '%s' is already loaded. Using the loaded copy.", sTexturePath) );
|
// RageLog( ssprintf("Found that '%s' is already loaded. Using the loaded copy.", sTexturePath) );
|
||||||
pTexture->m_iRefCount++;
|
pTexture->m_iRefCount++;
|
||||||
}
|
}
|
||||||
else
|
else // the texture is not already loaded
|
||||||
{
|
{
|
||||||
RageLog( ssprintf("RageTextureManager: allocating space for '%s'.", sTexturePath) );
|
|
||||||
|
|
||||||
CString sDrive, sDir, sFName, sExt;
|
CString sDrive, sDir, sFName, sExt;
|
||||||
splitpath( FALSE, sTexturePath, sDrive, sDir, sFName, sExt );
|
splitpath( FALSE, sTexturePath, sDrive, sDir, sFName, sExt );
|
||||||
|
|
||||||
@@ -81,6 +79,9 @@ LPRageTexture RageTextureManager::LoadTexture( CString sTexturePath )
|
|||||||
else
|
else
|
||||||
pTexture = (LPRageTexture) new RageBitmapTexture( m_pScreen, sTexturePath );
|
pTexture = (LPRageTexture) new RageBitmapTexture( m_pScreen, sTexturePath );
|
||||||
|
|
||||||
|
|
||||||
|
RageLog( "RageTextureManager: allocating space for '%s' (%ux%u).", sTexturePath, pTexture->GetTextureWidth(), pTexture->GetTextureHeight() );
|
||||||
|
|
||||||
m_mapPathToTexture.SetAt( sTexturePath, pTexture );
|
m_mapPathToTexture.SetAt( sTexturePath, pTexture );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+76
-57
@@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "IniFile.h"
|
|
||||||
#include "BmsFile.h"
|
|
||||||
#include "Steps.h"
|
#include "Steps.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
|
|
||||||
@@ -228,8 +226,8 @@ bool Song::LoadSongInfoFromBMSDir( CString sDir )
|
|||||||
|
|
||||||
|
|
||||||
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
||||||
// file, so this method assumes that the song info is identical for every BMS file in
|
// file. So, we read the song data from only the first BMS file and assume that the info
|
||||||
// the directory.
|
// is identical for every BMS file in the directory.
|
||||||
CString sBMSFilePath = m_sSongDir + arrayBMSFileNames[0];
|
CString sBMSFilePath = m_sSongDir + arrayBMSFileNames[0];
|
||||||
|
|
||||||
// load the Steps from the rest of the BMS files
|
// load the Steps from the rest of the BMS files
|
||||||
@@ -241,53 +239,93 @@ bool Song::LoadSongInfoFromBMSDir( CString sDir )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CStdioFile file;
|
||||||
BmsFile bms( sBMSFilePath );
|
if( !file.Open( sBMSFilePath, CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
bms.ReadFile();
|
|
||||||
|
|
||||||
CMapStringToString &mapValues = bms.mapValues;
|
|
||||||
|
|
||||||
POSITION pos = mapValues.GetStartPosition();
|
|
||||||
while( pos != NULL )
|
|
||||||
{
|
{
|
||||||
CString value_name;
|
RageError( ssprintf("Failed to open %s.", sBMSFilePath) );
|
||||||
CString data_string;
|
return false;
|
||||||
CStringArray data_array;
|
}
|
||||||
mapValues.GetNextAssoc( pos, value_name, data_string );
|
|
||||||
split(data_string, ":", data_array);
|
CString line;
|
||||||
|
while( file.ReadString(line) ) // foreach line
|
||||||
|
{
|
||||||
|
CString value_name; // fill these in
|
||||||
|
CString value_data;
|
||||||
|
|
||||||
|
// BMS value names can be separated by a space or a colon.
|
||||||
|
int iIndexOfFirstColon = line.Find( ":" );
|
||||||
|
int iIndexOfFirstSpace = line.Find( " " );
|
||||||
|
|
||||||
|
if( iIndexOfFirstColon == -1 )
|
||||||
|
iIndexOfFirstColon = 10000;
|
||||||
|
if( iIndexOfFirstSpace == -1 )
|
||||||
|
iIndexOfFirstSpace = 10000;
|
||||||
|
|
||||||
|
int iIndexOfSeparator = min( iIndexOfFirstSpace, iIndexOfFirstColon );
|
||||||
|
|
||||||
|
if( iIndexOfSeparator != 10000 )
|
||||||
|
{
|
||||||
|
value_name = line.Mid( 0, iIndexOfSeparator );
|
||||||
|
value_data = line; // the rest
|
||||||
|
value_data.Delete(0,iIndexOfSeparator+1);
|
||||||
|
}
|
||||||
|
else // no separator
|
||||||
|
{
|
||||||
|
value_name = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
value_name.MakeLower();
|
||||||
|
|
||||||
|
|
||||||
// handle the data
|
// handle the data
|
||||||
if( value_name == "#GENRE" )
|
if( -1 != value_name.Find("#genre") )
|
||||||
m_sCreator = data_array[0];
|
{
|
||||||
else if( value_name == "#TITLE" ) {
|
m_sCreator = value_data;
|
||||||
m_sTitle = data_array[0];
|
|
||||||
// strip steps type out of description leaving only song title (looks like 'Music <BASIC>')
|
|
||||||
int iPosBracket = m_sTitle.Find( " <" );
|
|
||||||
if( iPosBracket != -1 )
|
|
||||||
m_sTitle = m_sTitle.Left( iPosBracket );
|
|
||||||
}
|
}
|
||||||
else if( value_name == "#ARTIST" )
|
else if( -1 != value_name.Find("#title") )
|
||||||
m_sArtist = data_array[0];
|
{
|
||||||
else if( value_name == "#BPM" ) {
|
m_sTitle = value_data;
|
||||||
|
// strip steps type out of description leaving only song title (looks like 'B4U <BASIC>')
|
||||||
|
m_sTitle.Replace( "(ANOTHER)", "" );
|
||||||
|
m_sTitle.Replace( "(BASIC)", "" );
|
||||||
|
m_sTitle.Replace( "(MANIAC)", "" );
|
||||||
|
m_sTitle.Replace( "<ANOTHER>", "" );
|
||||||
|
m_sTitle.Replace( "<BASIC>", "" );
|
||||||
|
m_sTitle.Replace( "<MANIAC>", "" );
|
||||||
|
|
||||||
|
}
|
||||||
|
else if( -1 != value_name.Find("#artist") )
|
||||||
|
{
|
||||||
|
m_sArtist = value_data;
|
||||||
|
}
|
||||||
|
else if( -1 != value_name.Find("#bpm") )
|
||||||
|
{
|
||||||
BPMSegment new_seg;
|
BPMSegment new_seg;
|
||||||
new_seg.m_fStartBeat = 0;
|
new_seg.m_fStartBeat = 0;
|
||||||
new_seg.m_fBPM = (float)atof( data_array[0] );
|
new_seg.m_fBPM = (float)atof( value_data );
|
||||||
|
|
||||||
// add, then sort
|
// add, then sort
|
||||||
m_BPMSegments.Add( new_seg );
|
m_BPMSegments.Add( new_seg );
|
||||||
SortBPMSegmentsArray( m_BPMSegments );
|
SortBPMSegmentsArray( m_BPMSegments );
|
||||||
RageLog( "Inserting new BPM change at beat %f, BPM %f", new_seg.m_fStartBeat, new_seg.m_fBPM );
|
RageLog( "Inserting new BPM change at beat %f, BPM %f", new_seg.m_fStartBeat, new_seg.m_fBPM );
|
||||||
}
|
}
|
||||||
else if( value_name == "#BackBMP" || value_name == "#backBMP")
|
else if( -1 != value_name.Find("#backbmp") )
|
||||||
m_sBackgroundPath = m_sSongDir + data_array[0];
|
{
|
||||||
else if( value_name == "#WAV99" )
|
m_sBackgroundPath = m_sSongDir + value_data;
|
||||||
m_sMusicPath = m_sSongDir + data_array[0];
|
}
|
||||||
else if( value_name.GetLength() == 6 ) // this is probably step or offset data. Looks like "#00705"
|
else if( -1 != value_name.Find("#wav") )
|
||||||
|
{
|
||||||
|
m_sMusicPath = m_sSongDir + value_data;
|
||||||
|
}
|
||||||
|
else if( value_name.Left(1) == "#"
|
||||||
|
&& IsAnInt( value_name.Mid(1,3) )
|
||||||
|
&& IsAnInt( value_name.Mid(4,2) ) ) // this is step or offset data. Looks like "#00705"
|
||||||
{
|
{
|
||||||
int iMeasureNo = atoi( value_name.Mid(1,3) );
|
int iMeasureNo = atoi( value_name.Mid(1,3) );
|
||||||
int iTrackNum = atoi( value_name.Mid(4,2) );
|
int iTrackNum = atoi( value_name.Mid(4,2) );
|
||||||
|
|
||||||
CString sNoteData = data_array[0];
|
CString sNoteData = value_data;
|
||||||
CArray<int, int> arrayNotes;
|
CArray<int, int> arrayNotes;
|
||||||
|
|
||||||
for( int i=0; i<sNoteData.GetLength(); i+=2 )
|
for( int i=0; i<sNoteData.GetLength(); i+=2 )
|
||||||
@@ -389,7 +427,7 @@ bool Song::LoadSongInfoFromDWIFile( CString sPath )
|
|||||||
|
|
||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( GetSongFilePath(), CFile::modeRead ) )
|
if( !file.Open( GetSongFilePath(), CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
RageError( ssprintf("Error opening DWI file '%s'.", GetSongFilePath()) );
|
RageError( ssprintf("Error opening DWI file '%s'.", GetSongFilePath()) );
|
||||||
|
|
||||||
|
|
||||||
@@ -608,30 +646,11 @@ void Song::GetStepsThatMatchGameMode( GameMode gm, CArray<Steps*, Steps*&>& arra
|
|||||||
for( int i=0; i<arraySteps.GetSize(); i++ ) // for each of the Song's Steps
|
for( int i=0; i<arraySteps.GetSize(); i++ ) // for each of the Song's Steps
|
||||||
{
|
{
|
||||||
Steps* pCurrentSteps = &arraySteps[i];
|
Steps* pCurrentSteps = &arraySteps[i];
|
||||||
Steps::StepsMode sm = pCurrentSteps->m_StepsMode;
|
|
||||||
|
|
||||||
switch( gm ) // different logic for different game modes
|
if( gm == pCurrentSteps->m_GameMode // if the current GameModes matches the Steps's GameMode
|
||||||
|
|| (gm == MODE_VERSUS && pCurrentSteps->m_GameMode == MODE_SINGLE) )
|
||||||
{
|
{
|
||||||
case MODE_SINGLE:
|
|
||||||
if( sm == Steps::SMsingle4 )
|
|
||||||
arrayAddTo.Add( pCurrentSteps );
|
arrayAddTo.Add( pCurrentSteps );
|
||||||
break;
|
|
||||||
case MODE_SOLO:
|
|
||||||
if( sm == Steps::SMsingle6 )
|
|
||||||
arrayAddTo.Add( pCurrentSteps );
|
|
||||||
break;
|
|
||||||
case MODE_VERSUS:
|
|
||||||
if( sm == Steps::SMsingle4 )
|
|
||||||
arrayAddTo.Add( pCurrentSteps );
|
|
||||||
break;
|
|
||||||
case MODE_COUPLE:
|
|
||||||
if( sm == Steps::SMcouple || sm == Steps::SMbattle )
|
|
||||||
arrayAddTo.Add( pCurrentSteps );
|
|
||||||
break;
|
|
||||||
case MODE_DOUBLE:
|
|
||||||
if( sm == Steps::SMdouble4 )
|
|
||||||
arrayAddTo.Add( pCurrentSteps );
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,13 @@ END
|
|||||||
|
|
||||||
#endif // !_MAC
|
#endif // !_MAC
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Bitmap
|
||||||
|
//
|
||||||
|
|
||||||
|
SPLASH BITMAP DISCARDABLE "splash.bmp"
|
||||||
#endif // English (U.S.) resources
|
#endif // English (U.S.) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
+75
-14
@@ -298,30 +298,50 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
HRESULT CreateObjects( HWND hWnd )
|
HRESULT CreateObjects( HWND hWnd )
|
||||||
{
|
{
|
||||||
|
////////////////////////////////
|
||||||
|
// Draw a splash bitmap so the user isn't looking at a black screen
|
||||||
|
////////////////////////////////
|
||||||
|
HBITMAP hSplashBitmap = (HBITMAP)LoadImage(
|
||||||
|
GetModuleHandle( NULL ),
|
||||||
|
TEXT("SPLASH"),
|
||||||
|
IMAGE_BITMAP,
|
||||||
|
0, 0, LR_CREATEDIBSECTION );
|
||||||
|
BITMAP bmp;
|
||||||
|
RECT rc;
|
||||||
|
GetClientRect( hWnd, &rc );
|
||||||
|
|
||||||
|
// Display the splash bitmap in the window
|
||||||
|
HDC hDCWindow = GetDC( hWnd );
|
||||||
|
HDC hDCImage = CreateCompatibleDC( NULL );
|
||||||
|
SelectObject( hDCImage, hSplashBitmap );
|
||||||
|
GetObject( hSplashBitmap, sizeof(bmp), &bmp );
|
||||||
|
StretchBlt( hDCWindow, 0, 0, rc.right, rc.bottom,
|
||||||
|
hDCImage, 0, 0,
|
||||||
|
bmp.bmWidth, bmp.bmHeight, SRCCOPY );
|
||||||
|
DeleteDC( hDCImage );
|
||||||
|
ReleaseDC( hWnd, hDCWindow );
|
||||||
|
|
||||||
|
// Delete the bitmap
|
||||||
|
DeleteObject( hSplashBitmap );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Create game objects
|
||||||
|
/////////////////////////////////
|
||||||
srand( (unsigned)time(NULL) ); // seed number generator
|
srand( (unsigned)time(NULL) ); // seed number generator
|
||||||
|
|
||||||
RageLogStart();
|
RageLogStart();
|
||||||
|
|
||||||
SCREEN = new RageScreen( hWnd, true, SCREEN_WIDTH, SCREEN_HEIGHT, 16 );
|
|
||||||
TM = new RageTextureManager( SCREEN );
|
|
||||||
THEME = new ThemeManager;
|
|
||||||
WM = new WindowManager;
|
|
||||||
|
|
||||||
// throw something up on the screen while the game resources are loading
|
|
||||||
WM->SetNewWindow( new WindowLoading );
|
|
||||||
Render();
|
|
||||||
ShowFrame();
|
|
||||||
|
|
||||||
// this stuff takes a long time...
|
|
||||||
SOUND = new RageSound( hWnd );
|
SOUND = new RageSound( hWnd );
|
||||||
MUSIC = new RageSoundStream;
|
MUSIC = new RageSoundStream;
|
||||||
INPUT = new RageInput( hWnd );
|
INPUT = new RageInput( hWnd );
|
||||||
GAMEINFO= new GameInfo;
|
GAMEINFO= new GameInfo;
|
||||||
|
SCREEN = new RageScreen( hWnd );
|
||||||
|
|
||||||
BringWindowToTop( hWnd );
|
BringWindowToTop( hWnd );
|
||||||
SetForegroundWindow( hWnd );
|
SetForegroundWindow( hWnd );
|
||||||
|
|
||||||
|
// switch the screen resolution according to user's prefs
|
||||||
GameOptions &go = GAMEINFO->m_GameOptions;
|
GameOptions &go = GAMEINFO->m_GameOptions;
|
||||||
SwitchDisplayMode(
|
SwitchDisplayMode(
|
||||||
go.m_bWindowed,
|
go.m_bWindowed,
|
||||||
@@ -330,7 +350,12 @@ HRESULT CreateObjects( HWND hWnd )
|
|||||||
go.m_iDisplayColor
|
go.m_iDisplayColor
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TM = new RageTextureManager( SCREEN );
|
||||||
|
THEME = new ThemeManager;
|
||||||
|
WM = new WindowManager;
|
||||||
|
|
||||||
|
|
||||||
|
//WM->SetNewWindow( new WindowLoading );
|
||||||
//WM->SetNewWindow( new WindowSandbox );
|
//WM->SetNewWindow( new WindowSandbox );
|
||||||
//WM->SetNewWindow( new WindowMenuResults );
|
//WM->SetNewWindow( new WindowMenuResults );
|
||||||
//WM->SetNewWindow( new WindowPlayerOptions );
|
//WM->SetNewWindow( new WindowPlayerOptions );
|
||||||
@@ -538,17 +563,53 @@ BOOL SwitchDisplayMode( BOOL bWindowed, DWORD dwWidth, DWORD dwHeight, DWORD dwB
|
|||||||
{
|
{
|
||||||
InvalidateObjects();
|
InvalidateObjects();
|
||||||
|
|
||||||
BOOL bResult = SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP );
|
// If the requested resolution doesn't work, keep switching until we find one that does.
|
||||||
|
|
||||||
|
if( !SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP ) )
|
||||||
|
{
|
||||||
|
// We failed. Try full screen with same params.
|
||||||
|
bWindowed = false;
|
||||||
|
if( !SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP ) )
|
||||||
|
{
|
||||||
|
// Failed again. Try 16 BPP
|
||||||
|
dwBPP = 16;
|
||||||
|
if( !SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP ) )
|
||||||
|
{
|
||||||
|
// Failed again. Try 640x480
|
||||||
|
dwWidth = 640;
|
||||||
|
dwHeight = 480;
|
||||||
|
if( !SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP ) )
|
||||||
|
{
|
||||||
|
// Failed again. Try 640x480
|
||||||
|
dwWidth = 320;
|
||||||
|
dwHeight = 240;
|
||||||
|
if( !SCREEN->SwitchDisplayMode( bWindowed, dwWidth, dwHeight, dwBPP ) )
|
||||||
|
{
|
||||||
|
RageError( "Tried every possible display mode, and couldn't change to any of them." );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
RestoreObjects();
|
RestoreObjects();
|
||||||
|
|
||||||
if( GAMEINFO )
|
if( GAMEINFO )
|
||||||
{
|
{
|
||||||
GAMEINFO->m_GameOptions.m_bWindowed = bWindowed;
|
GAMEINFO->m_GameOptions.m_bWindowed = bWindowed;
|
||||||
|
GAMEINFO->m_GameOptions.m_iDisplayColor = dwBPP;
|
||||||
|
GAMEINFO->m_GameOptions.m_iResolution = dwWidth;
|
||||||
GAMEINFO->SaveConfigToDisk();
|
GAMEINFO->SaveConfigToDisk();
|
||||||
}
|
}
|
||||||
|
|
||||||
return bResult;
|
if( WM )
|
||||||
|
{
|
||||||
|
WM->SetSystemMessage( ssprintf("%s - %ux%u - %u bits", bWindowed ? "Windowed" : "FullScreen", dwWidth, dwHeight, dwBPP) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -743,5 +743,9 @@ SOURCE=.\TipDisplay.cpp
|
|||||||
SOURCE=.\TipDisplay.h
|
SOURCE=.\TipDisplay.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\splash.bmp
|
||||||
|
# End Source File
|
||||||
# End Target
|
# End Target
|
||||||
# End Project
|
# End Project
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ void TransitionStarWipe::RenderPrimitives()
|
|||||||
int x_rect_leading_edge = x + ( bIsAnEvenRow ? - m_iStarWidth/2 : m_iStarWidth/2 );
|
int x_rect_leading_edge = x + ( bIsAnEvenRow ? - m_iStarWidth/2 : m_iStarWidth/2 );
|
||||||
int x_rect_trailing_edge = ( bIsAnEvenRow ? 0 : SCREEN_WIDTH );
|
int x_rect_trailing_edge = ( bIsAnEvenRow ? 0 : SCREEN_WIDTH );
|
||||||
int y_top = y - m_iStarHeight/2;
|
int y_top = y - m_iStarHeight/2;
|
||||||
int y_bot = y + m_iStarHeight/2;
|
int y_bot = y + m_iStarHeight/2+1;
|
||||||
m_rect.StretchTo( CRect(x_rect_leading_edge, y_top, x_rect_trailing_edge, y_bot) );
|
m_rect.StretchTo( CRect(x_rect_leading_edge, y_top, x_rect_trailing_edge, y_bot) );
|
||||||
m_rect.SetDiffuseColor( D3DCOLOR_ARGB(255,0,0,0) );
|
m_rect.SetDiffuseColor( D3DCOLOR_ARGB(255,0,0,0) );
|
||||||
m_rect.Draw();
|
m_rect.Draw();
|
||||||
|
|||||||
Reference in New Issue
Block a user