fixed a bunch of DWI save bugs.

This commit is contained in:
Chris Danford
2002-09-11 04:49:07 +00:00
parent 9ef03e7fea
commit 45e1d6ef81
13 changed files with 109 additions and 70 deletions
+14 -14
View File
@@ -2,9 +2,21 @@
Fix
/////////////////////////
test DWI writer
Make Save both SM and DWI
The "groove bar" reports at the results screen is broken.
Getting a nearly full voltage bar on a
song when I barely maitain combo (it should be max combo/max possible combo),
and chaos is always
empty unless you AAA a song.
Ready, here we go closer to start of notes
correct songs played show on eval
ready, here we go between each stage of a course
all songs played passed show on eval
make sure supports music in "Music" folder
@@ -18,11 +30,7 @@ about us page
new phpwebhosting account
call BrainStorm guy
RMA phone
RMA Kiko USB
call BrainStorm guy (Jodi 509-270-6112)
kitsappt photos
@@ -34,8 +42,6 @@ sample pop
fix screwed up scroll bar
ready, here we go between each stage of a course
send disc to Penny Arcade
long ver, marathon balloons
@@ -174,12 +180,6 @@ This doesn't quite qualify as a "bug," but--tiled scrolling background
animations have very visible seams where the tiles meet; it'd look much much
better if it was seamless.
The "groove bar" reports at the results screen is broken.
Getting a nearly full voltage bar on a
song when I barely maitain combo (it should be max combo/max possible combo),
and chaos is always
empty unless you AAA a song.
#LYRICS:
e.g. 120=Hey Ho Captian Jack,
124=Bring Me Back to the railroad track,
+3 -3
View File
@@ -229,7 +229,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail );
const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail );
const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail );
const float fColorScale = SCALE(fLife,0,1,0.5f,1);
const float fColorScale = SCALE(fLife,0,1,0.2f,1);
const D3DXCOLOR colorDiffuseTop = D3DXCOLOR(fColorScale,fColorScale,fColorScale,fAlphaTop);
const D3DXCOLOR colorDiffuseBottom = D3DXCOLOR(fColorScale,fColorScale,fColorScale,fAlphaBottom);
const D3DXCOLOR colorGlowTop = D3DXCOLOR(1,1,1,fGlowTop);
@@ -272,7 +272,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, fYBottom, fPercentFadeToFail );
const float fGlowTop = ArrowGetGlow( m_PlayerNumber, fYTop, fPercentFadeToFail );
const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, fYBottom, fPercentFadeToFail );
const float fColorScale = SCALE(fLife,0,1,0.5f,1);
const float fColorScale = SCALE(fLife,0,1,0.2f,1);
const D3DXCOLOR colorDiffuseTop = D3DXCOLOR(fColorScale,fColorScale,fColorScale,fAlphaTop);
const D3DXCOLOR colorDiffuseBottom = D3DXCOLOR(fColorScale,fColorScale,fColorScale,fAlphaBottom);
const D3DXCOLOR colorGlowTop = D3DXCOLOR(1,1,1,fGlowTop);
@@ -301,7 +301,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY );
const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fY, fPercentFadeToFail );
const float fGlow = ArrowGetGlow( m_PlayerNumber, fY, fPercentFadeToFail );
const float fColorScale = SCALE(fLife,0,1,0.5f,1);
const float fColorScale = SCALE(fLife,0,1,0.2f,1);
const D3DXCOLOR colorDiffuse= D3DXCOLOR(fColorScale,fColorScale,fColorScale,fAlpha);
const D3DXCOLOR colorGlow = D3DXCOLOR(1,1,1,fGlow);
+1 -1
View File
@@ -160,7 +160,7 @@ void NoteField::DrawPrimitives()
const int iFirstIndexToDraw = BeatToNoteRow(fFirstBeatToDraw);
const int iLastIndexToDraw = BeatToNoteRow(fLastBeatToDraw);
LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw );
// LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw );
if( GAMESTATE->m_bEditing )
{
+10 -7
View File
@@ -20,7 +20,11 @@ D3DXCOLOR NoteTypeToColor( NoteType nt )
case NOTE_TYPE_8TH: return D3DXCOLOR(0,0,1,1); // blue
case NOTE_TYPE_12TH: return D3DXCOLOR(1,0,1,1); // purple
case NOTE_TYPE_16TH: return D3DXCOLOR(1,1,0,1); // yellow
default: ASSERT(0); return D3DXCOLOR(0.5f,0.5f,0.5f,1);
case NOTE_TYPE_24TH: return D3DXCOLOR(0,1,1,1); // light blue
case NOTE_TYPE_32ND: // fall through
default:
ASSERT(0);
return D3DXCOLOR(0.5f,0.5f,0.5f,1); // gray
}
};
@@ -32,6 +36,8 @@ float NoteTypeToBeat( NoteType nt )
case NOTE_TYPE_8TH: return 1.0f/2; // eighth notes
case NOTE_TYPE_12TH: return 1.0f/3; // triplets
case NOTE_TYPE_16TH: return 1.0f/4; // sixteenth notes
case NOTE_TYPE_24TH: return 1.0f/6; // twenty-forth notes
case NOTE_TYPE_32ND: return 1.0f/8; // thirty-second notes
default: ASSERT(0); return 0;
}
}
@@ -42,6 +48,8 @@ NoteType GetNoteType( int iNoteIndex )
else if( iNoteIndex % (ROWS_PER_MEASURE/8) == 0) return NOTE_TYPE_8TH;
else if( iNoteIndex % (ROWS_PER_MEASURE/12) == 0) return NOTE_TYPE_12TH;
else if( iNoteIndex % (ROWS_PER_MEASURE/16) == 0) return NOTE_TYPE_16TH;
else if( iNoteIndex % (ROWS_PER_MEASURE/24) == 0) return NOTE_TYPE_24TH;
else if( iNoteIndex % (ROWS_PER_MEASURE/32) == 0) return NOTE_TYPE_32ND;
else return NOTE_TYPE_INVALID;
};
@@ -52,12 +60,7 @@ bool IsNoteOfType( int iNoteIndex, NoteType t )
D3DXCOLOR GetNoteColorFromIndex( int iIndex )
{
for( int t=0; t<NUM_NOTE_TYPES; t++ )
{
if( IsNoteOfType( iIndex, (NoteType)t ) )
return NoteTypeToColor( (NoteType)t );
}
return D3DXCOLOR(0.5f,0.5f,0.5f,1);
return NoteTypeToColor( GetNoteType(iIndex) );
}
D3DXCOLOR GetNoteColorFromBeat( float fBeat )
+2
View File
@@ -55,6 +55,8 @@ enum NoteType
NOTE_TYPE_8TH, // eighth note
NOTE_TYPE_12TH, // triplet
NOTE_TYPE_16TH, // sixteenth note
NOTE_TYPE_24TH, // twenty-forth note
NOTE_TYPE_32ND, // thirty-second note
NUM_NOTE_TYPES,
NOTE_TYPE_INVALID
};
+38 -12
View File
@@ -86,6 +86,7 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Notes &out, int start )
fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE;
break;
case NOTE_TYPE_12TH:
case NOTE_TYPE_24TH:
fprintf( fp, "[" );
fCurrentIncrementer = 1.0/24 * BEATS_PER_MEASURE;
break;
@@ -96,16 +97,17 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Notes &out, int start )
default:
ASSERT(0);
// fall though
case NOTE_TYPE_32ND:
case NOTE_TYPE_INVALID:
fprintf( fp, "<" );
fCurrentIncrementer = 1.0/192 * BEATS_PER_MEASURE;
fprintf( fp, "{" );
fCurrentIncrementer = 1.0/64 * BEATS_PER_MEASURE;
break;
}
double fFirstBeatInMeasure = m * BEATS_PER_MEASURE;
double fLastBeatInMeasure = (m+1) * BEATS_PER_MEASURE;
for( double b=fFirstBeatInMeasure; b<fLastBeatInMeasure; b+=fCurrentIncrementer )
for( double b=fFirstBeatInMeasure; b<=fLastBeatInMeasure-1/64.0f; b+=fCurrentIncrementer ) // need the -0.0001 to account for rounding errors
{
int row = BeatToNoteRow( (float)b );
@@ -115,15 +117,37 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Notes &out, int start )
case NOTES_TYPE_DANCE_COUPLE_1:
case NOTES_TYPE_DANCE_COUPLE_2:
case NOTES_TYPE_DANCE_DOUBLE:
fprintf( fp, NotesToDWIString( notedata.m_TapNotes[start+0][row],
notedata.m_TapNotes[start+1][row],
notedata.m_TapNotes[start+2][row],
notedata.m_TapNotes[start+3][row] ) );
fprintf( fp, NotesToDWIString(
notedata.m_TapNotes[start+0][row],
notedata.m_TapNotes[start+1][row],
notedata.m_TapNotes[start+2][row],
notedata.m_TapNotes[start+3][row] ) );
// Blank out the notes so we don't write them again if the incrementer is small
notedata.m_TapNotes[start+0][row] = '0';
notedata.m_TapNotes[start+1][row] = '0';
notedata.m_TapNotes[start+2][row] = '0';
notedata.m_TapNotes[start+3][row] = '0';
break;
case NOTES_TYPE_DANCE_SOLO:
fprintf( fp, NotesToDWIString( notedata.m_TapNotes[0][row], notedata.m_TapNotes[1][row], notedata.m_TapNotes[2][row], notedata.m_TapNotes[3][row], notedata.m_TapNotes[4][row], notedata.m_TapNotes[5][row] ) );
fprintf( fp, NotesToDWIString(
notedata.m_TapNotes[0][row],
notedata.m_TapNotes[1][row],
notedata.m_TapNotes[2][row],
notedata.m_TapNotes[3][row],
notedata.m_TapNotes[4][row],
notedata.m_TapNotes[5][row] ) );
// Blank out the notes so we don't write them again if the incrementer is small
notedata.m_TapNotes[start+0][row] = '0';
notedata.m_TapNotes[start+1][row] = '0';
notedata.m_TapNotes[start+2][row] = '0';
notedata.m_TapNotes[start+3][row] = '0';
notedata.m_TapNotes[start+4][row] = '0';
notedata.m_TapNotes[start+5][row] = '0';
break;
default: return; // not a type supported by DWI
default:
ASSERT(0); // not a type supported by DWI. We shouldn't have called in here if that's the case
}
}
@@ -133,6 +157,7 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Notes &out, int start )
case NOTE_TYPE_8TH:
break;
case NOTE_TYPE_12TH:
case NOTE_TYPE_24TH:
fprintf( fp, "]" );
break;
case NOTE_TYPE_16TH:
@@ -141,8 +166,9 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Notes &out, int start )
default:
ASSERT(0);
// fall though
case NOTE_TYPE_32ND:
case NOTE_TYPE_INVALID:
fprintf( fp, ">" );
fprintf( fp, "}" );
break;
}
fprintf( fp, "\n" );
@@ -195,7 +221,7 @@ bool NotesWriterDWI::Write( CString sPath, const Song &out )
for( int i=0; i<out.m_StopSegments.GetSize(); i++ )
{
const StopSegment &fs = out.m_StopSegments[i];
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( fs.m_fStartBeat ) / ROWS_PER_BEAT * 4.0f,
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( fs.m_fStartBeat ) * 4.0f / ROWS_PER_BEAT,
roundf(fs.m_fStopSeconds*1000) );
if( i != out.m_StopSegments.GetSize()-1 )
fprintf( fp, "," );
@@ -209,7 +235,7 @@ bool NotesWriterDWI::Write( CString sPath, const Song &out )
for( int i=1; i<out.m_BPMSegments.GetSize(); i++ )
{
const BPMSegment &bs = out.m_BPMSegments[i];
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( bs.m_fStartBeat ) / ROWS_PER_BEAT * 4.0f, bs.m_fBPM );
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( bs.m_fStartBeat ) * 4.0f / ROWS_PER_BEAT, bs.m_fBPM );
if( i != out.m_BPMSegments.GetSize()-1 )
fprintf( fp, "," );
}
+29 -21
View File
@@ -115,8 +115,7 @@ const CString MENU_ITEM_TEXT[NUM_MENU_ITEMS] = {
"K: Snap selection to nearest sixteenth note",
"L: Snap selection to nearest triplet or sixteenth note",
"M: Play sample music",
"S: Save changes",
"W: Save as DWI (lossy)",
"S: Save changes as SM and DWI",
"Q: Quit"
};
int MENU_ITEM_KEY[NUM_MENU_ITEMS] = {
@@ -143,7 +142,6 @@ int MENU_ITEM_KEY[NUM_MENU_ITEMS] = {
DIK_L,
DIK_M,
DIK_S,
DIK_W,
DIK_Q,
};
@@ -417,10 +415,12 @@ void ScreenEdit::Update( float fDeltaTime )
CString sNoteType;
switch( m_SnapDisplay.GetSnapMode() )
{
case NOTE_TYPE_4TH: sNoteType = "quarter notes"; break;
case NOTE_TYPE_8TH: sNoteType = "eighth notes"; break;
case NOTE_TYPE_12TH: sNoteType = "triplets"; break;
case NOTE_TYPE_16TH: sNoteType = "sixteenth notes"; break;
case NOTE_TYPE_4TH: sNoteType = "quarter notes"; break;
case NOTE_TYPE_8TH: sNoteType = "eighth notes"; break;
case NOTE_TYPE_12TH: sNoteType = "triplets"; break;
case NOTE_TYPE_16TH: sNoteType = "sixteenth notes"; break;
case NOTE_TYPE_24TH: sNoteType = "twentyforth notes"; break;
case NOTE_TYPE_32ND: sNoteType = "thirtysecond notes"; break;
default: ASSERT(0);
}
@@ -644,7 +644,6 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
SCREENMAN->SetNewScreen( "ScreenEditMenu" );
break;
case DIK_S:
case DIK_W:
{
// copy edit into current Notes
// Song* pSong = GAMESTATE->m_pCurSong;
@@ -666,19 +665,9 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
}
*/
pNotes->SetNoteData( (NoteData*)&m_NoteFieldEdit );
switch( DeviceI.button )
{
case DIK_S:
GAMESTATE->m_pCurSong->SaveToSongFile();
SCREENMAN->SystemMessage( "Saved as SM." );
break;
case DIK_W:
GAMESTATE->m_pCurSong->SaveToSongFileAndDWI();
SCREENMAN->SystemMessage( "Saved as SM and DWI." );
break;
default:
ASSERT(0);
}
GAMESTATE->m_pCurSong->Save();
SCREENMAN->SystemMessage( "Saved as SM and DWI." );
SOUND->PlayOnceStreamed( THEME->GetPathTo("Sounds","edit save") );
}
break;
@@ -1226,6 +1215,25 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
GAMESTATE->m_fSongBeat = froundf( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_SnapDisplay.GetSnapMode()) );
break;
case DIK_F11:
case DIK_F12:
{
float fOffsetDelta;
switch( DeviceI.button )
{
case DIK_F11: fOffsetDelta = -0.020f; break;
case DIK_F12: fOffsetDelta = +0.020f; break;
default: ASSERT(0); return;
}
switch( type )
{
case IET_SLOW_REPEAT: fOffsetDelta *= 10; break;
case IET_FAST_REPEAT: fOffsetDelta *= 40; break;
}
m_pSong->m_fBeat0OffsetInSeconds += fOffsetDelta;
}
break;
}
}
+1 -1
View File
@@ -22,7 +22,7 @@
#include "SnapDisplay.h"
const int NUM_MENU_ITEMS = 25;
const int NUM_MENU_ITEMS = 24;
class ScreenEdit : public Screen
+2 -2
View File
@@ -956,7 +956,7 @@ void SaveChanges()
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_ARCADE:
GAMESTATE->m_pCurSong->SaveToSongFile();
GAMESTATE->m_pCurSong->Save();
break;
case PLAY_MODE_ONI:
case PLAY_MODE_ENDLESS:
@@ -964,7 +964,7 @@ void SaveChanges()
for( int i=0; i<GAMESTATE->m_pCurCourse->m_iStages; i++ )
{
Song* pSong = GAMESTATE->m_pCurCourse->m_apSongs[i];
pSong->SaveToSongFile();
pSong->Save();
}
}
break;
+2 -1
View File
@@ -58,7 +58,7 @@ bool SnapDisplay::PrevSnapMode()
bool SnapDisplay::NextSnapMode()
{
if( m_NoteType == NUM_NOTE_TYPES-1 )
if( m_NoteType == NOTE_TYPE_16TH ) // this is the smallest snap we should allow
return false;
m_NoteType = NoteType(m_NoteType+1);
@@ -73,6 +73,7 @@ void SnapDisplay::SnapModeChanged()
for( int i=0; i<2; i++ )
{
m_sprIndicators[i].StopTweening();
m_sprIndicators[i].BeginTweening( 0.3f );
m_sprIndicators[i].SetTweenDiffuse( color );
}
+3 -4
View File
@@ -637,7 +637,7 @@ void Song::SaveToCacheFile()
SaveToSMFile( GetCacheFilePath(), true );
}
void Song::SaveToSongFile()
void Song::Save()
{
LOG->Trace( "Song::SaveToSongFile()" );
@@ -657,6 +657,7 @@ void Song::SaveToSongFile()
}
SaveToSMFile( GetSongFilePath(), false );
SaveToDWIFile();
}
@@ -744,12 +745,10 @@ void Song::SaveToSMFile( CString sPath, bool bSavingCache )
fclose( fp );
}
void Song::SaveToSongFileAndDWI()
void Song::SaveToDWIFile()
{
LOG->Trace( "Song::SaveToSongFileAndDWI()" );
SaveToSongFile();
CString sPath = GetSongFilePath();
sPath.Replace( ".sm", ".dwi" );
+2 -2
View File
@@ -59,7 +59,7 @@ IntDir=.\../Release6
TargetDir=\stepmania\stepmania
TargetName=StepMania
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -94,7 +94,7 @@ IntDir=.\../Debug6
TargetDir=\stepmania\stepmania
TargetName=StepMania-debug
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
+2 -2
View File
@@ -62,9 +62,9 @@ public:
void TidyUpData(); // call after loading to clean up invalid data
void SaveToSMFile( CString sPath, bool bSavingCache );
void SaveToSongFileAndDWI(); // saves SM, then saves DWI so that the SM is the master copy and NoteTypes not supported by DWI are not lost
void Save(); // saves SM and DWI
void SaveToCacheFile();
void SaveToSongFile(); // no path means save to SongFilePath
void SaveToDWIFile();
const CString &GetSongFilePath() const;
CString GetCacheFilePath() const;