Merge with default

This commit is contained in:
Henrik Andersson
2011-07-08 17:57:19 +02:00
13 changed files with 239 additions and 77 deletions
+7 -1
View File
@@ -15,8 +15,14 @@ StepMania 5.0 ????????? | 20110???
number of songs installed. Fixes issue 373. [AJ] number of songs installed. Fixes issue 373. [AJ]
* [NotesAllSSC] Add the #CHARTNAME tag to the Steps. #DESCRIPTION is now for * [NotesAllSSC] Add the #CHARTNAME tag to the Steps. #DESCRIPTION is now for
more detailed descriptions, or perhaps some short hand lingo. All files more detailed descriptions, or perhaps some short hand lingo. All files
that used #DESCRIPTION will have their values copied to #CHARTNAME on that used #DESCRIPTION will have their values moved to #CHARTNAME on
load. [Wolfman2000] load. [Wolfman2000]
* [ScreenEdit] Add a Steps Data menu for getting numerical step data on the
chart. This is a read only menu. Edit Steps Information contains writable
information. [Wolfman2000]
* [NotesAllSSC] Add the Steps version of #DISPLAYBPM. The Song version is
still there, so themes should not have to worry about breakage.
[Wolfman2000]
2011/07/06 2011/07/06
---------- ----------
+2
View File
@@ -42,6 +42,7 @@
// begin // begin
#NOTEDATA# // marks a new note data section #NOTEDATA# // marks a new note data section
// information from #NOTES moved here // information from #NOTES moved here
#CHARTNAME:;
#STEPSTYPE:; #STEPSTYPE:;
#DESCRIPTION:; #DESCRIPTION:;
#CHARTSTYLE:; #CHARTSTYLE:;
@@ -63,6 +64,7 @@
#FAKES:; #FAKES:;
#LABELS:; #LABELS:;
#ATTACKS:; #ATTACKS:;
#DISPLAYBPM:;
// actual step data // actual step data
#NOTES:; #NOTES:;
+5
View File
@@ -817,6 +817,7 @@ CoinsPerCredit=Coins Per Credit
Connection=Connection Connection=Connection
Convert pause to beats=Convert stop to beats Convert pause to beats=Convert stop to beats
Convert delay to beats=Convert delay to beats Convert delay to beats=Convert delay to beats
Convert selection to attack=Convert selection to Attack
Convert selection to pause=Convert selection to stop Convert selection to pause=Convert selection to stop
Convert selection to delay=Convert selection to delay Convert selection to delay=Convert selection to delay
Convert selection to warp=Convert selection to Warp Segment Convert selection to warp=Convert selection to Warp Segment
@@ -878,6 +879,7 @@ Entry %d=Entry %d
EventMode=Event Mode EventMode=Event Mode
Exit=Exit Exit=Exit
Fail=Fail Fail=Fail
Fakes=Fakes
FastLoad=Fast\nLoad FastLoad=Fast\nLoad
File1 Global BGAnimation=File1 Global BGAnimation File1 Global BGAnimation=File1 Global BGAnimation
File1 Global Movie=File1 Global Movie File1 Global Movie=File1 Global Movie
@@ -921,6 +923,7 @@ Key Joy Mappings=Config Key/Joy Mappings
Language=Language Language=Language
Last second hint=Last second hint Last second hint=Last second hint
Layer=Layer Layer=Layer
Lifts=Lifts
LifeDifficulty=Life Difficulty LifeDifficulty=Life Difficulty
LifeType=Life Type LifeType=Life Type
Low Meter=Low Meter Low Meter=Low Meter
@@ -987,6 +990,7 @@ Rename=Rename
Reset To Defaults=Reset Options To Default Values Reset To Defaults=Reset Options To Default Values
Revert from disk=Revert from disk Revert from disk=Revert from disk
Revert to last save=Revert from cache Revert to last save=Revert from cache
Rolls=Rolls
Save=Save Save=Save
SaveScores=Save Scores SaveScores=Save Scores
SaveReplays=Save Replays SaveReplays=Save Replays
@@ -1051,6 +1055,7 @@ Type=Type
Turn=Turn Turn=Turn
Undo=Undo Undo=Undo
UseUnlockSystem=Unlock System UseUnlockSystem=Unlock System
View steps data=View Steps Data
VisualDelaySeconds=Visual Delay VisualDelaySeconds=Visual Delay
Voltage=Voltage Voltage=Voltage
Vsync=Wait For Vsync Vsync=Wait For Vsync
+2 -2
View File
@@ -68,7 +68,7 @@ Branch = {
if PROFILEMAN:GetNumLocalProfiles() >= 2 then if PROFILEMAN:GetNumLocalProfiles() >= 2 then
return "ScreenSelectProfile"; return "ScreenSelectProfile";
else else
return Branch.AfterSelectProfile(); return "ScreenProfileLoad";
end end
end, end,
OptionsEdit = function() OptionsEdit = function()
@@ -79,7 +79,7 @@ Branch = {
return "ScreenOptionsEdit"; return "ScreenOptionsEdit";
end, end,
AfterProfileLoad = function() AfterProfileLoad = function()
return "ScreenSelectProfile" return Branch.AfterSelectProfile()
end, end,
AfterSelectProfile = function() AfterSelectProfile = function()
if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then
@@ -1,9 +1,12 @@
--[[ --[[
Custom Speed Mods v2.0 (for sm-ssc) Custom Speed Mods v2.1 (for StepMania 5)
by AJ Kelly of KKI Labs ( http://kki.ajworld.net/ ) by AJ Kelly of KKI Labs ( http://kki.ajworld.net/ )
changelog: changelog:
v2.1 (StepMania 5 Preview 2)
* Added support for m-Mods.
v2.0 (for sm-ssc) v2.0 (for sm-ssc)
Giant rewrite of the speed mod parser. Giant rewrite of the speed mod parser.
This rewrite comes with the following changes/features: This rewrite comes with the following changes/features:
@@ -38,9 +41,6 @@ v1.2
v1.1 v1.1
* Cleaned up code some, I think. * Cleaned up code some, I think.
________________________________________________________________________________
anticipated future changes:
* M-Mod support (when sm-ssc integrates it)
]] ]]
-- ProfileDir(slot): gets the profile dir for slot, -- ProfileDir(slot): gets the profile dir for slot,
@@ -150,7 +150,6 @@ local function SpeedModSort(tab)
local xMods = {} local xMods = {}
local mMods = {} local mMods = {}
local cMods = {} local cMods = {}
--local mMods = {}
-- convert to numbers so sorting works: -- convert to numbers so sorting works:
for i=1,#tab do for i=1,#tab do
@@ -160,7 +159,8 @@ local function SpeedModSort(tab)
if string.find(tab[i],"C%d") then if string.find(tab[i],"C%d") then
typ = cMods typ = cMods
val = string.gsub(tab[i], "C", "") val = string.gsub(tab[i], "C", "")
elseif string.find(tab[i],"m%d") then -- support both cases because I want to hit people -freem
elseif string.find(tab[i],"m%d") or string.find(tab[i],"M%d") then
typ = mMods typ = mMods
val = string.gsub(tab[i], "m", "") val = string.gsub(tab[i], "m", "")
else else
@@ -187,7 +187,6 @@ local function SpeedModSort(tab)
for i=1,#mMods do for i=1,#mMods do
table.insert(fin, "m"..mMods[i]) table.insert(fin, "m"..mMods[i])
end end
--for i=1,#mMods do table.insert(fin, "M"..mMods[i]); end;
return fin return fin
end end
@@ -298,7 +297,7 @@ function SpeedMods()
end end
--[[ --[[
Copyright © 2008-2009 AJ Kelly/KKI Labs. Copyright © 2008-2011 AJ Kelly/KKI Labs.
Use freely, so long this notice and the above documentation remains. Use freely, so long this notice and the above documentation remains.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+1 -1
View File
@@ -11,7 +11,7 @@ function GetExtraColorThreshold()
sGame = GAMESTATE:GetCurrentGame():GetName() sGame = GAMESTATE:GetCurrentGame():GetName()
local Modes = { local Modes = {
dance = 10, dance = 10,
pump = 15, pump = 21,
beat = 12, beat = 12,
kb7 = 10, kb7 = 10,
para = 10, para = 10,
+4 -1
View File
@@ -28,7 +28,7 @@ ScreenHeight=480
AutoSetStyle=GetUserPrefB("UserPrefAutoSetStyle") AutoSetStyle=GetUserPrefB("UserPrefAutoSetStyle")
# Default modifiers and noteskin. # Default modifiers and noteskin.
DefaultModifiers="1.5x" DefaultModifiers=""
DefaultNoteSkinName="default" DefaultNoteSkinName="default"
# Difficulties to show. Useful for custom games where you want to hide these. # Difficulties to show. Useful for custom games where you want to hide these.
@@ -3740,6 +3740,9 @@ Fallback="ScreenMiniMenu"
[ScreenMiniMenuStepsInformation] [ScreenMiniMenuStepsInformation]
Fallback="ScreenMiniMenu" Fallback="ScreenMiniMenu"
[ScreenMiniMenuStepsData]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuSongInformation] [ScreenMiniMenuSongInformation]
Fallback="ScreenMiniMenu" Fallback="ScreenMiniMenu"
+21 -2
View File
@@ -465,8 +465,10 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach
{ {
pNewNotes->SetChartName(sParams[1]); pNewNotes->SetChartName(sParams[1]);
} }
// TODO: Make this the else clause? else
pNewNotes->SetDescription( sParams[1] ); {
pNewNotes->SetDescription(sParams[1]);
}
} }
else if( sValueName=="DIFFICULTY" ) else if( sValueName=="DIFFICULTY" )
@@ -585,6 +587,23 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach
{ {
stepsTiming.m_fBeat0OffsetInSeconds = StringToFloat( sParams[1] ); stepsTiming.m_fBeat0OffsetInSeconds = StringToFloat( sParams[1] );
} }
else if( sValueName=="DISPLAYBPM" )
{
// #DISPLAYBPM:[xxx][xxx:xxx]|[*];
if( sParams[1] == "*" )
pNewNotes->SetDisplayBPM(DISPLAY_BPM_RANDOM);
else
{
pNewNotes->SetDisplayBPM(DISPLAY_BPM_SPECIFIED);
float min = StringToFloat(sParams[1]);
pNewNotes->SetMinBPM(min);
if(sParams[2].empty())
pNewNotes->SetMaxBPM(min);
else
pNewNotes->SetMaxBPM(StringToFloat(sParams[2]));
}
}
break; break;
} }
} }
+20
View File
@@ -335,6 +335,26 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa
Trim(attacks, ":"); // just in case something screwy happens. Trim(attacks, ":"); // just in case something screwy happens.
lines.push_back( ssprintf( "#ATTACKS:%s;", attacks.c_str())); lines.push_back( ssprintf( "#ATTACKS:%s;", attacks.c_str()));
switch( in.GetDisplayBPM() )
{
case DISPLAY_BPM_ACTUAL:
// write nothing
break;
case DISPLAY_BPM_SPECIFIED:
{
float small = in.GetMinBPM();
float big = in.GetMaxBPM();
if (small == big)
lines.push_back( ssprintf( "#DISPLAYBPM:%.6f;", small ) );
else
lines.push_back( ssprintf( "#DISPLAYBPM:%.6f:%.6f;", small, big ) );
break;
}
case DISPLAY_BPM_RANDOM:
lines.push_back( ssprintf( "#DISPLAYBPM:*;" ) );
break;
}
RString sNoteData; RString sNoteData;
in.GetSMNoteData( sNoteData ); in.GetSMNoteData( sNoteData );
+120 -29
View File
@@ -63,6 +63,7 @@ AutoScreenMessage( SM_BackFromMainMenu );
AutoScreenMessage( SM_BackFromAreaMenu ); AutoScreenMessage( SM_BackFromAreaMenu );
AutoScreenMessage( SM_BackFromAlterMenu ); AutoScreenMessage( SM_BackFromAlterMenu );
AutoScreenMessage( SM_BackFromStepsInformation ); AutoScreenMessage( SM_BackFromStepsInformation );
AutoScreenMessage( SM_BackFromStepsData );
AutoScreenMessage( SM_BackFromOptions ); AutoScreenMessage( SM_BackFromOptions );
AutoScreenMessage( SM_BackFromSongInformation ); AutoScreenMessage( SM_BackFromSongInformation );
AutoScreenMessage( SM_BackFromBGChange ); AutoScreenMessage( SM_BackFromBGChange );
@@ -521,12 +522,13 @@ static MenuDef g_MainMenu(
MenuRowDef( ScreenEdit::play_selection, "Play selection", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::play_selection, "Play selection", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::set_selection_start, "Set selection start", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::set_selection_start, "Set selection start", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::set_selection_end, "Set selection end", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::set_selection_end, "Set selection end", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::edit_steps_information, "Edit steps information", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::revert_to_last_save, "Revert to last save", true, EditMode_Home, true, true, 0, NULL ), MenuRowDef( ScreenEdit::revert_to_last_save, "Revert to last save", true, EditMode_Home, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::revert_from_disk, "Revert from disk", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::revert_from_disk, "Revert from disk", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::options, "Editor options", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::options, "Editor options", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::edit_song_info, "Edit song info", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::edit_song_info, "Edit song info", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::edit_steps_information, "Edit steps information", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::edit_timing_data, "Edit Timing Data", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::edit_timing_data, "Edit Timing Data", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::view_steps_data, "View steps data", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::play_preview_music, "Play preview music", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::play_preview_music, "Play preview music", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::exit, "Exit Edit Mode", true, EditMode_Practice, true, true, 0, NULL ) MenuRowDef( ScreenEdit::exit, "Exit Edit Mode", true, EditMode_Practice, true, true, 0, NULL )
); );
@@ -569,6 +571,8 @@ static MenuDef g_AlterMenu(
EditMode_Full, true, true, 0, NULL ), EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::convert_to_fake, "Convert selection to fake", true, MenuRowDef(ScreenEdit::convert_to_fake, "Convert selection to fake", true,
EditMode_Full, true, true, 0, NULL ), EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::convert_to_attack, "Convert selection to attack", true,
EditMode_Full, true, true, 0, NULL),
MenuRowDef(ScreenEdit::routine_invert_notes, "Invert notes' player", true, MenuRowDef(ScreenEdit::routine_invert_notes, "Invert notes' player", true,
EditMode_Full, true, true, 0, NULL ), EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::routine_mirror_1_to_2, "Mirror Player 1 to 2", true, MenuRowDef(ScreenEdit::routine_mirror_1_to_2, "Mirror Player 1 to 2", true,
@@ -600,17 +604,27 @@ static MenuDef g_StepsInformation(
"ScreenMiniMenuStepsInformation", "ScreenMiniMenuStepsInformation",
MenuRowDef( ScreenEdit::difficulty, "Difficulty", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::difficulty, "Difficulty", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::meter, "Meter", true, EditMode_Practice, true, false, 0, NULL ), MenuRowDef( ScreenEdit::meter, "Meter", true, EditMode_Practice, true, false, 0, NULL ),
MenuRowDef( ScreenEdit::predict_meter, "Predicted Meter", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::chartname, "Chart Name", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::chartname, "Chart Name", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::description, "Description", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::description, "Description", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::chartstyle, "Chart Style", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::chartstyle, "Chart Style", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::step_credit, "Step Author", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::step_credit, "Step Author", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::predict_meter, "Predicted Meter", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::step_display_bpm, "Display BPM", true, EditMode_Full, true, true, 0, "Actual", "Specified", "Random" ),
MenuRowDef( ScreenEdit::step_min_bpm, "Min BPM", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::step_max_bpm, "Max BPM", true, EditMode_Full, true, true, 0, NULL )
);
static MenuDef g_StepsData(
"ScreenMiniMenuStepsData",
MenuRowDef( ScreenEdit::tap_notes, "Tap Steps", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::tap_notes, "Tap Steps", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::jumps, "Jumps", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::jumps, "Jumps", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::hands, "Hands", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::hands, "Hands", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::quads, "Quads", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::quads, "Quads", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::holds, "Holds", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::holds, "Holds", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::mines, "Mines", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::mines, "Mines", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::rolls, "Rolls", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::lifts, "Lifts", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::fakes, "Fakes", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::stream, "Stream", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::stream, "Stream", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::voltage, "Voltage", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::voltage, "Voltage", false, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::air, "Air", false, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::air, "Air", false, EditMode_Full, true, true, 0, NULL ),
@@ -2931,6 +2945,12 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
{ {
HandleStepsInformationChoice( (StepsInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers ); HandleStepsInformationChoice( (StepsInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
} }
else if (SM == SM_BackFromStepsData)
{
HandleStepsDataChoice((StepsDataChoice)ScreenMiniMenu::s_iLastRowCode,
ScreenMiniMenu::s_viLastAnswers);
}
else if( SM == SM_BackFromSongInformation ) else if( SM == SM_BackFromSongInformation )
{ {
HandleSongInformationChoice( (SongInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers ); HandleSongInformationChoice( (SongInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
@@ -3494,11 +3514,23 @@ static void ChangeMinBPM( const RString &sNew )
GAMESTATE->m_pCurSong->m_fSpecifiedBPMMin = StringToFloat( sNew ); GAMESTATE->m_pCurSong->m_fSpecifiedBPMMin = StringToFloat( sNew );
} }
static void ChangeStepsMinBPM(const RString &sNew)
{
Steps *step = GAMESTATE->m_pCurSteps[PLAYER_1];
step->SetMinBPM(StringToFloat(sNew));
}
static void ChangeMaxBPM( const RString &sNew ) static void ChangeMaxBPM( const RString &sNew )
{ {
GAMESTATE->m_pCurSong->m_fSpecifiedBPMMax = StringToFloat( sNew ); GAMESTATE->m_pCurSong->m_fSpecifiedBPMMax = StringToFloat( sNew );
} }
static void ChangeStepsMaxBPM(const RString &sNew)
{
Steps *step = GAMESTATE->m_pCurSteps[PLAYER_1];
step->SetMaxBPM(StringToFloat(sNew));
}
TimingData & ScreenEdit::GetAppropriateTiming() const TimingData & ScreenEdit::GetAppropriateTiming() const
{ {
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
@@ -3655,7 +3687,6 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
/* XXX: If the difficulty is changed from EDIT, and pSteps->WasLoadedFromProfile() /* XXX: If the difficulty is changed from EDIT, and pSteps->WasLoadedFromProfile()
* is true, we should warn that the steps will no longer be saved to the profile. */ * is true, we should warn that the steps will no longer be saved to the profile. */
Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
float fMusicSeconds = m_pSoundMusic->GetLengthSeconds();
g_StepsInformation.rows[difficulty].choices.clear(); g_StepsInformation.rows[difficulty].choices.clear();
FOREACH_ENUM( Difficulty, dc ) FOREACH_ENUM( Difficulty, dc )
@@ -3675,20 +3706,32 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
g_StepsInformation.rows[chartstyle].SetOneUnthemedChoice( pSteps->GetChartStyle() ); g_StepsInformation.rows[chartstyle].SetOneUnthemedChoice( pSteps->GetChartStyle() );
g_StepsInformation.rows[step_credit].bEnabled = (EDIT_MODE.GetValue() >= EditMode_Full); g_StepsInformation.rows[step_credit].bEnabled = (EDIT_MODE.GetValue() >= EditMode_Full);
g_StepsInformation.rows[step_credit].SetOneUnthemedChoice( pSteps->GetCredit() ); g_StepsInformation.rows[step_credit].SetOneUnthemedChoice( pSteps->GetCredit() );
g_StepsInformation.rows[tap_notes].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumTapNotes()) ); g_StepsInformation.rows[step_display_bpm].iDefaultChoice = pSteps->GetDisplayBPM();
g_StepsInformation.rows[jumps].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumJumps()) ); g_StepsInformation.rows[step_min_bpm].SetOneUnthemedChoice( ssprintf("%.6f", pSteps->GetMinBPM()));
g_StepsInformation.rows[hands].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumHands()) ); g_StepsInformation.rows[step_max_bpm].SetOneUnthemedChoice( ssprintf("%.6f", pSteps->GetMaxBPM()));
g_StepsInformation.rows[quads].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumQuads()) );
g_StepsInformation.rows[holds].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumHoldNotes()) );
g_StepsInformation.rows[mines].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumMines()) );
g_StepsInformation.rows[stream].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetStreamRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsInformation.rows[voltage].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetVoltageRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsInformation.rows[air].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetAirRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsInformation.rows[freeze].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetFreezeRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsInformation.rows[chaos].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetChaosRadarValue(m_NoteDataEdit,fMusicSeconds)) );
EditMiniMenu( &g_StepsInformation, SM_BackFromStepsInformation, SM_None ); EditMiniMenu( &g_StepsInformation, SM_BackFromStepsInformation, SM_None );
} }
break; break;
case view_steps_data:
{
float fMusicSeconds = m_pSoundMusic->GetLengthSeconds();
g_StepsData.rows[tap_notes].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumTapNotes()) );
g_StepsData.rows[jumps].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumJumps()) );
g_StepsData.rows[hands].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumHands()) );
g_StepsData.rows[quads].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumQuads()) );
g_StepsData.rows[holds].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumHoldNotes()) );
g_StepsData.rows[mines].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumMines()) );
g_StepsData.rows[rolls].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumRolls()) );
g_StepsData.rows[lifts].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumLifts()) );
g_StepsData.rows[fakes].SetOneUnthemedChoice( ssprintf("%d", m_NoteDataEdit.GetNumFakes()) );
g_StepsData.rows[stream].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetStreamRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsData.rows[voltage].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetVoltageRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsData.rows[air].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetAirRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsData.rows[freeze].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetFreezeRadarValue(m_NoteDataEdit,fMusicSeconds)) );
g_StepsData.rows[chaos].SetOneUnthemedChoice( ssprintf("%.2f", NoteDataUtil::GetChaosRadarValue(m_NoteDataEdit,fMusicSeconds)) );
EditMiniMenu( &g_StepsData, SM_BackFromStepsData, SM_None );
break;
}
case save: case save:
case save_on_exit: case save_on_exit:
{ {
@@ -4073,6 +4116,29 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector<int> &iAn
SetDirty(true); SetDirty(true);
break; break;
} }
case convert_to_attack:
{
float startBeat = NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker);
float endBeat = NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker);
TimingData &timing = GetAppropriateTiming();
float &start = g_fLastInsertAttackPositionSeconds;
float &length = g_fLastInsertAttackDurationSeconds;
start = timing.GetElapsedTimeFromBeat(startBeat);
length = timing.GetElapsedTimeFromBeat(endBeat) - start;
AttackArray &attacks = GAMESTATE->m_bIsUsingStepTiming ?
m_pSteps->m_Attacks : m_pSong->m_Attacks;
int iAttack = FindAttackAtTime(attacks, start);
PlayerOptions po;
if (iAttack >= 0)
po.FromString(attacks[iAttack].sModifiers);
GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.Assign( ModsLevel_Preferred, po );
SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions", SM_BackFromInsertStepAttackPlayerOptions );
SetDirty(true);
break;
}
case convert_to_fake: case convert_to_fake:
{ {
float startBeat = NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker); float startBeat = NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker);
@@ -4264,16 +4330,24 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
CheckNumberOfNotesAndUndo(); CheckNumberOfNotesAndUndo();
} }
void ScreenEdit::HandleStepsDataChoice( StepsDataChoice c, const vector<int> &iAnswers )
{
return; // nothing is done with the choices. Yet.
}
static LocalizedString ENTER_NEW_DESCRIPTION( "ScreenEdit", "Enter a new description." ); static LocalizedString ENTER_NEW_DESCRIPTION( "ScreenEdit", "Enter a new description." );
static LocalizedString ENTER_NEW_CHART_NAME("ScreenEdit", "Enter a new chart name."); static LocalizedString ENTER_NEW_CHART_NAME("ScreenEdit", "Enter a new chart name.");
static LocalizedString ENTER_NEW_CHART_STYLE( "ScreenEdit", "Enter a new chart style." ); static LocalizedString ENTER_NEW_CHART_STYLE( "ScreenEdit", "Enter a new chart style." );
static LocalizedString ENTER_NEW_STEP_AUTHOR( "ScreenEdit", "Enter the author who made this step pattern." ); static LocalizedString ENTER_NEW_STEP_AUTHOR( "ScreenEdit", "Enter the author who made this step pattern." );
static LocalizedString ENTER_NEW_METER( "ScreenEdit", "Enter a new meter." ); static LocalizedString ENTER_NEW_METER( "ScreenEdit", "Enter a new meter." );
static LocalizedString ENTER_MIN_BPM ("ScreenEdit","Enter a new min BPM.");
static LocalizedString ENTER_MAX_BPM ("ScreenEdit","Enter a new max BPM.");
void ScreenEdit::HandleStepsInformationChoice( StepsInformationChoice c, const vector<int> &iAnswers ) void ScreenEdit::HandleStepsInformationChoice( StepsInformationChoice c, const vector<int> &iAnswers )
{ {
Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
Difficulty dc = (Difficulty)iAnswers[difficulty]; Difficulty dc = (Difficulty)iAnswers[difficulty];
pSteps->SetDifficulty( dc ); pSteps->SetDifficulty( dc );
pSteps->SetDisplayBPM(static_cast<DisplayBPM>(iAnswers[step_display_bpm]));
switch( c ) switch( c )
{ {
@@ -4295,42 +4369,60 @@ void ScreenEdit::HandleStepsInformationChoice( StepsInformationChoice c, const v
m_pSteps->GetDescription(), m_pSteps->GetDescription(),
MAX_STEPS_DESCRIPTION_LENGTH, MAX_STEPS_DESCRIPTION_LENGTH,
SongUtil::ValidateCurrentStepsDescription, SongUtil::ValidateCurrentStepsDescription,
ChangeDescription,NULL); ChangeDescription,
NULL);
break; break;
} }
case chartstyle: case chartstyle:
ScreenTextEntry::TextEntry( {
SM_None, ScreenTextEntry::TextEntry(SM_None,
ENTER_NEW_CHART_STYLE, ENTER_NEW_CHART_STYLE,
m_pSteps->GetChartStyle(), m_pSteps->GetChartStyle(),
255, 255,
NULL, NULL,
ChangeChartStyle, ChangeChartStyle,
NULL NULL);
);
break; break;
}
case step_credit: case step_credit:
ScreenTextEntry::TextEntry( {
SM_None, ScreenTextEntry::TextEntry(SM_None,
ENTER_NEW_STEP_AUTHOR, ENTER_NEW_STEP_AUTHOR,
m_pSteps->GetCredit(), m_pSteps->GetCredit(),
255, 255,
SongUtil::ValidateCurrentStepsCredit, SongUtil::ValidateCurrentStepsCredit,
ChangeStepCredit, ChangeStepCredit,
NULL NULL);
);
break; break;
}
case meter: case meter:
ScreenTextEntry::TextEntry( {
SM_BackFromDifficultyMeterChange, ScreenTextEntry::TextEntry(SM_BackFromDifficultyMeterChange,
ENTER_NEW_METER, ENTER_NEW_METER,
ssprintf("%d", m_pSteps->GetMeter()), ssprintf("%d", m_pSteps->GetMeter()),
4 4);
);
break; break;
}
case step_min_bpm:
{
ScreenTextEntry::TextEntry(SM_None, ENTER_MIN_BPM,
ssprintf("%.6f", pSteps->GetMinBPM()), 20,
ScreenTextEntry::FloatValidate,
ChangeStepsMinBPM, NULL);
break;
}
case step_max_bpm:
{
ScreenTextEntry::TextEntry(SM_None, ENTER_MAX_BPM,
ssprintf("%.6f", pSteps->GetMaxBPM()), 20,
ScreenTextEntry::FloatValidate,
ChangeStepsMaxBPM, NULL);
break;
}
default: default:
break; break;
} }
SetDirty(true);
} }
static LocalizedString ENTER_MAIN_TITLE ("ScreenEdit","Enter a new main title."); static LocalizedString ENTER_MAIN_TITLE ("ScreenEdit","Enter a new main title.");
@@ -4344,8 +4436,6 @@ static LocalizedString ENTER_ARTIST_TRANSLIT ("ScreenEdit","Enter a new artist
static LocalizedString ENTER_LAST_SECOND_HINT ("ScreenEdit","Enter a new last second hint."); static LocalizedString ENTER_LAST_SECOND_HINT ("ScreenEdit","Enter a new last second hint.");
static LocalizedString ENTER_PREVIEW_START ("ScreenEdit","Enter a new preview start."); static LocalizedString ENTER_PREVIEW_START ("ScreenEdit","Enter a new preview start.");
static LocalizedString ENTER_PREVIEW_LENGTH ("ScreenEdit","Enter a new preview length."); static LocalizedString ENTER_PREVIEW_LENGTH ("ScreenEdit","Enter a new preview length.");
static LocalizedString ENTER_MIN_BPM ("ScreenEdit","Enter a new min BPM.");
static LocalizedString ENTER_MAX_BPM ("ScreenEdit","Enter a new max BPM.");
void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vector<int> &iAnswers ) void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vector<int> &iAnswers )
{ {
Song* pSong = GAMESTATE->m_pCurSong; Song* pSong = GAMESTATE->m_pCurSong;
@@ -4403,6 +4493,7 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec
ScreenTextEntry::FloatValidate, ChangeMaxBPM, NULL ); ScreenTextEntry::FloatValidate, ChangeMaxBPM, NULL );
break; break;
}; };
SetDirty(true);
} }
+16 -2
View File
@@ -380,6 +380,7 @@ public:
options, /**< Modify the PlayerOptions and SongOptions. */ options, /**< Modify the PlayerOptions and SongOptions. */
edit_song_info, /**< Edit some general information about the song. */ edit_song_info, /**< Edit some general information about the song. */
edit_timing_data, /**< Edit the chart's timing data. */ edit_timing_data, /**< Edit the chart's timing data. */
view_steps_data, /**< View step statistics. */
play_preview_music, /**< Play the song's preview music. */ play_preview_music, /**< Play the song's preview music. */
exit, exit,
save_on_exit, save_on_exit,
@@ -408,6 +409,7 @@ public:
convert_to_delay, /**< Convert the range into a DelaySegment. */ convert_to_delay, /**< Convert the range into a DelaySegment. */
convert_to_warp, /**< Convert the range into a WarpSegment. */ convert_to_warp, /**< Convert the range into a WarpSegment. */
convert_to_fake, /**< Convert the range into a FakeSegment. */ convert_to_fake, /**< Convert the range into a FakeSegment. */
convert_to_attack, /**< Convert the range into an Attack. */
routine_invert_notes, /**< Switch which player hits the note. */ routine_invert_notes, /**< Switch which player hits the note. */
routine_mirror_1_to_2, /**< Mirror Player 1's notes for Player 2. */ routine_mirror_1_to_2, /**< Mirror Player 1's notes for Player 2. */
routine_mirror_2_to_1, /**< Mirror Player 2's notes for Player 1. */ routine_mirror_2_to_1, /**< Mirror Player 2's notes for Player 1. */
@@ -510,20 +512,32 @@ public:
chartstyle, /**< How is this chart meant to be played? */ chartstyle, /**< How is this chart meant to be played? */
step_credit, /**< Who wrote this individual chart? */ step_credit, /**< Who wrote this individual chart? */
predict_meter, /**< What does the game think this chart's rating should be? */ predict_meter, /**< What does the game think this chart's rating should be? */
step_display_bpm,
step_min_bpm,
step_max_bpm,
NUM_STEPS_INFORMATION_CHOICES
};
void HandleStepsInformationChoice( StepsInformationChoice c, const vector<int> &iAnswers );
enum StepsDataChoice
{
tap_notes, tap_notes,
jumps, jumps,
hands, hands,
quads, quads,
holds, holds,
mines, mines,
rolls,
lifts,
fakes,
stream, stream,
voltage, voltage,
air, air,
freeze, freeze,
chaos, chaos,
NUM_STEPS_INFORMATION_CHOICES NUM_STEPS_DATA_CHOICES
}; };
void HandleStepsInformationChoice( StepsInformationChoice c, const vector<int> &iAnswers ); void HandleStepsDataChoice(StepsDataChoice c, const vector<int> &answers);
enum SongInformationChoice enum SongInformationChoice
{ {
+4 -1
View File
@@ -41,7 +41,7 @@
* @brief The internal version of the cache for StepMania. * @brief The internal version of the cache for StepMania.
* *
* Increment this value to invalidate the current cache. */ * Increment this value to invalidate the current cache. */
const int FILE_CACHE_VERSION = 188; const int FILE_CACHE_VERSION = 189;
/** @brief How long does a song sample last by default? */ /** @brief How long does a song sample last by default? */
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
@@ -202,6 +202,9 @@ void Song::InitSteps(Steps *pSteps)
pSteps->m_Timing = this->m_SongTiming; pSteps->m_Timing = this->m_SongTiming;
pSteps->m_sAttackString = this->m_sAttackString; pSteps->m_sAttackString = this->m_sAttackString;
pSteps->m_Attacks = this->m_Attacks; pSteps->m_Attacks = this->m_Attacks;
pSteps->SetDisplayBPM(this->m_DisplayBPMType);
pSteps->SetMinBPM(this->m_fSpecifiedBPMMin);
pSteps->SetMaxBPM(this->m_fSpecifiedBPMMax);
} }
void Song::GetDisplayBpms( DisplayBpms &AddTo ) const void Song::GetDisplayBpms( DisplayBpms &AddTo ) const
+1 -1
View File
@@ -20,7 +20,7 @@ void FixupPath( RString &path, const RString &sSongPath );
RString GetSongAssetPath( RString sPath, const RString &sSongPath ); RString GetSongAssetPath( RString sPath, const RString &sSongPath );
/** @brief The version of the .ssc file format. */ /** @brief The version of the .ssc file format. */
const static float STEPFILE_VERSION_NUMBER = 0.74f; const static float STEPFILE_VERSION_NUMBER = 0.75f;
/** @brief How many edits for this song can each profile have? */ /** @brief How many edits for this song can each profile have? */
const int MAX_EDITS_PER_SONG_PER_PROFILE = 15; const int MAX_EDITS_PER_SONG_PER_PROFILE = 15;