Fixed preferred difficulty on select music screen and fixed transforms for TurnTypes

This commit is contained in:
Chris Danford
2002-08-01 20:30:40 +00:00
parent 4c12a0921b
commit 2d4eb7baff
16 changed files with 248 additions and 211 deletions
+16
View File
@@ -25,6 +25,22 @@ BannerWithFrame::BannerWithFrame()
this->AddSubActor( &m_Banner );
this->AddSubActor( &m_sprBannerFrame );
for( int p=0; p<NUM_PLAYERS; p++ )
{
float fX = (m_sprBannerFrame.GetUnzoomedWidth()/2-26) * (p==PLAYER_1 ? -1 : 1 );
float fY = m_sprBannerFrame.GetUnzoomedHeight()/2-26;
m_Icon[p].SetX( fX );
m_Icon[p].SetY( fY );
this->AddSubActor( &m_Icon[p] );
}
}
void BannerWithFrame::LoadFromSongAndNotes( Song* pSong, Notes* pNotes[NUM_PLAYERS] )
{
LoadFromSong( pSong );
for( int p=0; p<NUM_PLAYERS; p++ )
m_Icon[p].SetFromNotes( pNotes[p] ); // NULL pNotes menas icon is hidden
}
void BannerWithFrame::LoadFromSong( Song* pSong )
+3
View File
@@ -13,6 +13,7 @@
#include "ActorFrame.h"
#include "Sprite.h"
#include "Banner.h"
#include "DifficultyIcon.h"
class Song;
class Course;
@@ -21,6 +22,7 @@ class BannerWithFrame : public ActorFrame
public:
BannerWithFrame();
void LoadFromSongAndNotes( Song* pSong, Notes* pNotes[NUM_PLAYERS] );
void LoadFromSong( Song* pSong );
void LoadFromGroup( CString sGroupName );
void LoadFromCourse( Course* pCourse );
@@ -29,4 +31,5 @@ protected:
Sprite m_sprBannerFrame;
Banner m_Banner;
DifficultyIcon m_Icon[NUM_PLAYERS];
};
+10 -1
View File
@@ -98,6 +98,15 @@ void Course::CreateEndlessCourseFromGroupAndDifficultyClass( CString sGroupName,
m_bRepeat = true;
m_bRandomize = true;
m_iLives = -1;
CStringArray asPossibleBannerPaths;
GetDirListing( "Songs\\" + sGroupName + "\\banner.png", asPossibleBannerPaths, false, true );
GetDirListing( "Songs\\" + sGroupName + "\\banner.jpg", asPossibleBannerPaths, false, true );
GetDirListing( "Songs\\" + sGroupName + "\\banner.gif", asPossibleBannerPaths, false, true );
GetDirListing( "Songs\\" + sGroupName + "\\banner.bmp", asPossibleBannerPaths, false, true );
if( asPossibleBannerPaths.GetSize() > 0 )
m_sBannerPath = asPossibleBannerPaths[0];
CString sShortGroupName = SONGMAN->ShortenGroupName( sGroupName );
m_sName = sShortGroupName + " ";
@@ -136,7 +145,7 @@ Notes* Course::GetNotesForStage( int iStage )
for( i=0; i<pSong->m_apNotes.GetSize(); i++ )
{
Notes* pNotes = pSong->m_apNotes[i];
if( pNotes->m_DifficultyClass == dc )
if( pNotes->m_DifficultyClass == dc && pNotes->m_NotesType == GAMESTATE->GetCurrentStyleDef()->m_NotesType )
return pNotes;
}
+4 -2
View File
@@ -197,7 +197,9 @@ void GameDef::MenuInputToGameInput( MenuInput MenuI, GameInput GameIout[4] )
for( int i=0; i<iNumSidesUsing; i++ )
{
for( int j=0; j<iNumButtonsUsing; j++ )
GameIout[i*2+j].controller = controller[i];
GameIout[i*2+j].button = button[j];
{
GameIout[i*2+j].controller = controller[i];
GameIout[i*2+j].button = button[j];
}
}
}
+1 -2
View File
@@ -37,8 +37,6 @@ LifeMeterBattery::LifeMeterBattery()
m_soundGainLife.Load( THEME->GetPathTo(SOUND_GAMEPLAY_ONI_GAIN_LIFE) );
m_soundLoseLife.Load( THEME->GetPathTo(SOUND_GAMEPLAY_ONI_LOSE_LIFE) );
Refresh();
}
void LifeMeterBattery::Load( PlayerNumber pn )
@@ -81,6 +79,7 @@ void LifeMeterBattery::Load( PlayerNumber pn )
m_textPercent.SetDiffuseColor( PlayerToColor(pn) ); // light blue
Refresh();
}
void LifeMeterBattery::SongEnded()
+21 -17
View File
@@ -565,30 +565,34 @@ void MusicWheel::BuildWheelItemDatas( CArray<WheelItemData, WheelItemData&> &arr
}
break;
case PLAY_MODE_ONI:
{
CArray<Course*,Course*> apCourses;
for( int i=0; i<SONGMAN->m_aOniCourses.GetSize(); i++ )
apCourses.Add( &SONGMAN->m_aOniCourses[i] );
SortCoursePointerArrayByDifficulty( apCourses );
for( int c=0; c<apCourses.GetSize(); c++ ) // foreach course
{
Course* pCourse = apCourses[c];
arrayWheelItemDatas.Add( WheelItemData(TYPE_COURSE, NULL, "", pCourse, pCourse->GetColor()) );
}
}
break;
case PLAY_MODE_ENDLESS:
{
CArray<Course*,Course*> apCourses;
for( int i=0; i<SONGMAN->m_aEndlessCourses.GetSize(); i++ )
apCourses.Add( &SONGMAN->m_aEndlessCourses[i] );
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_ONI:
for( int i=0; i<SONGMAN->m_aOniCourses.GetSize(); i++ )
apCourses.Add( &SONGMAN->m_aOniCourses[i] );
SortCoursePointerArrayByDifficulty( apCourses );
break;
case PLAY_MODE_ENDLESS:
for( int i=0; i<SONGMAN->m_aEndlessCourses.GetSize(); i++ )
apCourses.Add( &SONGMAN->m_aEndlessCourses[i] );
break;
}
for( int c=0; c<apCourses.GetSize(); c++ ) // foreach course
{
Course* pCourse = apCourses[c];
arrayWheelItemDatas.Add( WheelItemData(TYPE_COURSE, NULL, "", pCourse, pCourse->GetColor()) );
// check that this course has at least one song playable in the current style
CArray<Song*,Song*> apSongs;
CArray<Notes*,Notes*> apNotes;
CStringArray asModifiers;
pCourse->GetSongAndNotesForCurrentStyle( apSongs, apNotes, asModifiers );
if( apNotes.GetSize() > 0 )
arrayWheelItemDatas.Add( WheelItemData(TYPE_COURSE, NULL, "", pCourse, pCourse->GetColor()) );
}
}
break;
+79 -108
View File
@@ -18,6 +18,7 @@
#include "PrefsManager.h"
#include "GameConstantsAndTypes.h"
#include "RageException.h"
#include "GameState.h"
@@ -507,93 +508,88 @@ void NoteData::RemoveHoldNotes()
void NoteData::Turn( PlayerOptions::TurnType tt )
{
// transform the NoteData
int oldColToNewCol[12][2]; // 0 is old Step, 1 is new Step mapping
oldColToNewCol[0][0] = 0; oldColToNewCol[0][1] = 0;
oldColToNewCol[1][0] = 1; oldColToNewCol[1][1] = 1;
oldColToNewCol[2][0] = 2; oldColToNewCol[2][1] = 2;
oldColToNewCol[3][0] = 3; oldColToNewCol[3][1] = 3;
oldColToNewCol[4][0] = 4; oldColToNewCol[4][1] = 4;
oldColToNewCol[5][0] = 5; oldColToNewCol[5][1] = 5;
oldColToNewCol[6][0] = 6; oldColToNewCol[6][1] = 6;
oldColToNewCol[7][0] = 7; oldColToNewCol[7][1] = 7;
oldColToNewCol[8][0] = 8; oldColToNewCol[8][1] = 8;
oldColToNewCol[9][0] = 9; oldColToNewCol[9][1] = 9;
oldColToNewCol[10][0]= 10; oldColToNewCol[10][1]= 10;
oldColToNewCol[11][0]= 11; oldColToNewCol[11][1]= 11;
int iTakeFromTrack[MAX_NOTE_TRACKS]; // New track "t" will take from old track iTakeFromTrack[t]
switch( tt )
{
case PlayerOptions::TURN_NONE:
break;
return; // nothing to do
case PlayerOptions::TURN_MIRROR:
oldColToNewCol[0][1] = 3;
oldColToNewCol[2][1] = 2;
oldColToNewCol[3][1] = 1;
oldColToNewCol[5][1] = 0;
oldColToNewCol[6][1] = 7;
oldColToNewCol[8][1] = 6;
oldColToNewCol[9][1] = 5;
oldColToNewCol[11][1]= 4;
for( int t=0; t<m_iNumTracks; t++ )
iTakeFromTrack[t] = m_iNumTracks-t-1;
break;
case PlayerOptions::TURN_LEFT:
oldColToNewCol[0][1] = 1;
oldColToNewCol[2][1] = 3;
oldColToNewCol[3][1] = 0;
oldColToNewCol[5][1] = 2;
oldColToNewCol[6][1] = 5;
oldColToNewCol[8][1] = 7;
oldColToNewCol[9][1] = 4;
oldColToNewCol[11][1]= 6;
break;
case PlayerOptions::TURN_RIGHT:
oldColToNewCol[0][1] = 3;
oldColToNewCol[2][1] = 0;
oldColToNewCol[3][1] = 4;
oldColToNewCol[5][1] = 1;
oldColToNewCol[6][1] = 6;
oldColToNewCol[8][1] = 4;
oldColToNewCol[9][1] = 7;
oldColToNewCol[11][1]= 5;
case PlayerOptions::TURN_RIGHT: // HACK: TurnRight does the same thing as TurnLeft. I'll fix this later...
// Chris: Handling each NotesType case is a terrible way to do this, but oh well...
switch( GAMESTATE->GetCurrentStyleDef()->m_NotesType )
{
case NOTES_TYPE_DANCE_SINGLE:
case NOTES_TYPE_DANCE_DOUBLE:
case NOTES_TYPE_DANCE_COUPLE:
iTakeFromTrack[0] = 2;
iTakeFromTrack[1] = 0;
iTakeFromTrack[2] = 3;
iTakeFromTrack[3] = 1;
iTakeFromTrack[4] = 6;
iTakeFromTrack[5] = 4;
iTakeFromTrack[6] = 7;
iTakeFromTrack[7] = 5;
break;
case NOTES_TYPE_DANCE_SOLO:
iTakeFromTrack[0] = 5;
iTakeFromTrack[1] = 4;
iTakeFromTrack[2] = 0;
iTakeFromTrack[3] = 3;
iTakeFromTrack[4] = 1;
iTakeFromTrack[5] = 2;
break;
case NOTES_TYPE_PUMP_SINGLE:
case NOTES_TYPE_PUMP_DOUBLE:
iTakeFromTrack[0] = 1;
iTakeFromTrack[1] = 3;
iTakeFromTrack[2] = 2;
iTakeFromTrack[3] = 4;
iTakeFromTrack[4] = 0;
iTakeFromTrack[5] = 6;
iTakeFromTrack[6] = 8;
iTakeFromTrack[7] = 7;
iTakeFromTrack[8] = 9;
iTakeFromTrack[9] = 5;
break;
case NOTES_TYPE_EZ2_SINGLE:
case NOTES_TYPE_EZ2_SINGLE_HARD:
case NOTES_TYPE_EZ2_DOUBLE:
case NOTES_TYPE_EZ2_REAL:
case NOTES_TYPE_EZ2_SINGLE_VERSUS:
case NOTES_TYPE_EZ2_SINGLE_HARD_VERSUS:
case NOTES_TYPE_EZ2_REAL_VERSUS:
// identity transform. What should we do here?
iTakeFromTrack[0] = 0;
iTakeFromTrack[1] = 1;
iTakeFromTrack[2] = 2;
iTakeFromTrack[3] = 3;
iTakeFromTrack[4] = 4;
iTakeFromTrack[5] = 5;
iTakeFromTrack[6] = 6;
iTakeFromTrack[7] = 7;
iTakeFromTrack[8] = 8;
iTakeFromTrack[9] = 9;
iTakeFromTrack[10]= 10;
iTakeFromTrack[11]= 11;
break;
}
break;
case PlayerOptions::TURN_SHUFFLE:
bool bAlreadyMapped[12];
for( int i=0; i<12; i++ )
bAlreadyMapped[i] = false;
CArray<int,int> aiTracksLeftToMap;
for( int t=0; t<m_iNumTracks; t++ )
aiTracksLeftToMap.Add( t );
// hack: don't shuffle the Up+... NoteData
bAlreadyMapped[1] = true;
bAlreadyMapped[4] = true;
bAlreadyMapped[7] = true;
bAlreadyMapped[10] = true;
// shuffle left side
for( i=0; i<6; i++ )
for( int t=0; t<m_iNumTracks; t++ )
{
if( i == 1 || i == 4 )
continue;
int iMapsTo;
do {
iMapsTo = rand()%6;
} while( bAlreadyMapped[iMapsTo] );
bAlreadyMapped[iMapsTo] = true;
oldColToNewCol[i][1] = oldColToNewCol[iMapsTo][0];
}
// shuffle right side
for( i=6; i<12; i++ )
{
if( i == 7 || i == 10 )
continue;
int iMapsTo;
do {
iMapsTo = rand()%6+6;
} while( bAlreadyMapped[iMapsTo] );
bAlreadyMapped[iMapsTo] = true;
oldColToNewCol[i][1] = oldColToNewCol[iMapsTo][0];
int iRandTrackIndex = rand()%aiTracksLeftToMap.GetSize();
int iRandTrack = aiTracksLeftToMap[iRandTrackIndex];
aiTracksLeftToMap.RemoveAt( iRandTrackIndex );
iTakeFromTrack[t] = iRandTrack;
}
break;
}
@@ -601,40 +597,15 @@ void NoteData::Turn( PlayerOptions::TurnType tt )
NoteData tempNoteData; // write into here as we tranform
tempNoteData.m_iNumTracks = m_iNumTracks;
// transform m_TapNotes
for( int i=0; i<MAX_TAP_NOTE_ROWS; i++ )
{
for( int j=0; j<12; j++ )
{
int iOldCol = oldColToNewCol[j][0];
int iNewCol = oldColToNewCol[j][1];
tempNoteData.m_TapNotes[iNewCol][i] = m_TapNotes[iOldCol][i];
}
}
this->ConvertHoldNotesTo2sAnd3s();
// transform m_HoldNotes
for( i=0; i<m_iNumHoldNotes; i++ )
{
for( int j=0; j<12; j++ )
{
HoldNote &hn = m_HoldNotes[i];
// transform notes
for( int t=0; t<m_iNumTracks; t++ )
for( int r=0; r<MAX_TAP_NOTE_ROWS; r++ )
tempNoteData.m_TapNotes[t][r] = m_TapNotes[iTakeFromTrack[t]][r];
int iOldCol = oldColToNewCol[j][0];
int iNewCol = oldColToNewCol[j][1];
if( hn.m_iTrack == iOldCol )
{
HoldNote newHN = { iNewCol, hn.m_iStartIndex, hn.m_iEndIndex };
tempNoteData.AddHoldNote( newHN );
}
}
}
//
// copy note data from newData back into this
//
(*this) = tempNoteData;
this->CopyAll( &tempNoteData ); // copy note data from newData back into this
this->Convert2sAnd3sToHoldNotes();
}
void NoteData::MakeLittle()
+6 -2
View File
@@ -29,10 +29,14 @@ ScoreDisplayNormal::ScoreDisplayNormal()
Load( THEME->GetPathTo(FONT_SCORE_NUMBERS) );
TurnShadowOff();
m_fScore = 0;
m_fTrailingScore = 0;
m_fScoreVelocity = 0;
SetScore( 0 );
Update(0);
CString s;
for( int i=0; i<NUM_SCORE_DIGITS; i++ )
s += '0';
SetText( s );
}
+70 -64
View File
@@ -123,10 +123,10 @@ ScreenEdit::ScreenEdit()
GAMESTATE->m_bEditing = true;
m_fBeat = 0.0f;
GAMESTATE->m_fSongBeat = m_fBeat;
GAMESTATE->m_fSongBeat = 0;
m_fTrailingBeat = GAMESTATE->m_fSongBeat;
m_fMusicRate = 1;
GAMESTATE->m_SongOptions.m_fMusicRate = 1;
GAMESTATE->m_PlayerOptions[PLAYER_1].m_fArrowScrollSpeed = 1;
GAMESTATE->m_PlayerOptions[PLAYER_1].m_ColorType = PlayerOptions::COLOR_NOTE;
@@ -208,11 +208,19 @@ void ScreenEdit::Update( float fDeltaTime )
bool bFreeze;
m_pSong->GetBeatAndBPSFromElapsedTime( fPositionSeconds, fSongBeat, fBPS, bFreeze );
// update the global music statistics for other classes to access
GAMESTATE->m_fMusicSeconds = fPositionSeconds;
// GAMESTATE->m_fSongBeat = fSongBeat;
GAMESTATE->m_fCurBPS = fBPS;
GAMESTATE->m_bFreeze = bFreeze;
if( m_EditMode == MODE_RECORDING || m_EditMode == MODE_PLAYING )
{
m_fBeat = fSongBeat;
GAMESTATE->m_fSongBeat = fSongBeat;
if( m_fBeat > m_NoteFieldEdit.m_fEndMarker )
if( GAMESTATE->m_fSongBeat > m_NoteFieldEdit.m_fEndMarker )
{
if( m_EditMode == MODE_RECORDING )
{
@@ -255,12 +263,11 @@ void ScreenEdit::Update( float fDeltaTime )
// Update trailing beat
float fDelta = m_fBeat - GAMESTATE->m_fSongBeat;
float fDelta = GAMESTATE->m_fSongBeat - m_fTrailingBeat;
if( fabsf(fDelta) < 0.01 )
{
GAMESTATE->m_fSongBeat = m_fBeat; // snap
m_fTrailingBeat = GAMESTATE->m_fSongBeat; // snap
}
else
{
@@ -268,10 +275,10 @@ void ScreenEdit::Update( float fDeltaTime )
float fMoveDelta = fSign*fDeltaTime*40;
if( fabsf(fMoveDelta) > fabsf(fDelta) )
fMoveDelta = fDelta;
GAMESTATE->m_fSongBeat += fMoveDelta;
m_fTrailingBeat += fMoveDelta;
if( fabsf(fDelta) > 10 )
GAMESTATE->m_fSongBeat += fDelta * fDeltaTime*5;
m_fTrailingBeat += fDelta * fDeltaTime*5;
}
@@ -285,7 +292,7 @@ void ScreenEdit::Update( float fDeltaTime )
m_NoteFieldEdit.Update( fDeltaTime );
int iIndexNow = BeatToNoteRowNotRounded( m_fBeat );
int iIndexNow = BeatToNoteRowNotRounded( GAMESTATE->m_fSongBeat );
CString sNoteType;
@@ -319,9 +326,9 @@ void ScreenEdit::Update( float fDeltaTime )
"MusicOffsetSeconds: %.2f\n"
"Preview start: %.2f, length = %.2f\n",
sNoteType,
m_fBeat,
GAMESTATE->m_fSongBeat,
m_NoteFieldEdit.m_fBeginMarker, m_NoteFieldEdit.m_fEndMarker,
m_fMusicRate,
GAMESTATE->m_SongOptions.m_fMusicRate,
DifficultyClassToString( m_pNotes->m_DifficultyClass ),
GAMESTATE->m_pCurNotes[PLAYER_1] ? GAMESTATE->m_pCurNotes[PLAYER_1]->m_sDescription : "no description",
iNumTapNotes, iNumHoldNotes,
@@ -337,7 +344,13 @@ void ScreenEdit::DrawPrimitives()
m_GranularityIndicator.Draw();
m_GrayArrowRowEdit.Draw();
m_textHelp.Draw();
// HACK: Make NoteFieldEdit draw using the trailing beat
float fSongBeat = GAMESTATE->m_fSongBeat; // save song beat
GAMESTATE->m_fSongBeat = m_fTrailingBeat; // put trailing beat in effect
m_NoteFieldEdit.Draw();
GAMESTATE->m_fSongBeat = fSongBeat; // restore real song beat
m_textInfo.Draw();
m_Fade.Draw();
@@ -397,7 +410,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
break; // We only care about first presses
int iCol = DeviceI.button - DIK_1;
const int iNoteIndex = BeatToNoteRow( m_fBeat );
const int iNoteIndex = BeatToNoteRow( GAMESTATE->m_fSongBeat );
if( iCol >= m_NoteFieldEdit.m_iNumTracks ) // this button is not in the range of columns for this StyleDef
break;
@@ -471,8 +484,8 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
fBeatsToMove *= -1;
}
const int iStartIndex = BeatToNoteRow(m_fBeat);
const int iEndIndex = BeatToNoteRow(m_fBeat + fBeatsToMove);
const int iStartIndex = BeatToNoteRow(GAMESTATE->m_fSongBeat);
const int iEndIndex = BeatToNoteRow(GAMESTATE->m_fSongBeat + fBeatsToMove);
// check to see if they're holding a button
for( int col=0; col<m_NoteFieldEdit.m_iNumTracks && col<=10; col++ )
@@ -491,18 +504,18 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
}
}
m_fBeat += fBeatsToMove;
m_fBeat = clamp( m_fBeat, 0, MAX_BEATS-1 );
m_fBeat = froundf( m_fBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
GAMESTATE->m_fSongBeat += fBeatsToMove;
GAMESTATE->m_fSongBeat = clamp( GAMESTATE->m_fSongBeat, 0, MAX_BEATS-1 );
GAMESTATE->m_fSongBeat = froundf( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
m_soundChangeLine.Play();
}
break;
case DIK_HOME:
m_fBeat = 0;
GAMESTATE->m_fSongBeat = 0;
m_soundChangeLine.Play();
break;
case DIK_END:
m_fBeat = m_NoteFieldEdit.GetLastBeat();
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.GetLastBeat();
m_soundChangeLine.Play();
break;
case DIK_RIGHT:
@@ -514,26 +527,26 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
OnSnapModeChange();
break;
case DIK_RETURN:
if( m_NoteFieldEdit.m_fEndMarker != -1 && m_fBeat > m_NoteFieldEdit.m_fEndMarker )
if( m_NoteFieldEdit.m_fEndMarker != -1 && GAMESTATE->m_fSongBeat > m_NoteFieldEdit.m_fEndMarker )
{
// invalid! The begin maker must be placed before the end marker
m_soundInvalid.Play();
}
else
{
m_NoteFieldEdit.m_fBeginMarker = m_fBeat;
m_NoteFieldEdit.m_fBeginMarker = GAMESTATE->m_fSongBeat;
m_soundMarker.Play();
}
break;
case DIK_SPACE:
if( m_NoteFieldEdit.m_fBeginMarker != -1 && m_fBeat < m_NoteFieldEdit.m_fBeginMarker )
if( m_NoteFieldEdit.m_fBeginMarker != -1 && GAMESTATE->m_fSongBeat < m_NoteFieldEdit.m_fBeginMarker )
{
// invalid! The end maker must be placed after the begin marker
m_soundInvalid.Play();
}
else
{
m_NoteFieldEdit.m_fEndMarker = m_fBeat;
m_NoteFieldEdit.m_fEndMarker = GAMESTATE->m_fSongBeat;
m_soundMarker.Play();
}
break;
@@ -573,8 +586,6 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
break;
}
m_fBeat = m_NoteFieldEdit.m_fBeginMarker;
m_EditMode = MODE_PLAYING;
m_Player.Load( PLAYER_1, (NoteData*)&m_NoteFieldEdit, NULL, NULL );
@@ -582,10 +593,11 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
m_rectRecordBack.BeginTweening( 0.5f );
m_rectRecordBack.SetTweenDiffuseColor( D3DXCOLOR(0,0,0,0.5f) );
float fElapsedSeconds = max( 0, m_pSong->GetElapsedTimeFromBeat(m_fBeat) );
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.m_fBeginMarker;
float fElapsedSeconds = max( 0, m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) );
m_soundMusic.SetPositionSeconds( fElapsedSeconds );
m_soundMusic.Play();
m_soundMusic.SetPlaybackRate( m_fMusicRate );
m_soundMusic.SetPlaybackRate( GAMESTATE->m_SongOptions.m_fMusicRate );
}
break;
case DIK_R:
@@ -596,8 +608,6 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
break;
}
m_fBeat = m_NoteFieldEdit.m_fBeginMarker;
// initialize m_NoteFieldRecord
m_NoteFieldRecord.ClearAll();
m_NoteFieldRecord.m_iNumTracks = m_NoteFieldEdit.m_iNumTracks;
@@ -609,22 +619,23 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
m_rectRecordBack.BeginTweening( 0.5f );
m_rectRecordBack.SetTweenDiffuseColor( D3DXCOLOR(0,0,0,0.5f) );
float fElapsedSeconds = max( 0, m_pSong->GetElapsedTimeFromBeat(m_fBeat) );
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.m_fBeginMarker;
float fElapsedSeconds = max( 0, m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) );
m_soundMusic.SetPositionSeconds( fElapsedSeconds );
m_soundMusic.Play();
m_soundMusic.SetPlaybackRate( m_fMusicRate );
m_soundMusic.SetPlaybackRate( GAMESTATE->m_SongOptions.m_fMusicRate );
}
break;
case DIK_T:
if( m_fMusicRate == 1.0f ) m_fMusicRate = 0.9f;
else if( m_fMusicRate == 0.9f ) m_fMusicRate = 0.8f;
else if( m_fMusicRate == 0.8f ) m_fMusicRate = 0.7f;
else if( m_fMusicRate == 0.7f ) m_fMusicRate = 1.5f;
else if( m_fMusicRate == 1.5f ) m_fMusicRate = 1.4f;
else if( m_fMusicRate == 1.4f ) m_fMusicRate = 1.3f;
else if( m_fMusicRate == 1.3f ) m_fMusicRate = 1.2f;
else if( m_fMusicRate == 1.2f ) m_fMusicRate = 1.1f;
else if( m_fMusicRate == 1.1f ) m_fMusicRate = 1.0f;
if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.0f ) GAMESTATE->m_SongOptions.m_fMusicRate = 0.9f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 0.9f ) GAMESTATE->m_SongOptions.m_fMusicRate = 0.8f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 0.8f ) GAMESTATE->m_SongOptions.m_fMusicRate = 0.7f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 0.7f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.5f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.5f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.4f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.4f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.3f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.3f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.2f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.2f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.1f;
else if( GAMESTATE->m_SongOptions.m_fMusicRate == 1.1f ) GAMESTATE->m_SongOptions.m_fMusicRate = 1.0f;
break;
case DIK_INSERT:
case DIK_DELETE:
@@ -636,12 +647,12 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
switch( DeviceI.button )
{
case DIK_INSERT:
iTakeFromRow = BeatToNoteRow( m_fBeat );
iPasteAtRow = BeatToNoteRow( m_fBeat+1 );
iTakeFromRow = BeatToNoteRow( GAMESTATE->m_fSongBeat );
iPasteAtRow = BeatToNoteRow( GAMESTATE->m_fSongBeat+1 );
break;
case DIK_DELETE:
iTakeFromRow = BeatToNoteRow( m_fBeat+1 );
iPasteAtRow = BeatToNoteRow( m_fBeat );
iTakeFromRow = BeatToNoteRow( GAMESTATE->m_fSongBeat+1 );
iPasteAtRow = BeatToNoteRow( GAMESTATE->m_fSongBeat );
break;
}
temp.CopyRange( &m_NoteFieldEdit, iTakeFromRow, MAX_TAP_NOTE_ROWS );
@@ -680,7 +691,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
{
int iSrcFirstRow = 0;
int iSrcLastRow = BeatToNoteRow( m_Clipboard.GetLastBeat() );
int iDestFirstRow = BeatToNoteRow( m_fBeat );
int iDestFirstRow = BeatToNoteRow( GAMESTATE->m_fSongBeat );
m_NoteFieldEdit.CopyRange( &m_Clipboard, iSrcFirstRow, iSrcLastRow, iDestFirstRow );
}
@@ -696,7 +707,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
case DIK_F7:
case DIK_F8:
{
float fBPM = m_pSong->GetBPMAtBeat( m_fBeat );
float fBPM = m_pSong->GetBPMAtBeat( GAMESTATE->m_fSongBeat );
float fDeltaBPM;
switch( DeviceI.button )
{
@@ -712,13 +723,13 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
float fNewBPM = fBPM + fDeltaBPM;
for( int i=0; i<m_pSong->m_BPMSegments.GetSize(); i++ )
if( m_pSong->m_BPMSegments[i].m_fStartBeat == m_fBeat )
if( m_pSong->m_BPMSegments[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
if( i == m_pSong->m_BPMSegments.GetSize() ) // there is no BPMSegment at the current beat
{
// create a new BPMSegment
m_pSong->AddBPMSegment( BPMSegment(m_fBeat, fNewBPM) );
m_pSong->AddBPMSegment( BPMSegment(GAMESTATE->m_fSongBeat, fNewBPM) );
}
else // BPMSegment being modified is m_BPMSegments[i]
{
@@ -747,7 +758,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
for( int i=0; i<m_pSong->m_StopSegments.GetSize(); i++ )
{
if( m_pSong->m_StopSegments[i].m_fStartBeat == m_fBeat )
if( m_pSong->m_StopSegments[i].m_fStartBeat == GAMESTATE->m_fSongBeat )
break;
}
@@ -755,7 +766,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
{
// create a new StopSegment
if( fFreezeDelta > 0 )
m_pSong->AddStopSegment( StopSegment(m_fBeat, fFreezeDelta) );
m_pSong->AddStopSegment( StopSegment(GAMESTATE->m_fSongBeat, fFreezeDelta) );
}
else // StopSegment being modified is m_StopSegments[i]
{
@@ -848,12 +859,12 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t
iCol = StyleI.col;
int iNoteIndex;
iNoteIndex = BeatToNoteRow( m_fBeat );
iNoteIndex = BeatToNoteRow( GAMESTATE->m_fSongBeat );
if( type == IET_FIRST_PRESS )
{
m_NoteFieldRecord.m_TapNotes[iCol][iNoteIndex] = '1';
m_NoteFieldRecord.SnapToNearestNoteType( NOTE_12TH, NOTE_16TH, max(0,m_fBeat-1), m_fBeat+1);
m_NoteFieldRecord.SnapToNearestNoteType( NOTE_12TH, NOTE_16TH, max(0,GAMESTATE->m_fSongBeat-1), GAMESTATE->m_fSongBeat+1);
m_GrayArrowRowRecord.Step( iCol );
}
else
@@ -876,7 +887,7 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t
newHN.m_iEndIndex = iEndIndex;
m_NoteFieldRecord.AddHoldNote( newHN );
m_NoteFieldRecord.SnapToNearestNoteType( NOTE_12TH, NOTE_16TH, max(0,m_fBeat-2), m_fBeat+2);
m_NoteFieldRecord.SnapToNearestNoteType( NOTE_12TH, NOTE_16TH, max(0,GAMESTATE->m_fSongBeat-2), GAMESTATE->m_fSongBeat+2);
}
break;
}
@@ -895,16 +906,11 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
m_EditMode = MODE_EDITING;
m_soundMusic.Stop();
m_fBeat = froundf( m_fBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
GAMESTATE->m_fSongBeat = froundf( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
break;
}
}
float fSongBeat, fBPS;
bool bFreeze;
m_pSong->GetBeatAndBPSFromElapsedTime( m_soundMusic.GetPositionSeconds(), fSongBeat, fBPS, bFreeze );
const float fMaxBeatDifference = fBPS * PREFSMAN->m_fJudgeWindow / GAMESTATE->m_SongOptions.m_fMusicRate;
switch( StyleI.player )
{
case PLAYER_1:
@@ -928,7 +934,7 @@ void ScreenEdit::TransitionToEditFromRecord()
m_NoteFieldEdit.CopyRange( (NoteData*)&m_NoteFieldRecord, iNoteIndexBegin, iNoteIndexEnd );
m_fBeat = froundf( m_fBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
GAMESTATE->m_fSongBeat = froundf( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_GranularityIndicator.GetSnapMode()) );
}
@@ -952,8 +958,8 @@ void ScreenEdit::OnSnapModeChange()
m_soundChangeSnap.Play();
NoteType nt = m_GranularityIndicator.GetSnapMode();
int iStepIndex = BeatToNoteRow( m_fBeat );
int iStepIndex = BeatToNoteRow( GAMESTATE->m_fSongBeat );
int iElementsPerNoteType = BeatToNoteRow( NoteTypeToBeat(nt) );
int iStepIndexHangover = iStepIndex % iElementsPerNoteType;
m_fBeat -= NoteRowToBeat( iStepIndexHangover );
GAMESTATE->m_fSongBeat -= NoteRowToBeat( iStepIndexHangover );
}
+1 -3
View File
@@ -57,12 +57,10 @@ protected:
BitmapText m_textHelp;
// keep track of where we are and what we're doing
float m_fBeat; // make GAMESTATE->m_fSongBeat approach this
float m_fTrailingBeat; // this approaches GAMESTATE->m_fSongBeat, which is the actual beat
NoteData m_Clipboard;
float m_fMusicRate;
RageSoundSample m_soundChangeLine;
RageSoundSample m_soundChangeSnap;
RageSoundSample m_soundMarker;
+19 -1
View File
@@ -29,6 +29,9 @@
const float BANNER_X = CENTER_X;
const float BANNER_Y = SCREEN_TOP + 100;
const float STAGE_X = BANNER_X;
const float STAGE_Y = BANNER_Y-40;
const float GRADE_X[NUM_PLAYERS] = { CENTER_X-226, CENTER_X+226 };
const float GRADE_Y = BANNER_Y;
@@ -143,9 +146,17 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
switch( m_ResultMode )
{
case RM_ARCADE_STAGE:
m_BannerWithFrame[0].LoadFromSong( GAMESTATE->m_pCurSong );
m_BannerWithFrame[0].LoadFromSongAndNotes( GAMESTATE->m_pCurSong, GAMESTATE->m_pCurNotes );
m_BannerWithFrame[0].SetXY( BANNER_X, BANNER_Y );
this->AddSubActor( &m_BannerWithFrame[0] );
m_textStage.Load( THEME->GetPathTo(FONT_HEADER1) );
m_textStage.TurnShadowOff();
m_textStage.SetXY( STAGE_X, STAGE_Y );
m_textStage.SetZoom( 0.5f );
m_textStage.SetText( GAMESTATE->GetStageText() + " Stage" );
this->AddSubActor( &m_textStage );
break;
case RM_ARCADE_SUMMARY:
{
@@ -560,6 +571,10 @@ void ScreenEvaluation::TweenOnScreen()
m_BannerWithFrame[i].BeginTweeningQueued( MENU_ELEMENTS_TWEEN_TIME, Actor::TWEEN_BIAS_BEGIN );
m_BannerWithFrame[i].SetTweenY( fOriginalY );
}
fOriginalY = m_textStage.GetY();
m_textStage.BeginTweeningQueued( MENU_ELEMENTS_TWEEN_TIME, Actor::TWEEN_BIAS_BEGIN );
m_textStage.SetTweenY( fOriginalY );
for( i=0; i<NUM_JUDGE_LINES; i++ )
{
@@ -642,6 +657,9 @@ void ScreenEvaluation::TweenOffScreen()
m_BannerWithFrame[i].SetTweenZoomY( 0 );
}
m_textStage.BeginTweeningQueued( MENU_ELEMENTS_TWEEN_TIME, Actor::TWEEN_BIAS_END );
m_textStage.SetTweenZoomY( 0 );
for( i=0; i<NUM_JUDGE_LINES; i++ )
{
if (GAMESTATE->m_CurGame != GAME_EZ2)
+1
View File
@@ -47,6 +47,7 @@ protected:
MenuElements m_Menu;
BannerWithFrame m_BannerWithFrame[STAGES_TO_SHOW_IN_SUMMARY];
BitmapText m_textStage;
Sprite m_sprGradeFrame[NUM_PLAYERS];
GradeDisplay m_Grades[NUM_PLAYERS];
+2
View File
@@ -1198,6 +1198,8 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
this->SendScreenMessage( SM_GoToScreenAfterBack, 0 );
else if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )
SCREENMAN->SetNewScreen( new ScreenEvaluation(true) );
else if( GAMESTATE->m_PlayMode == PLAY_MODE_ONI || GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS )
SCREENMAN->SetNewScreen( new ScreenEvaluation(false) );
else
SCREENMAN->SetNewScreen( new ScreenGameOver );
break;
+9 -7
View File
@@ -62,13 +62,15 @@ const CString CREDIT_LINES[] =
"PROGRAMMING:",
"Chris Danford",
"Lord Frieza (Andrew Livy)",
"Dro Kulix",
"Ben Nordstrom",
"Dro Kulix (Peter S. May)",
"Bruno Figueiredo",
"Mantis (Ben Nordstrom)",
"Parasyte (Chris Gomez)",
"dirkthedaring (Michael Patterson)",
"angedelamort (Sauleil Lamarre)",
"Edwin Evans",
"Brian 'Bork' Bugh",
"Jared Roberts",
"nmspaz (Jared Roberts)",
"Elvis314 (Joel Maher)",
"Kefabi (Garth Smith)",
"Pkillah (Playah Killah)",
@@ -83,21 +85,21 @@ const CString CREDIT_LINES[] =
"",
"",
"SPECIAL THANKS TO:",
"DDRLlama",
"DDRManiaX",
"SimWolf",
"DJ DraftHorse",
"Dance With Intensity",
"BeMaNiRuler",
"DDRLlama",
"DDRManiaX",
"Lagged",
"The Melting Pot",
"DDRJamz Global BBS",
"BemaniRuler",
"Brendan Walker",
"Eric 'WaffleKing' Webster",
"Mark 'Foobly' Verrey",
"Mandarin Blue",
"Anne Kiel",
"BeMaNiFiNiNaTiC",
"BeMaNiFiNiNaTiC (Jeremy)",
"Garett Sakamoto",
"Illusionz - Issaquah, WA",
"Quarters - Kirkland, WA",
+5 -3
View File
@@ -1,11 +1,12 @@
#include "stdafx.h"
/*
-----------------------------------------------------------------------------
File: ScreenSongOptions.h
Class: ScreenSongOptions
Desc: Select a song.
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
@@ -21,6 +22,7 @@
#include "ScreenPlayerOptions.h"
#include "RageLog.h"
#include "GameState.h"
#include "ScreenStage.h"
enum {
@@ -112,7 +114,7 @@ void ScreenSongOptions::GoToNextState()
{
MUSIC->Stop();
SCREENMAN->SetNewScreen( new ScreenGameplay );
SCREENMAN->SetNewScreen( new ScreenStage );
}
+1 -1
View File
@@ -1,7 +1,7 @@
#pragma once
/*
-----------------------------------------------------------------------------
Course: SongOptions
Class: SongOptions
Desc: Per-song options that are not saved between sessions. These are options
that should probably be disabled in a coin-operated machine.