Merge with default
This commit is contained in:
@@ -8,6 +8,17 @@ ________________________________________________________________________________
|
||||
StepMania 5.0 Preview 2 | 201107??
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
2011/07/03
|
||||
----------
|
||||
* [Player] Bring mMods from OpenITG over. Also, a metric was added,
|
||||
"MModHighCap", to cap the speed mod if required for playing songs like
|
||||
Tsuhsuixamush. Set the metric to 0 or less to remove the cap. [AJ, sharksoda,
|
||||
Wolfman2000]
|
||||
|
||||
2011/07/02
|
||||
----------
|
||||
* [ScreenEdit] Fixed a crash when hitting Enter in the F1 help menu. [AJ]
|
||||
|
||||
2011/06/30
|
||||
----------
|
||||
* [NotesAll] Use #FIRSTSECOND, #LASTSECOND, and #LASTSECONDHINT instead of the
|
||||
|
||||
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
|
||||
StartDrawingHoldBodyOffsetFromHead=0
|
||||
StopDrawingHoldBodyOffsetFromTail=-32
|
||||
|
||||
TapNoteAnimationIsVivid=0
|
||||
|
||||
# control the vertical
|
||||
TapNoteNoteColorTextureCoordSpacingX=0
|
||||
TapNoteNoteColorTextureCoordSpacingY=0
|
||||
|
||||
TapNoteAdditionTextureCoordOffsetX=0
|
||||
TapNoteAdditionTextureCoordOffsetY=0.5
|
||||
|
||||
|
||||
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
|
||||
StartDrawingHoldBodyOffsetFromHead=0
|
||||
StopDrawingHoldBodyOffsetFromTail=-32
|
||||
|
||||
TapNoteAnimationIsVivid=0
|
||||
|
||||
# control the vertical
|
||||
TapNoteNoteColorTextureCoordSpacingX=0
|
||||
TapNoteNoteColorTextureCoordSpacingY=0
|
||||
|
||||
TapNoteAdditionTextureCoordOffsetX=0
|
||||
TapNoteAdditionTextureCoordOffsetY=0.5
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -68,7 +68,7 @@ local function ParseSpeedModFile(path)
|
||||
return mods
|
||||
else
|
||||
-- error; write a fallback mod file and return it
|
||||
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C200,C400"
|
||||
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C200,C400,m550"
|
||||
Trace("[CustomSpeedMods]: Could not read SpeedMods; writing fallback to "..path)
|
||||
file:Open(path, 2)
|
||||
file:Write(fallbackString)
|
||||
@@ -148,6 +148,7 @@ end
|
||||
|
||||
local function SpeedModSort(tab)
|
||||
local xMods = {}
|
||||
local mMods = {}
|
||||
local cMods = {}
|
||||
--local mMods = {}
|
||||
|
||||
@@ -159,10 +160,9 @@ local function SpeedModSort(tab)
|
||||
if string.find(tab[i],"C%d") then
|
||||
typ = cMods
|
||||
val = string.gsub(tab[i], "C", "")
|
||||
elseif string.find(tab[i],"M%d") then
|
||||
Trace("[CustomSpeedMods] OpenITG's M-Mods are not supported yet in sm-ssc.")
|
||||
--typ = mMods
|
||||
--val = string.gsub(tab[i], "M", "")
|
||||
elseif string.find(tab[i],"m%d") then
|
||||
typ = mMods
|
||||
val = string.gsub(tab[i], "m", "")
|
||||
else
|
||||
typ = xMods
|
||||
val = string.gsub(tab[i], "x", "")
|
||||
@@ -175,7 +175,7 @@ local function SpeedModSort(tab)
|
||||
-- sort cMods
|
||||
cMods = AnonSort(cMods)
|
||||
-- sort mMods
|
||||
--mMods = AnonSort(mMods)
|
||||
mMods = AnonSort(mMods)
|
||||
local fin = {}
|
||||
-- convert it back to a string since that's what it expects
|
||||
for i=1,#xMods do
|
||||
@@ -184,6 +184,9 @@ local function SpeedModSort(tab)
|
||||
for i=1,#cMods do
|
||||
table.insert(fin, "C"..cMods[i])
|
||||
end
|
||||
for i=1,#mMods do
|
||||
table.insert(fin, "m"..mMods[i])
|
||||
end
|
||||
--for i=1,#mMods do table.insert(fin, "M"..mMods[i]); end;
|
||||
return fin
|
||||
end
|
||||
|
||||
@@ -67,7 +67,7 @@ r['DDR 4thMIX'] = function(params, pss)
|
||||
local capScore = 999999999;
|
||||
local bestPoints = scoreLookupTable['TapNoteScore_W1'];
|
||||
local bestCombo = bestPoints and comboBonusForThisStep or 0;
|
||||
pss:SeCurMaxScore(clamp(pss:GeCurMaxScore()+bestPoints+bestCombo,0,capScore));
|
||||
pss:SetCurMaxScore(clamp(pss:GetCurMaxScore()+bestPoints+bestCombo,0,capScore));
|
||||
local localPoints = scoreLookupTable[params.TapNoteScore];
|
||||
local localCombo = localPoints and comboBonusForThisStep or 0;
|
||||
pss:SetScore(clamp(pss:GetScore()+localPoints+localCombo,0,capScore));
|
||||
@@ -140,8 +140,7 @@ r['HYBRID'] = function(params, pss)
|
||||
};
|
||||
setmetatable(multLookup, ZeroIfNotFound);
|
||||
local radarValues = GetDirectRadar(params.Player);
|
||||
local totalItems = GetTotalItems(radarValues)
|
||||
- radarValues:GetValue('RadarCategory_Lifts');
|
||||
local totalItems = GetTotalItems(radarValues);
|
||||
-- 1+2+3+...+totalItems の値
|
||||
local sTotal = (totalItems+1)*totalItems/2;
|
||||
-- [en] Score for one song
|
||||
@@ -201,25 +200,21 @@ r['DDR SuperNOVA 2'] = function(params, pss)
|
||||
};
|
||||
setmetatable(multLookup, ZeroIfNotFound);
|
||||
local radarValues = GetDirectRadar(params.Player);
|
||||
local numLifts = radarValues:GetCategory('RadarCategory_Lifts')
|
||||
local numFakes = radarValues:GetCategory('RadarCategory_Fakes')
|
||||
local totalItems = GetTotalItems(radarValues) - (numLifts + numFakes);
|
||||
local totalItems = GetTotalItems(radarValues);
|
||||
|
||||
-- handle holds
|
||||
local maxAdd = 0
|
||||
local maxAdd = 0;
|
||||
if params.HoldNoteScore == 'HoldNoteScore_Held' then
|
||||
maxAdd = 10
|
||||
maxAdd = 10;
|
||||
elseif params.HoldNoteScore == 'HoldNoteScore_LetGo' then
|
||||
maxAdd = 0;
|
||||
else
|
||||
if params.HoldNoteScore == 'HoldNoteScore_LetGo' then
|
||||
maxAdd = 0
|
||||
else
|
||||
maxAdd = multLookup[params.TapNoteScore]
|
||||
if params.TapNoteScore == 'TapNoteScore_W2' or 'TapNoteScore_W3' then
|
||||
-- [ja] 超最終手段
|
||||
pss:SetCurMaxScore( pss:GetCurMaxScore() + 1000000 )
|
||||
end
|
||||
end
|
||||
end
|
||||
maxAdd = multLookup[params.TapNoteScore];
|
||||
if params.TapNoteScore == 'TapNoteScore_W2' or 'TapNoteScore_W3' then
|
||||
-- [ja] 超最終手段
|
||||
pss:SetCurMaxScore( pss:GetCurMaxScore() + 1000000 );
|
||||
end;
|
||||
end;
|
||||
pss:SetCurMaxScore(pss:GetCurMaxScore() + maxAdd);
|
||||
|
||||
--[[
|
||||
|
||||
@@ -1086,7 +1086,8 @@ CheckpointsUseTickcounts=(GAMESTATE:GetCurrentGame():GetName() == "pump")
|
||||
; deprecated?
|
||||
CheckpointsUseTimeSignatures=false
|
||||
CheckpointsTapsSeparateJudgment=CheckpointsTapsSeparateJudgment()
|
||||
CheckpointsFlashOnHold=false
|
||||
; someone misunderstood me :x -Daisu
|
||||
CheckpointsFlashOnHold=(GAMESTATE:GetCurrentGame():GetName() == "pump")
|
||||
ImmediateHoldLetGo=ImmediateHoldLetGo()
|
||||
RequireStepOnHoldHeads=HoldHeadStep()
|
||||
RequireStepOnMines=false
|
||||
@@ -1100,6 +1101,7 @@ ComboStoppedAt=50
|
||||
AttackRunTimeRandom=6
|
||||
AttackRunTimeMine=7
|
||||
BattleRaveMirror=true
|
||||
MModHighCap=600
|
||||
|
||||
[PlayerOptions]
|
||||
RandomSpeedChance=0.2
|
||||
|
||||
@@ -835,7 +835,6 @@ IconChoiceEndlessOffCommand=linear,0.1175;zoomx,0
|
||||
[ScreenGameInformation]
|
||||
|
||||
[ScreenSelectMusic]
|
||||
SampleMusicPreviewMode='SampleMusicPreviewMode_LastSong'
|
||||
UsePlayerSelectMenu=false
|
||||
# OptionsMenuAvailable=(getenv(sMode) ~= Oni)
|
||||
SelectMenuAvailable=true
|
||||
|
||||
Binary file not shown.
+14
-6
@@ -295,6 +295,7 @@ Section "Main Section" SecMain
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi"
|
||||
; we may also want to remove the new ones.
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note-3d"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-solo"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-vivid"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-rhythm-p1"
|
||||
@@ -456,6 +457,7 @@ Section "Main Section" SecMain
|
||||
File "Docs\Changelog_sm5.txt"
|
||||
File "Docs\Changelog_SSCformat.txt"
|
||||
File "Docs\CommandLineArgs.txt"
|
||||
File "Docs\CourseFormat.txt"
|
||||
File /r /x CVS /x .svn "Docs\license-ext"
|
||||
File /r /x CVS /x .svn "Docs\Luadoc"
|
||||
File /r /x CVS /x .svn "Docs\Themerdocs"
|
||||
@@ -532,21 +534,21 @@ Function ShowAutorun
|
||||
IfFileExists "$R1" show_play_and_reinstall
|
||||
|
||||
show_only_install:
|
||||
GetDlgItem $1 $hwnd 1201 ; Second cutom control
|
||||
GetDlgItem $1 $hwnd 1201 ; Second custom control
|
||||
ShowWindow $1 0
|
||||
GetDlgItem $1 $hwnd 1202 ; Third cutom control
|
||||
GetDlgItem $1 $hwnd 1202 ; Third custom control
|
||||
ShowWindow $1 0
|
||||
Goto done
|
||||
|
||||
show_play_and_reinstall:
|
||||
GetDlgItem $1 $hwnd 1200 ; First cutom control
|
||||
GetDlgItem $1 $hwnd 1200 ; First custom control
|
||||
ShowWindow $1 0
|
||||
|
||||
done:
|
||||
|
||||
; Now show the dialog and wait for it to finish
|
||||
InstallOptions::show
|
||||
|
||||
|
||||
; Finally fetch the InstallOptions status value (we don't care what it is though)
|
||||
Pop $0
|
||||
|
||||
@@ -574,7 +576,7 @@ Function LeaveAutorun
|
||||
play_error:
|
||||
MessageBox MB_ICONEXCLAMATION "$(TEXT_IO_COULD_NOT_EXECUTE)"
|
||||
abort
|
||||
|
||||
|
||||
proceed:
|
||||
GetDlgItem $1 $HWNDPARENT 1 ; Next button
|
||||
ShowWindow $1 1
|
||||
@@ -741,6 +743,7 @@ Section "Uninstall"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\default"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\Delta"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note-3d"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-routine-p1"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-routine-p2"
|
||||
RMDir /r "$INSTDIR\NoteSkins\dance\midi-solo"
|
||||
@@ -751,8 +754,13 @@ Section "Uninstall"
|
||||
RMDir "$INSTDIR\NoteSkins\dance"
|
||||
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\cmd"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\cmd-routine-p1"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\cmd-routine-p2"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\complex"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\default"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\frame5p"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\newextra"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\rhythm"
|
||||
RMDir /r "$INSTDIR\NoteSkins\pump\simple"
|
||||
RMDir "$INSTDIR\NoteSkins\pump"
|
||||
|
||||
@@ -824,7 +832,7 @@ Section "Uninstall"
|
||||
Delete "$INSTDIR\Program\zlib1.dll"
|
||||
RMDir "$INSTDIR\Program"
|
||||
|
||||
Delete "$INSTDIR\Licenses.txt"
|
||||
Delete "$INSTDIR\Docs\Licenses.txt"
|
||||
RMDir /r "$INSTDIR\Manual"
|
||||
!endif
|
||||
|
||||
|
||||
@@ -360,12 +360,17 @@ float DisplayBpms::GetMin() const
|
||||
}
|
||||
|
||||
float DisplayBpms::GetMax() const
|
||||
{
|
||||
return this->GetMaxWithin();
|
||||
}
|
||||
|
||||
float DisplayBpms::GetMaxWithin(float highest) const
|
||||
{
|
||||
float fMax = 0;
|
||||
FOREACH_CONST( float, vfBpms, f )
|
||||
{
|
||||
if( *f != -1 )
|
||||
fMax = max( fMax, *f );
|
||||
fMax = clamp(max( fMax, *f ), 0, highest);
|
||||
}
|
||||
return fMax;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#define GAME_CONSTANTS_AND_TYPES_H
|
||||
|
||||
#include "EnumHelper.h"
|
||||
#include <float.h> // need the max for default.
|
||||
|
||||
// Note definitions
|
||||
/** @brief Define the mininum difficulty value allowed. */
|
||||
@@ -513,6 +514,13 @@ struct DisplayBpms
|
||||
* @return the maximum BPM.
|
||||
*/
|
||||
float GetMax() const;
|
||||
/**
|
||||
* @brief Retrieve the maximum BPM of the set,
|
||||
* but no higher than a certain value.
|
||||
* @param highest the highest BPM to use.
|
||||
* @return the maximum BPM.
|
||||
*/
|
||||
float GetMaxWithin(float highest = FLT_MAX) const;
|
||||
/**
|
||||
* @brief Determine if the BPM is really constant.
|
||||
* @return Whether the BPM is constant or not.
|
||||
|
||||
@@ -201,6 +201,12 @@ ThemeMetric<int> COMBO_STOPPED_AT ( "Player", "ComboStoppedAt" );
|
||||
ThemeMetric<float> ATTACK_RUN_TIME_RANDOM ( "Player", "AttackRunTimeRandom" );
|
||||
ThemeMetric<float> ATTACK_RUN_TIME_MINE ( "Player", "AttackRunTimeMine" );
|
||||
|
||||
/**
|
||||
* @brief What is our highest cap for mMods?
|
||||
*
|
||||
* If set to 0 or less, assume the song takes over. */
|
||||
ThemeMetric<float> M_MOD_HIGH_CAP("Player", "MModHighCap");
|
||||
|
||||
/** @brief Will battle modes have their steps mirrored or kept the same? */
|
||||
ThemeMetric<bool> BATTLE_RAVE_MIRROR ( "Player", "BattleRaveMirror" );
|
||||
|
||||
@@ -401,6 +407,69 @@ void Player::Init(
|
||||
break;
|
||||
}
|
||||
|
||||
// calculate M-mod speed here, so we can adjust properly on a per-song basis.
|
||||
// XXX: can we find a better location for this?
|
||||
if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fMaxScrollBPM != 0 )
|
||||
{
|
||||
DisplayBpms bpms;
|
||||
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
ASSERT( GAMESTATE->m_pCurTrail[pn] );
|
||||
GAMESTATE->m_pCurTrail[pn]->GetDisplayBpms( bpms );
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT( GAMESTATE->m_pCurSong );
|
||||
GAMESTATE->m_pCurSong->GetDisplayBpms( bpms );
|
||||
}
|
||||
|
||||
float fMaxBPM = 0;
|
||||
|
||||
/* TODO: Find a way to not go above a certain BPM range
|
||||
* for getting the max BPM. Otherwise, you get songs
|
||||
* like Tsuhsuixamush, M550, 0.18x speed. Even slow
|
||||
* speed readers would not generally find this fun.
|
||||
* -Wolfman2000
|
||||
*/
|
||||
|
||||
// all BPMs are listed and available, so try them first.
|
||||
// get the maximum listed value for the song or course.
|
||||
// if the BPMs are < 0, reset and get the actual values.
|
||||
if( !bpms.IsSecret() )
|
||||
{
|
||||
fMaxBPM = (M_MOD_HIGH_CAP > 0 ?
|
||||
bpms.GetMaxWithin(M_MOD_HIGH_CAP) :
|
||||
bpms.GetMax());
|
||||
fMaxBPM = max( 0, fMaxBPM );
|
||||
}
|
||||
|
||||
// we can't rely on the displayed BPMs, so manually calculate.
|
||||
if( fMaxBPM == 0 )
|
||||
{
|
||||
float fThrowAway = 0;
|
||||
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
FOREACH_CONST( TrailEntry, GAMESTATE->m_pCurTrail[pn]->m_vEntries, e )
|
||||
{
|
||||
float fMaxForEntry;
|
||||
e->pSong->m_SongTiming.GetActualBPM( fThrowAway, fMaxForEntry );
|
||||
fMaxBPM = max( fMaxForEntry, fMaxBPM );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GAMESTATE->m_pCurSong->m_SongTiming.GetActualBPM( fThrowAway, fMaxBPM );
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT( fMaxBPM > 0 );
|
||||
|
||||
// set an X-mod equal to Mnum / fMaxBPM (e.g. M600 with 150 becomes 4x)
|
||||
PO_GROUP_ASSIGN(m_pPlayerState->m_PlayerOptions, ModsLevel_Preferred, m_fScrollSpeed,
|
||||
m_pPlayerState->m_PlayerOptions.GetPreferred().m_fMaxScrollBPM / fMaxBPM);
|
||||
}
|
||||
|
||||
float fBalance = GameSoundManager::GetPlayerBalance( pn );
|
||||
m_soundMine.SetProperty( "Pan", fBalance );
|
||||
|
||||
+43
-6
@@ -26,6 +26,7 @@ ThemeMetric<float> RANDOM_SUDDEN_CHANCE ( "PlayerOptions", "RandomSuddenChance"
|
||||
void PlayerOptions::Init()
|
||||
{
|
||||
m_bSetScrollSpeed = false;
|
||||
m_fMaxScrollBPM = 0; m_SpeedfMaxScrollBPM = 1.0f;
|
||||
m_fTimeSpacing = 0; m_SpeedfTimeSpacing = 1.0f;
|
||||
m_fScrollSpeed = 1.0f; m_SpeedfScrollSpeed = 1.0f;
|
||||
m_fScrollBPM = 200; m_SpeedfScrollBPM = 1.0f;
|
||||
@@ -60,6 +61,7 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds )
|
||||
|
||||
APPROACH( fTimeSpacing );
|
||||
APPROACH( fScrollSpeed );
|
||||
APPROACH( fMaxScrollBPM );
|
||||
fapproach( m_fScrollBPM, other.m_fScrollBPM, fDeltaSeconds * other.m_SpeedfScrollBPM*150 );
|
||||
for( int i=0; i<NUM_ACCELS; i++ )
|
||||
APPROACH( fAccels[i] );
|
||||
@@ -116,6 +118,11 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
|
||||
|
||||
if( !m_fTimeSpacing )
|
||||
{
|
||||
if( m_fMaxScrollBPM )
|
||||
{
|
||||
RString s = ssprintf( "m%.0f", m_fMaxScrollBPM );
|
||||
AddTo.push_back( s );
|
||||
}
|
||||
if( m_bSetScrollSpeed || m_fScrollSpeed != 1 )
|
||||
{
|
||||
/* -> 1.00 */
|
||||
@@ -332,6 +339,7 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
|
||||
SET_FLOAT( fScrollSpeed )
|
||||
SET_FLOAT( fTimeSpacing )
|
||||
m_fTimeSpacing = 0;
|
||||
m_fMaxScrollBPM = 0;
|
||||
}
|
||||
else if( sscanf( sBit, "c%f", &level ) == 1 )
|
||||
{
|
||||
@@ -340,17 +348,18 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
|
||||
SET_FLOAT( fScrollBPM )
|
||||
SET_FLOAT( fTimeSpacing )
|
||||
m_fTimeSpacing = 1;
|
||||
m_fMaxScrollBPM = 0;
|
||||
}
|
||||
/* Port M-Mods from OpenITG, starting from r537 */
|
||||
// Midiman
|
||||
// oITG's m-mods
|
||||
// XXX: will not properly tween, I don't think.
|
||||
else if( sscanf( sBit, "m%f", &level ) == 1 )
|
||||
{
|
||||
if( !isfinite(level) || level <= 0.0f )
|
||||
level = 200.0f; // Just pick some value.
|
||||
SET_FLOAT( fScrollBPM )
|
||||
SET_FLOAT( fTimeSpacing )
|
||||
m_fTimeSpacing = 1;
|
||||
level = 200.0f;
|
||||
SET_FLOAT( fMaxScrollBPM )
|
||||
m_fTimeSpacing = 0;
|
||||
}
|
||||
|
||||
else if( sBit == "clearall" ) Init();
|
||||
else if( sBit == "boost" ) SET_FLOAT( fAccels[ACCEL_BOOST] )
|
||||
else if( sBit == "brake" || sBit == "land" ) SET_FLOAT( fAccels[ACCEL_BRAKE] )
|
||||
@@ -650,6 +659,7 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
|
||||
COMPARE(m_fTimeSpacing);
|
||||
COMPARE(m_fScrollSpeed);
|
||||
COMPARE(m_fScrollBPM);
|
||||
COMPARE(m_fMaxScrollBPM);
|
||||
COMPARE(m_fRandomSpeed);
|
||||
COMPARE(m_FailType);
|
||||
COMPARE(m_bMuteOnError);
|
||||
@@ -717,6 +727,31 @@ bool PlayerOptions::IsEasierForSongAndSteps( Song* pSong, Steps* pSteps, PlayerN
|
||||
return true;
|
||||
|
||||
if( m_fCover ) return true;
|
||||
|
||||
// M-mods make songs with indefinite BPMs easier because
|
||||
// they ensure that the song has a scrollable speed.
|
||||
if( m_fMaxScrollBPM != 0 )
|
||||
{
|
||||
// BPM display is obfuscated
|
||||
// if( pSong->m_DisplayBPMType == DISPLAY_BPM_RANDOM )
|
||||
// return true;
|
||||
|
||||
DisplayBpms bpms;
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
Trail *pTrail = GAMESTATE->m_pCurCourse->GetTrail( GAMESTATE->GetCurrentStyle()->m_StepsType );
|
||||
pTrail->GetDisplayBpms( bpms );
|
||||
}
|
||||
else
|
||||
{
|
||||
GAMESTATE->m_pCurSong->GetDisplayBpms( bpms );
|
||||
}
|
||||
pSong->GetDisplayBpms( bpms );
|
||||
|
||||
// maximum BPM is obfuscated, so M-mods will set a playable speed.
|
||||
if( bpms.GetMax() <= 0 )
|
||||
return true;
|
||||
}
|
||||
if( m_fPlayerAutoPlay ) return true;
|
||||
return false;
|
||||
}
|
||||
@@ -788,6 +823,7 @@ RString PlayerOptions::GetSavedPrefsString() const
|
||||
SAVE( m_fTimeSpacing );
|
||||
SAVE( m_fScrollSpeed );
|
||||
SAVE( m_fScrollBPM );
|
||||
SAVE( m_fMaxScrollBPM );
|
||||
SAVE( m_fScrolls[SCROLL_REVERSE] );
|
||||
SAVE( m_fPerspectiveTilt );
|
||||
SAVE( m_bTransforms[TRANSFORM_NOHOLDS] );
|
||||
@@ -816,6 +852,7 @@ void PlayerOptions::ResetPrefs( ResetPrefsType type )
|
||||
CPY( m_fTimeSpacing );
|
||||
CPY( m_fScrollSpeed );
|
||||
CPY( m_fScrollBPM );
|
||||
CPY( m_fMaxScrollBPM );
|
||||
break;
|
||||
case saved_prefs_invalid_for_course:
|
||||
break;
|
||||
|
||||
@@ -157,6 +157,7 @@ public:
|
||||
* PlayerOptions::Approach approaches. */
|
||||
bool m_bSetScrollSpeed; // true if the scroll speed was set by FromString
|
||||
float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing (CMods, mMods)
|
||||
float m_fMaxScrollBPM, m_SpeedfMaxScrollBPM;
|
||||
float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing (xMods)
|
||||
float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing (CMod)
|
||||
float m_fAccels[NUM_ACCELS], m_SpeedfAccels[NUM_ACCELS];
|
||||
|
||||
+2
-2
@@ -35,7 +35,7 @@
|
||||
* </li></ul>
|
||||
*/
|
||||
#ifndef PRODUCT_VER_BARE
|
||||
#define PRODUCT_VER_BARE v5.0 Preview 1a
|
||||
#define PRODUCT_VER_BARE v5.0 Preview 2
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -54,7 +54,7 @@
|
||||
#define PRODUCT_VER PRODUCT_XSTRINGIFY(PRODUCT_VER_BARE)
|
||||
#define PRODUCT_ID_VER PRODUCT_XSTRINGIFY(PRODUCT_ID_VER_BARE)
|
||||
|
||||
#define VIDEO_TROUBLESHOOTING_URL "http://www.stepmania.com/stepmania/mediawiki.php?title=Video_Driver_Troubleshooting"
|
||||
#define VIDEO_TROUBLESHOOTING_URL "http://www.stepmania.com/stepmaniawiki.php?title=Video_Driver_Troubleshooting"
|
||||
/** @brief The URL to report bugs on the program. */
|
||||
#define REPORT_BUG_URL "http://ssc.ajworld.net/sm-ssc/bugtracker/"
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
; see ProductInfo.h for use descriptions
|
||||
!define PRODUCT_ID "StepMania"
|
||||
!define PRODUCT_VER "v5.0 Preview 1a"
|
||||
!define PRODUCT_VER "v5.0 Preview 2"
|
||||
!define PRODUCT_DISPLAY "${PRODUCT_ID} ${PRODUCT_VER}"
|
||||
!define PRODUCT_BITMAP "ssc"
|
||||
|
||||
|
||||
+3
-3
@@ -1242,14 +1242,14 @@ bool GetFileContents( const RString &sPath, RString &sOut, bool bOneLine )
|
||||
/* Don't warn if the file doesn't exist, but do warn if it exists and fails to open. */
|
||||
if( !IsAFile(sPath) )
|
||||
return false;
|
||||
|
||||
|
||||
RageFile file;
|
||||
if( !file.Open(sPath) )
|
||||
{
|
||||
LOG->Warn( "GetFileContents(%s): %s", sPath.c_str(), file.GetError().c_str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
RString sData;
|
||||
int iGot;
|
||||
if( bOneLine )
|
||||
@@ -1265,7 +1265,7 @@ bool GetFileContents( const RString &sPath, RString &sOut, bool bOneLine )
|
||||
|
||||
if( bOneLine )
|
||||
StripCrnl( sData );
|
||||
|
||||
|
||||
sOut = sData;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -808,7 +808,17 @@ void ScreenOptions::MenuStart( const InputEventPlus &input )
|
||||
void ScreenOptions::ProcessMenuStart( const InputEventPlus &input )
|
||||
{
|
||||
PlayerNumber pn = input.pn;
|
||||
|
||||
int iCurRow = m_iCurrentRow[pn];
|
||||
|
||||
if( iCurRow < 0 )
|
||||
{
|
||||
// this shouldn't be happening, but it is, so we need to bail out. -aj
|
||||
SCREENMAN->PlayStartSound();
|
||||
this->BeginFadingOut();
|
||||
return;
|
||||
}
|
||||
|
||||
OptionRow &row = *m_pRows[iCurRow];
|
||||
|
||||
if( m_OptionsNavigation == NAV_THREE_KEY_MENU && row.GetRowType() != OptionRow::RowType_Exit )
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
AdditionalIncludeDirectories=".;"..\extern\lua-5.1\src";ffmpeg\modern_working\include;BaseClasses;..\extern\jsoncpp\include;"..\extern\glew-1.5.8\include";..\extern\pcre;"..\extern\mad-0.15.1b";..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis"
|
||||
PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WINDOWS,RELEASE,GLEW_STATIC"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WINDOWS;RELEASE;GLEW_STATIC"
|
||||
StringPooling="true"
|
||||
MinimalRebuild="false"
|
||||
ExceptionHandling="0"
|
||||
|
||||
+1
-6
@@ -1332,12 +1332,7 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
|
||||
m_LabelSegments[i].Scale( iStartIndex, length, newLength );
|
||||
|
||||
for ( unsigned i = 0; i < m_SpeedSegments.size(); i++ )
|
||||
{
|
||||
SpeedSegment &s = m_SpeedSegments[i];
|
||||
s.Scale( iStartIndex, length, newLength );
|
||||
if (s.GetUnit() == 0) // beats
|
||||
s.SetLength(s.GetLength() * fScale);
|
||||
}
|
||||
m_SpeedSegments[i].Scale( iStartIndex, length, newLength );
|
||||
|
||||
for( unsigned i = 0; i < m_FakeSegments.size(); i++ )
|
||||
m_FakeSegments[i].Scale( iStartIndex, length, newLength );
|
||||
|
||||
@@ -250,6 +250,20 @@ void SpeedSegment::SetUnit(const int i)
|
||||
this->unit = static_cast<unsigned short>(i);
|
||||
}
|
||||
|
||||
void SpeedSegment::Scale( int start, int length, int newLength )
|
||||
{
|
||||
if( GetUnit() == 0 )
|
||||
{
|
||||
// XXX: this function is duplicated, there should be a better way
|
||||
float startBeat = GetBeat();
|
||||
float endBeat = startBeat + GetLength();
|
||||
float newStartBeat = ScalePosition( NoteRowToBeat(start), NoteRowToBeat(length), NoteRowToBeat(newLength), startBeat );
|
||||
float newEndBeat = ScalePosition( NoteRowToBeat(start), NoteRowToBeat(length), NoteRowToBeat(newLength), endBeat );
|
||||
SetLength( newEndBeat - newStartBeat );
|
||||
}
|
||||
TimingSegment<SpeedSegment>::Scale( start, length, newLength );
|
||||
}
|
||||
|
||||
bool SpeedSegment::operator<( const SpeedSegment &other ) const
|
||||
{
|
||||
LTCOMPARE(GetRow());
|
||||
|
||||
@@ -681,6 +681,8 @@ struct SpeedSegment : public TimingSegment<SpeedSegment>
|
||||
* @param i the unit. */
|
||||
void SetUnit(const int i);
|
||||
|
||||
void Scale( int start, int length, int newLength );
|
||||
|
||||
/**
|
||||
* @brief Compares two SpeedSegments to see if one is less than the other.
|
||||
* @param other the other SpeedSegment to compare to.
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 740 KiB |
@@ -181,8 +181,8 @@ IDI_ICON1 ICON "smzip.ico"
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 5,0,0,2
|
||||
PRODUCTVERSION 5,0,0,2
|
||||
FILEVERSION 5,0,0,3
|
||||
PRODUCTVERSION 5,0,0,3
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@@ -199,12 +199,12 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "StepMania Team\nhttp://www.stepmania.com/"
|
||||
VALUE "FileDescription", "StepMania"
|
||||
VALUE "FileVersion", "5, 0, 0, 2"
|
||||
VALUE "InternalName", "sm-ssc"
|
||||
VALUE "FileVersion", "5, 0, 0, 3"
|
||||
VALUE "InternalName", "sm-ssc v1.3.1"
|
||||
VALUE "LegalCopyright", "Copyright © 2001-2011"
|
||||
VALUE "OriginalFilename", "StepMania.exe"
|
||||
VALUE "ProductName", "StepMania"
|
||||
VALUE "ProductVersion", "5, 0, 0, 2"
|
||||
VALUE "ProductVersion", "5, 0, 0, 3"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
||||
Reference in New Issue
Block a user