[default -> tiger] Now to stop 10.4 support.

...maybe. Hopefully. Was given an idea anyway.
This commit is contained in:
Jason Felds
2011-05-29 21:16:42 -04:00
219 changed files with 68703 additions and 63726 deletions
+1 -9
View File
@@ -18,8 +18,6 @@
static Preference<bool> g_bShowMasks("ShowMasks", false);
PlayerNumber Actor::m_ActivePlayerNumber = PLAYER_1;
/**
* @brief Set up a hidden Actor that won't be drawn.
*
@@ -311,11 +309,6 @@ void Actor::BeginDraw() // set the world matrix and calculate actor properties
m_pTempState = &tempState;
tempState = m_current;
// XXX HACK! We can't really determine the active player outside Draw() so
// figure it out just for this clock type here.
if( m_EffectClock == CLOCK_BGM_BEAT_PLAYER_ACTIVE )
m_fSecsIntoEffect = g_vfCurrentBGMBeatPlayerNoOffset[m_ActivePlayerNumber];
const float fTotalPeriod = GetEffectPeriod();
ASSERT( fTotalPeriod > 0 );
const float fTimeIntoEffect = fmodfp( m_fSecsIntoEffect+m_fEffectOffset, fTotalPeriod );
@@ -685,7 +678,6 @@ void Actor::UpdateInternal( float fDeltaTime )
break;
}
case CLOCK_BGM_BEAT_PLAYER_ACTIVE:
case CLOCK_BGM_BEAT:
m_fEffectDelta = g_fCurrentBGMBeat - m_fSecsIntoEffect;
m_fSecsIntoEffect = g_fCurrentBGMBeat;
@@ -855,7 +847,7 @@ void Actor::SetEffectClockString( const RString &s )
{
if (s.EqualsNoCase("timer")) this->SetEffectClock( CLOCK_TIMER );
if (s.EqualsNoCase("timerglobal")) this->SetEffectClock( CLOCK_TIMER_GLOBAL );
else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT_PLAYER_ACTIVE );
else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT );
else if(s.EqualsNoCase("music")) this->SetEffectClock( CLOCK_BGM_TIME );
else if(s.EqualsNoCase("bgm")) this->SetEffectClock( CLOCK_BGM_BEAT ); // compat, deprecated
else if(s.EqualsNoCase("musicnooffset"))this->SetEffectClock( CLOCK_BGM_TIME_NO_OFFSET );
-8
View File
@@ -113,13 +113,6 @@ public:
static void SetPlayerBGMBeat( PlayerNumber pn, float fBeat, float fBeatNoOffset );
static void SetBGMLight( int iLightNumber, float fCabinetLights );
/**
* @brief The actively-drawing player number. This is used as a hack
* so that we don't need to tell each actor which player it belongs to.
* This is used to figure out the right player for "beat" effect clock.
*/
static PlayerNumber m_ActivePlayerNumber;
/**
* @brief The list of the different effects.
*
@@ -142,7 +135,6 @@ public:
CLOCK_BGM_BEAT_NO_OFFSET,
CLOCK_BGM_BEAT_PLAYER1,
CLOCK_BGM_BEAT_PLAYER2,
CLOCK_BGM_BEAT_PLAYER_ACTIVE,
CLOCK_LIGHT_1 = 1000,
CLOCK_LIGHT_LAST = 1100,
NUM_CLOCKS
+57 -23
View File
@@ -35,6 +35,7 @@
#include "global.h"
#include "Song.h"
#include "Steps.h"
#include "AdjustSync.h"
#include "GameState.h"
#include "LocalizedString.h"
@@ -42,7 +43,7 @@
#include "ScreenManager.h"
#include "Foreach.h"
TimingData *AdjustSync::s_pTimingDataOriginal = NULL;
vector<TimingData> AdjustSync::s_vpTimingDataOriginal;
float AdjustSync::s_fGlobalOffsetSecondsOriginal = 0.0f;
int AdjustSync::s_iAutosyncOffsetSample = 0;
float AdjustSync::s_fAutosyncOffset[AdjustSync::OFFSET_SAMPLE_COUNT];
@@ -54,13 +55,22 @@ int AdjustSync::s_iStepsFiltered = 0;
void AdjustSync::ResetOriginalSyncData()
{
if( s_pTimingDataOriginal == NULL )
s_pTimingDataOriginal = new TimingData;
s_vpTimingDataOriginal.clear();
if( GAMESTATE->m_pCurSong )
*s_pTimingDataOriginal = GAMESTATE->m_pCurSong->m_SongTiming;
{
s_vpTimingDataOriginal.push_back(GAMESTATE->m_pCurSong->m_SongTiming);
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
{
s_vpTimingDataOriginal.push_back((*s)->m_Timing);
}
}
else
*s_pTimingDataOriginal = TimingData();
{
s_vpTimingDataOriginal.push_back(TimingData());
}
s_fGlobalOffsetSecondsOriginal = PREFSMAN->m_fGlobalOffsetSeconds;
ResetAutosync();
@@ -87,7 +97,10 @@ void AdjustSync::SaveSyncChanges()
{
if( GAMESTATE->IsCourseMode() )
return;
if( GAMESTATE->m_pCurSong && *s_pTimingDataOriginal != GAMESTATE->m_pCurSong->m_SongTiming )
/* TODO: Save all of the timing data changes.
* Luckily, only the song timing data needs comparing here. */
if( GAMESTATE->m_pCurSong && s_vpTimingDataOriginal[0] != GAMESTATE->m_pCurSong->m_SongTiming )
{
if( GAMESTATE->IsEditing() )
{
@@ -110,7 +123,18 @@ void AdjustSync::RevertSyncChanges()
if( GAMESTATE->IsCourseMode() )
return;
PREFSMAN->m_fGlobalOffsetSeconds.Set( s_fGlobalOffsetSecondsOriginal );
GAMESTATE->m_pCurSong->m_SongTiming = *s_pTimingDataOriginal;
// The first one is ALWAYS the song timing.
GAMESTATE->m_pCurSong->m_SongTiming = s_vpTimingDataOriginal[0];
unsigned location = 1;
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
{
(*s)->m_Timing = s_vpTimingDataOriginal[location];
location++;
}
ResetOriginalSyncData();
s_fStandardDeviation = 0.0f;
s_fAverageError = 0.0f;
@@ -185,14 +209,22 @@ void AdjustSync::AutosyncOffset()
{
switch( GAMESTATE->m_SongOptions.GetCurrent().m_AutosyncType )
{
case SongOptions::AUTOSYNC_SONG:
GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += mean;
break;
case SongOptions::AUTOSYNC_MACHINE:
PREFSMAN->m_fGlobalOffsetSeconds.Set( PREFSMAN->m_fGlobalOffsetSeconds + mean );
break;
default:
ASSERT(0);
case SongOptions::AUTOSYNC_SONG:
{
GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += mean;
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
{
(*s)->m_Timing.m_fBeat0OffsetInSeconds += mean;
}
break;
}
case SongOptions::AUTOSYNC_MACHINE:
// Step timing is not needed for this operation.
PREFSMAN->m_fGlobalOffsetSeconds.Set( PREFSMAN->m_fGlobalOffsetSeconds + mean );
break;
default:
ASSERT(0);
}
SCREENMAN->SystemMessage( AUTOSYNC_CORRECTION_APPLIED.GetValue() );
@@ -293,10 +325,12 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
if( GAMESTATE->m_pCurSong.Get() )
{
unsigned int iOriginalSize = vsAddTo.size();
TimingData original = s_vpTimingDataOriginal[0];
TimingData &testing = GAMESTATE->m_pCurSong->m_SongTiming;
{
float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_fBeat0OffsetInSeconds, 0.001f );
float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds, 0.001f );
float fOld = Quantize( original.m_fBeat0OffsetInSeconds, 0.001f );
float fNew = Quantize( testing.m_fBeat0OffsetInSeconds, 0.001f );
float fDelta = fNew - fOld;
if( fabsf(fDelta) > 0.0001f )
@@ -309,10 +343,10 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
}
}
for( unsigned i=0; i<GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments.size(); i++ )
for( unsigned i=0; i< testing.m_BPMSegments.size(); i++ )
{
float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_BPMSegments[i].GetBPM(), 0.001f );
float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments[i].GetBPM(), 0.001f );
float fOld = Quantize( original.m_BPMSegments[i].GetBPM(), 0.001f );
float fNew = Quantize( testing.m_BPMSegments[i].GetBPM(), 0.001f );
float fDelta = fNew - fOld;
if( fabsf(fDelta) > 0.0001f )
@@ -330,10 +364,10 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
}
}
for( unsigned i=0; i<GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments.size(); i++ )
for( unsigned i=0; i< testing.m_StopSegments.size(); i++ )
{
float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_StopSegments[i].m_fStopSeconds, 0.001f );
float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments[i].m_fStopSeconds, 0.001f );
float fOld = Quantize( original.m_StopSegments[i].m_fStopSeconds, 0.001f );
float fNew = Quantize( testing.m_StopSegments[i].m_fStopSeconds, 0.001f );
float fDelta = fNew - fOld;
if( fabsf(fDelta) > 0.0001f )
+6 -1
View File
@@ -13,7 +13,12 @@ class TimingData;
class AdjustSync
{
public:
static TimingData *s_pTimingDataOriginal;
/**
* @brief The original TimingData before adjustments were made.
*
* This is designed to work with Split Timing. */
static vector<TimingData> s_vpTimingDataOriginal;
static float s_fGlobalOffsetSecondsOriginal;
/* We only want to call the Reset methods before a song, not immediately after
* a song. If we reset it at the end of a song, we have to carefully check
+4 -45
View File
@@ -211,50 +211,6 @@ void ArrowEffects::Update()
}
}
float GetSpeedMultiplier( float fSongBeat, float fMusicSeconds, const TimingData &tim )
{
if( tim.m_SpeedSegments.size() == 0 )
return 1.0;
const int index = tim.GetSpeedSegmentIndexAtBeat( fSongBeat );
const SpeedSegment &seg = tim.m_SpeedSegments[index];
float fStartBeat = NoteRowToBeat(seg.m_iStartRow);
float fStartTime = tim.GetElapsedTimeFromBeat( fStartBeat ) - tim.GetDelayAtBeat( fStartBeat );
float fEndTime;
float fCurTime = fMusicSeconds;
if( seg.m_usMode == 1 ) // seconds
{
fEndTime = fStartTime + seg.m_fWait;
}
else
{
fEndTime = tim.GetElapsedTimeFromBeat( fStartBeat + seg.m_fWait ) - tim.GetDelayAtBeat( fStartBeat + seg.m_fWait );
}
if( ( index == 0 && tim.m_SpeedSegments[0].m_fWait > 0.0 ) && fCurTime < fStartTime )
{
return 1.0;
}
else if( fEndTime >= fCurTime && ( index > 0 || tim.m_SpeedSegments[0].m_fWait > 0.0 ) )
{
const float fPriorSpeed = ( index == 0 ? 1 : tim.m_SpeedSegments[index - 1].m_fPercent );
float fTimeUsed = fCurTime - fStartTime;
float fDuration = fEndTime - fStartTime;
float fRatioUsed = fDuration == 0.0 ? 1 : fTimeUsed / fDuration;
float fDistance = fPriorSpeed - seg.m_fPercent;
float fRatioNeed = fRatioUsed * -fDistance;
return (fPriorSpeed + fRatioNeed);
}
else
{
return seg.m_fPercent;
}
}
/* For visibility testing: if bAbsolute is false, random modifiers must return
* the minimum possible scroll speed. */
float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float fNoteBeat, float &fPeakYOffsetOut, bool &bIsPastPeakOut, bool bAbsolute )
@@ -275,9 +231,12 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
* entirely time spacing (respectively). Occasionally, we tween between them. */
if( pPlayerState->m_PlayerOptions.GetCurrent().m_fTimeSpacing != 1.0f )
{
float bShowEffects = !( GAMESTATE->m_bInStepEditor || !GAMESTATE->m_bIsUsingStepTiming );
float fBeatsUntilStep = fNoteBeat - fSongBeat;
if( bShowEffects )
fBeatsUntilStep = pCurSteps->m_Timing.GetDisplayedBeat(fNoteBeat) - pCurSteps->m_Timing.GetDisplayedBeat(fSongBeat);
float fYOffsetBeatSpacing = fBeatsUntilStep;
float fSpeedMultiplier = ( GAMESTATE->m_bInStepEditor || !GAMESTATE->m_bIsUsingStepTiming ) ? 1.0 : GetSpeedMultiplier( position.m_fSongBeatVisible, position.m_fMusicSecondsVisible, pCurSteps->m_Timing );
float fSpeedMultiplier = bShowEffects ? pCurSteps->m_Timing.GetDisplayedSpeedPercent( position.m_fSongBeatVisible, position.m_fMusicSecondsVisible ) : 1.0;
fYOffset += fSpeedMultiplier * fYOffsetBeatSpacing * (1-pPlayerState->m_PlayerOptions.GetCurrent().m_fTimeSpacing);
}
+1 -1
View File
@@ -254,7 +254,7 @@ int EditMenu::GetRowSize( EditMenuRow er ) const
case ROW_SOURCE_STEPS_TYPE: return m_StepsTypes.size();
case ROW_SOURCE_STEPS: return m_vpSourceSteps.size();
case ROW_ACTION: return m_Actions.size();
default: FAIL_M( ssprintf("%i", er) );
default: FAIL_M( ssprintf("Non-existant EditMenuRow %i", er) );
}
}
+11 -7
View File
@@ -14,7 +14,7 @@ void GameplayAssist::Init()
m_soundAssistMetronomeBeat.Load( THEME->GetPathS("GameplayAssist","metronome beat"), true );
}
void GameplayAssist::PlayTicks( const NoteData &nd )
void GameplayAssist::PlayTicks( const NoteData &nd, const PlayerState *ps )
{
bool bClap = GAMESTATE->m_SongOptions.GetCurrent().m_bAssistClap;
bool bMetronome = GAMESTATE->m_SongOptions.GetCurrent().m_bAssistMetronome;
@@ -25,9 +25,13 @@ void GameplayAssist::PlayTicks( const NoteData &nd )
* will start coming out the speaker. Compensate for this by boosting fPositionSeconds
* ahead. This is just to make sure that we request the sound early enough for it to
* come out on time; the actual precise timing is handled by SetStartTime. */
float fPositionSeconds = GAMESTATE->m_Position.m_fMusicSeconds;
SongPosition &position = GAMESTATE->m_pPlayerState[ps->m_PlayerNumber]->m_Position;
float fPositionSeconds = position.m_fMusicSeconds;
//float fPositionSeconds = GAMESTATE->m_Position.m_fMusicSeconds;
fPositionSeconds += SOUNDMAN->GetPlayLatency() + (float)CommonMetrics::TICK_EARLY_SECONDS + 0.250f;
const TimingData &timing = GAMESTATE->m_pCurSong->m_SongTiming;
const TimingData &timing = GAMESTATE->m_pCurSteps[ps->m_PlayerNumber]->m_Timing;
const float fSongBeat = timing.GetBeatFromElapsedTimeNoOffset( fPositionSeconds );
const int iSongRow = max( 0, BeatToNoteRowNotRounded( fSongBeat ) );
@@ -47,11 +51,11 @@ void GameplayAssist::PlayTicks( const NoteData &nd )
{
const float fTickBeat = NoteRowToBeat( iClapRow );
const float fTickSecond = timing.GetElapsedTimeFromBeatNoOffset( fTickBeat );
float fSecondsUntil = fTickSecond - GAMESTATE->m_Position.m_fMusicSeconds;
float fSecondsUntil = fTickSecond - position.m_fMusicSeconds;
fSecondsUntil /= GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; /* 2x music rate means the time until the tick is halved */
RageSoundParams p;
p.m_StartTime = GAMESTATE->m_Position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS);
p.m_StartTime = position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS);
m_soundAssistClap.Play( &p );
}
}
@@ -83,11 +87,11 @@ void GameplayAssist::PlayTicks( const NoteData &nd )
{
const float fTickBeat = NoteRowToBeat( iMetronomeRow );
const float fTickSecond = timing.GetElapsedTimeFromBeatNoOffset( fTickBeat );
float fSecondsUntil = fTickSecond - GAMESTATE->m_Position.m_fMusicSeconds;
float fSecondsUntil = fTickSecond - position.m_fMusicSeconds;
fSecondsUntil /= GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; /* 2x music rate means the time until the tick is halved */
RageSoundParams p;
p.m_StartTime = GAMESTATE->m_Position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS);
p.m_StartTime = position.m_LastBeatUpdate + (fSecondsUntil - (float)CommonMetrics::TICK_EARLY_SECONDS);
if( bIsMeasure )
m_soundAssistMetronomeMeasure.Play( &p );
else
+4 -2
View File
@@ -2,6 +2,7 @@
#define GameplayAssist_H
#include "RageSound.h"
#include "PlayerState.h"
class NoteData;
/** @brief The handclaps and metronomes ready to assist the player. */
@@ -12,8 +13,9 @@ public:
void Init();
/**
* @brief Play the sounds in question for the particular chart.
* @param nd the note data used for playing the ticks. */
void PlayTicks( const NoteData &nd );
* @param nd the note data used for playing the ticks.
* @param ps the player's state (and number) for Split Timing. */
void PlayTicks( const NoteData &nd, const PlayerState *ps );
/** @brief Stop playing the sounds. */
void StopPlaying();
private:
+1
View File
@@ -1359,6 +1359,7 @@ static void SuperShuffleTaps( NoteData &inout, int iStartIndex, int iEndIndex )
case TapNote::mine:
case TapNote::attack:
case TapNote::lift:
case TapNote::fake:
break; // ok to swap with this
DEFAULT_FAIL( tn2.type );
}
+40 -10
View File
@@ -19,7 +19,6 @@
#include "BackgroundUtil.h"
#include "Course.h"
#include "NoteData.h"
#include "Actor.h"
static ThemeMetric<bool> SHOW_BOARD( "NoteField", "ShowBoard" );
static ThemeMetric<bool> SHOW_BEAT_BARS( "NoteField", "ShowBeatBars" );
@@ -456,6 +455,7 @@ static ThemeMetric<RageColor> TICKCOUNT_COLOR ( "NoteField", "TickcountColor" );
static ThemeMetric<RageColor> COMBO_COLOR ( "NoteField", "ComboColor" );
static ThemeMetric<RageColor> LABEL_COLOR ( "NoteField", "LabelColor" );
static ThemeMetric<RageColor> SPEED_COLOR ( "NoteField", "SpeedColor" );
static ThemeMetric<RageColor> SCROLL_COLOR ( "NoteField", "ScrollColor" );
static ThemeMetric<RageColor> FAKE_COLOR ("NoteField", "FakeColor" );
static ThemeMetric<bool> BPM_IS_LEFT_SIDE ( "NoteField", "BPMIsLeftSide" );
static ThemeMetric<bool> STOP_IS_LEFT_SIDE ( "NoteField", "StopIsLeftSide" );
@@ -466,6 +466,7 @@ static ThemeMetric<bool> TICKCOUNT_IS_LEFT_SIDE ( "NoteField", "TickcountIsLeftS
static ThemeMetric<bool> COMBO_IS_LEFT_SIDE ( "NoteField", "ComboIsLeftSide" );
static ThemeMetric<bool> LABEL_IS_LEFT_SIDE ( "NoteField", "LabelIsLeftSide" );
static ThemeMetric<bool> SPEED_IS_LEFT_SIDE ( "NoteField", "SpeedIsLeftSide" );
static ThemeMetric<bool> SCROLL_IS_LEFT_SIDE ( "NoteField", "ScrollIsLeftSide" );
static ThemeMetric<bool> FAKE_IS_LEFT_SIDE ( "NoteField", "FakeIsLeftSide" );
static ThemeMetric<float> BPM_OFFSETX ( "NoteField", "BPMOffsetX" );
static ThemeMetric<float> STOP_OFFSETX ( "NoteField", "StopOffsetX" );
@@ -476,6 +477,7 @@ static ThemeMetric<float> TICKCOUNT_OFFSETX ( "NoteField", "TickcountOffsetX" );
static ThemeMetric<float> COMBO_OFFSETX ( "NoteField", "ComboOffsetX" );
static ThemeMetric<float> LABEL_OFFSETX ( "NoteField", "LabelOffsetX" );
static ThemeMetric<float> SPEED_OFFSETX ( "NoteField", "SpeedOffsetX" );
static ThemeMetric<float> SCROLL_OFFSETX ( "NoteField", "ScrollOffsetX" );
static ThemeMetric<float> FAKE_OFFSETX ( "NoteField", "FakeOffsetX" );
void NoteField::DrawBPMText( const float fBeat, const float fBPM )
@@ -623,6 +625,23 @@ void NoteField::DrawSpeedText( const float fBeat, float fPercent, float fWait, u
m_textMeasureNumber.Draw();
}
void NoteField::DrawScrollText( const float fBeat, float fPercent )
{
const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat );
const float fYPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYOffset, m_fYReverseOffsetPixels );
const float fZoom = ArrowEffects::GetZoom( m_pPlayerState );
const float xBase = GetWidth()/2.f;
const float xOffset = SCROLL_OFFSETX * fZoom;
m_textMeasureNumber.SetZoom( fZoom );
m_textMeasureNumber.SetHorizAlign( SCROLL_IS_LEFT_SIDE ? align_right : align_left );
m_textMeasureNumber.SetDiffuse( SCROLL_COLOR );
m_textMeasureNumber.SetGlow( RageColor(1,1,1,RageFastCos(RageTimer::GetTimeSinceStartFast()*2)/2+0.5f) );
m_textMeasureNumber.SetText( ssprintf("%.3fx", fPercent) );
m_textMeasureNumber.SetXY( (SCROLL_IS_LEFT_SIDE ? -xBase - xOffset : xBase + xOffset), fYPos );
m_textMeasureNumber.Draw();
}
void NoteField::DrawFakeText( const float fBeat, const float fNewBeat )
{
const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat );
@@ -709,6 +728,7 @@ float FindLastDisplayedBeat( const PlayerState* pPlayerState, int iDrawDistanceB
// Adjust search distance so that notes don't pop onto the screen.
float fSearchDistance = 10;
float fLastBeatToDraw = GetDisplayedPosition(pPlayerState)->m_fSongBeat+fSearchDistance;
float fSpeedMultiplier = GetDisplayedTiming(pPlayerState)->GetDisplayedSpeedPercent(GetDisplayedPosition(pPlayerState)->m_fSongBeatVisible, GetDisplayedPosition(pPlayerState)->m_fMusicSecondsVisible);
const int NUM_ITERATIONS = 20;
@@ -734,6 +754,11 @@ float FindLastDisplayedBeat( const PlayerState* pPlayerState, int iDrawDistanceB
fSearchDistance /= 2;
}
if( fSpeedMultiplier < 0.75 )
{
fLastBeatToDraw = min(fLastBeatToDraw, GetDisplayedPosition(pPlayerState)->m_fSongBeat + 16);
}
return fLastBeatToDraw;
}
@@ -766,12 +791,6 @@ bool NoteField::IsOnScreen( float fBeat, int iCol, int iDrawDistanceAfterTargets
void NoteField::DrawPrimitives()
{
// XXX Hack: Set Actor's active player number so the notes get the flashing that matches the steps.
// save the active player number (so they can nest)
PlayerNumber pnLastActivePlayerNumber = m_pPlayerState->m_PlayerNumber;
Actor::m_ActivePlayerNumber = m_pPlayerState->m_PlayerNumber;
//LOG->Trace( "NoteField::DrawPrimitives()" );
// This should be filled in on the first update.
@@ -974,6 +993,20 @@ void NoteField::DrawPrimitives()
}
}
// Scroll text
if( GAMESTATE->m_bIsUsingStepTiming )
{
FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg )
{
if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw )
{
float fBeat = NoteRowToBeat(seg->m_iStartRow);
if( IS_ON_SCREEN(fBeat) )
DrawScrollText( fBeat, seg->m_fPercent );
}
}
}
// Speed text
if( GAMESTATE->m_bIsUsingStepTiming )
{
@@ -1252,9 +1285,6 @@ void NoteField::DrawPrimitives()
}
cur->m_GhostArrowRow.Draw();
// restore the active player number
Actor::m_ActivePlayerNumber = pnLastActivePlayerNumber;
}
void NoteField::FadeToFail()
+1
View File
@@ -65,6 +65,7 @@ protected:
void DrawComboText( const float fBeat, int iCombo );
void DrawLabelText( const float fBeat, RString sLabel );
void DrawSpeedText( const float fBeat, float fPercent, float fWait, unsigned short usMode );
void DrawScrollText( const float fBeat, float fPercent );
void DrawFakeText( const float fBeat, const float fNewBeat );
void DrawAttackText( const float fBeat, const Attack &attack );
void DrawBGChangeText( const float fBeat, const RString sNewBGName );
+9 -1
View File
@@ -5,6 +5,7 @@
#include "GameConstantsAndTypes.h"
#include "PlayerNumber.h"
#include "RageLog.h"
class XNode;
@@ -159,7 +160,14 @@ struct TapNote
pn(PLAYER_INVALID), bHopoPossible(false),
sAttackModifiers(sAttackModifiers_),
fAttackDurationSeconds(fAttackDurationSeconds_),
iKeysoundIndex(iKeysoundIndex_), iDuration(0), HoldResult() {}
iKeysoundIndex(iKeysoundIndex_), iDuration(0), HoldResult()
{
if (type_ > TapNote::fake )
{
LOG->Trace(ssprintf("Invalid tap note type %d (most likely) due to random vanish issues. Assume it doesn't need judging.", type_ ) );
type = TapNote::empty;
}
}
/**
* @brief Determine if the two TapNotes are equal to each other.
+6 -3
View File
@@ -1183,14 +1183,17 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out )
Steps* pNewNotes = apSteps[i];
const bool ok = LoadFromBMSFile( out.GetSongDir() + arrayBMSFileNames[i], aBMSData[i], *pNewNotes, out, mapFilenameToKeysoundIndex );
if( ok )
{
// set song's timing data to the main file.
if( i == static_cast<unsigned>(iMainDataIndex) )
out.m_SongTiming = pNewNotes->m_Timing;
out.AddSteps( pNewNotes );
}
else
delete pNewNotes;
}
// set song's timing data to the main file.
out.m_SongTiming = apSteps[iMainDataIndex]->m_Timing;
SlideDuplicateDifficulties( out );
ConvertString( out.m_sMainTitle, "utf-8,japanese" );
+5 -1
View File
@@ -198,7 +198,7 @@ static bool LoadFromDWITokens(
else if( sMode == "SOLO" ) out.m_StepsType = StepsType_dance_solo;
else
{
ASSERT(0); // Unrecognized DWI notes format
ASSERT_M(0, "Unrecognized DWI notes format " + sMode + "!");
out.m_StepsType = StepsType_dance_single;
}
@@ -333,6 +333,10 @@ static bool LoadFromDWITokens(
if( iCol2 != -1 )
newNoteData.SetTapNote(iCol2, iIndex, TAP_ORIGINAL_TAP);
if(i>=sStepData.length()) {
break;//we ran out of data while looking for the ending > mark
}
if( sStepData[i] == '!' )
{
i++;
+35
View File
@@ -176,6 +176,36 @@ void SSCLoader::ProcessSpeeds( TimingData &out, const RString sParam )
}
}
void SSCLoader::ProcessScrolls( TimingData &out, const RString sParam )
{
vector<RString> vs1;
split( sParam, ",", vs1 );
FOREACH_CONST( RString, vs1, s1 )
{
vector<RString> vs2;
split( *s1, "=", vs2 );
if( vs2.size() < 2 )
{
LOG->UserLog( "Song file", "(UNKNOWN)", "has an scroll change with %i values.", (int)vs2.size() );
continue;
}
const float fBeat = StringToFloat( vs2[0] );
ScrollSegment seg( fBeat, StringToFloat( vs2[1] ) );
if( fBeat < 0 )
{
LOG->UserLog( "Song file", "(UNKNOWN)", "has an scroll change with beat %f.", fBeat );
continue;
}
out.AddScrollSegment( seg );
}
}
void SSCLoader::ProcessFakes( TimingData &out, const RString sParam )
{
vector<RString> arrayFakeExpressions;
@@ -601,6 +631,11 @@ bool SSCLoader::LoadFromSSCFile( const RString &sPath, Song &out, bool bFromCach
ProcessSpeeds( stepsTiming, sParams[1] );
}
else if( sValueName=="SCROLLS" )
{
ProcessScrolls( stepsTiming, sParams[1] );
}
else if( sValueName=="FAKES" )
{
ProcessFakes( stepsTiming, sParams[1] );
+1
View File
@@ -81,6 +81,7 @@ namespace SSCLoader
void ProcessLabels( TimingData &, const RString );
void ProcessCombos( TimingData &, const RString );
void ProcessSpeeds( TimingData &, const RString );
void ProcessScrolls( TimingData &, const RString );
void ProcessFakes( TimingData &, const RString );
}
#endif
+5
View File
@@ -137,6 +137,11 @@ static void GetTimingTags( vector<RString> &lines, TimingData timing, bool bIsSo
w.Write( ss->m_iStartRow, ss->m_fPercent, ss->m_fWait, ss->m_usMode );
w.Finish();
w.Init( "SCROLLS" );
FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, ss )
w.Write( ss->m_iStartRow, ss->m_fPercent );
w.Finish();
if( !bIsSong )
{
w.Init( "FAKES" );
+20 -4
View File
@@ -474,6 +474,7 @@ static bool NeedsTapJudging( const TapNote &tn )
case TapNote::attack:
case TapNote::autoKeysound:
case TapNote::fake:
case TapNote::empty:
return false;
}
}
@@ -496,6 +497,7 @@ static bool NeedsHoldJudging( const TapNote &tn )
case TapNote::attack:
case TapNote::autoKeysound:
case TapNote::fake:
case TapNote::empty:
return false;
}
}
@@ -1561,8 +1563,13 @@ int Player::GetClosestNote( int col, int iNoteRow, int iMaxRowsAhead, int iMaxRo
if( iPrevIndex == -1 )
return iNextIndex;
// Get the current time, previous time, and next time.
float fNoteTime = m_pPlayerState->m_Position.m_fMusicSeconds ;
float fNextTime = m_Timing->GetElapsedTimeFromBeat(NoteRowToBeat(iNextIndex));
float fPrevTime = m_Timing->GetElapsedTimeFromBeat(NoteRowToBeat(iPrevIndex));
/* Figure out which row is closer. */
if( abs(iNoteRow-iNextIndex) > abs(iNoteRow-iPrevIndex) )
if( fabsf(fNoteTime-fNextTime) > fabsf(fNoteTime-fPrevTime) )
return iPrevIndex;
else
return iNextIndex;
@@ -1621,8 +1628,13 @@ int Player::GetClosestNonEmptyRow( int iNoteRow, int iMaxRowsAhead, int iMaxRows
if( iPrevRow == -1 )
return iNextRow;
// Get the current time, previous time, and next time.
float fNoteTime = m_pPlayerState->m_Position.m_fMusicSeconds;
float fNextTime = m_Timing->GetElapsedTimeFromBeat(NoteRowToBeat(iNextRow));
float fPrevTime = m_Timing->GetElapsedTimeFromBeat(NoteRowToBeat(iPrevRow));
/* Figure out which row is closer. */
if( abs(iNoteRow-iNextRow) > abs(iNoteRow-iPrevRow) )
if( fabsf(fNoteTime-fNextTime) > fabsf(fNoteTime-fPrevTime) )
return iPrevRow;
else
return iNextRow;
@@ -2940,13 +2952,17 @@ void Player::RandomizeNotes( int iNoteRow )
int iNumOfTracks = m_NoteData.GetNumTracks();
for( int t=0; t+1 < iNumOfTracks; t++ )
{
const int iSwapWith = RandomInt( iNumOfTracks );
/* Only swap a tap and an empty. */
NoteData::iterator iter = m_NoteData.FindTapNote( t, iNewNoteRow );
if( iter == m_NoteData.end(t) || iter->second.type != TapNote::tap )
continue;
const int iSwapWith = RandomInt( iNumOfTracks );
// Make sure we're not swapping with ourselves.
if( t == iSwapWith )
continue;
// Make sure this is empty.
if( m_NoteData.FindTapNote(iSwapWith, iNewNoteRow) != m_NoteData.end(iSwapWith) )
continue;
+2
View File
@@ -107,6 +107,8 @@ public:
// Lua
virtual void PushSelf( lua_State *L );
PlayerState * GetPlayerState() { return this->m_pPlayerState; }
protected:
void UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat );
+5 -2
View File
@@ -263,13 +263,16 @@ void PlayerOptions::FromString( const RString &sMultipleMods )
RString sThrowAway;
FOREACH( RString, vs, s )
{
FromOneModString( *s, sThrowAway );
if (!FromOneModString( *s, sThrowAway ))
{
LOG->Trace( "Attempted to load a non-existing mod %s for the Player. Ignoring.", (*s).c_str() );
}
}
}
bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut )
{
ASSERT( NOTESKIN );
ASSERT_M( NOTESKIN, "The Noteskin Manager must be loaded in order to process mods." );
RString sBit = sOneMod;
sBit.MakeLower();
+3 -3
View File
@@ -8,7 +8,7 @@
*
* As an example, use "StepMania" here, not "StepMania4".
*/
#define PRODUCT_FAMILY_BARE sm-ssc
#define PRODUCT_FAMILY_BARE StepMania
/**
* @brief A unique name for each application that you might want installed side-by-side with other applications.
@@ -16,7 +16,7 @@
* As an example, use "StepMania4" here, not "StepMania".
* It would cause a conflict with older versions such as StepMania 3.X.
*/
#define PRODUCT_ID_BARE sm-ssc
#define PRODUCT_ID_BARE StepMania 5
/**
* @brief Version info displayed to the user.
@@ -35,7 +35,7 @@
* </li></ul>
*/
#ifndef PRODUCT_VER_BARE
#define PRODUCT_VER_BARE v1.2.5
#define PRODUCT_VER_BARE v5.0 Preview 1
#endif
/**
+3 -3
View File
@@ -1,11 +1,11 @@
; Included by the NSIS installer script
; Don't forget to also change ProductInfo.h!
!define PRODUCT_FAMILY "sm-ssc"
!define PRODUCT_FAMILY "StepMania"
; see ProductInfo.h for use descriptions
!define PRODUCT_ID "sm-ssc"
!define PRODUCT_VER "v1.2.5"
!define PRODUCT_ID "StepMania"
!define PRODUCT_VER "v5.0 Preview 1"
!define PRODUCT_DISPLAY "${PRODUCT_ID} ${PRODUCT_VER}"
!define PRODUCT_BITMAP "ssc"
+3 -2
View File
@@ -81,6 +81,7 @@ void ScoreKeeperNormal::Load(
// True if a jump is one to combo, false if combo is purely based on tap count.
m_ComboIsPerRow.Load( "Gameplay", "ComboIsPerRow" );
m_MissComboIsPerRow.Load( "Gameplay", "MissComboIsPerRow" );
m_MinScoreToContinueCombo.Load( "Gameplay", "MinScoreToContinueCombo" );
m_MinScoreToMaintainCombo.Load( "Gameplay", "MinScoreToMaintainCombo" );
m_MaxScoreToIncrementMissCombo.Load( "Gameplay", "MaxScoreToIncrementMissCombo" );
@@ -450,7 +451,7 @@ void ScoreKeeperNormal::HandleComboInternal( int iNumHitContinueCombo, int iNumH
else
{
m_pPlayerStageStats->m_iCurCombo = 0;
m_pPlayerStageStats->m_iCurMissCombo += iNumBreakCombo;
m_pPlayerStageStats->m_iCurMissCombo += ( m_MissComboIsPerRow ? 1 : iNumBreakCombo );
}
}
@@ -472,7 +473,7 @@ void ScoreKeeperNormal::HandleRowComboInternal( TapNoteScore tns, int iNumTapsIn
m_pPlayerStageStats->m_iCurCombo = 0;
if( tns <= m_MaxScoreToIncrementMissCombo )
m_pPlayerStageStats->m_iCurMissCombo += iNumTapsInRow;
m_pPlayerStageStats->m_iCurMissCombo += ( m_MissComboIsPerRow ? 1 : iNumTapsInRow );
}
}
+1
View File
@@ -34,6 +34,7 @@ class ScoreKeeperNormal: public ScoreKeeper
int m_iNumNotesHitThisRow; // Used by Custom Scoring only
ThemeMetric<bool> m_ComboIsPerRow;
ThemeMetric<bool> m_MissComboIsPerRow;
ThemeMetric<TapNoteScore> m_MinScoreToContinueCombo;
ThemeMetric<TapNoteScore> m_MinScoreToMaintainCombo;
ThemeMetric<TapNoteScore> m_MaxScoreToIncrementMissCombo;
+55 -24
View File
@@ -85,6 +85,7 @@ AutoScreenMessage( SM_BackFromWarpChange );
AutoScreenMessage( SM_BackFromSpeedPercentChange );
AutoScreenMessage( SM_BackFromSpeedWaitChange );
AutoScreenMessage( SM_BackFromSpeedModeChange );
AutoScreenMessage( SM_BackFromScrollChange );
AutoScreenMessage( SM_BackFromFakeChange );
AutoScreenMessage( SM_DoEraseStepTiming );
AutoScreenMessage( SM_DoSaveAndExit );
@@ -256,7 +257,7 @@ void ScreenEdit::InitEditMappings()
m_EditMappingsDeviceInput.button[EDIT_BUTTON_RIGHT_SIDE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_RIGHT_SIDE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
// m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_TAP_ATTACK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_LEFT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cn);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_RIGHT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cm);
@@ -581,6 +582,7 @@ static MenuDef g_TimingDataInformation(
MenuRowDef( ScreenEdit::speed_percent, "Edit speed (percent)", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::speed_wait, "Edit speed (wait)", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::speed_mode, "Edit speed (mode)", true, EditMode_Full, true, true, 0, "Beats", "Seconds" ),
MenuRowDef( ScreenEdit::scroll, "Edit scrolling factor", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::fake, "Edit fake", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::erase_step_timing, "Erase step timing", true, EditMode_Full, true, true, 0, NULL )
);
@@ -699,13 +701,15 @@ static Preference1D<RString> EDITOR_NOTE_SKINS( SetDefaultEditorNoteSkin, NUM_PL
static ThemeMetric<RString> EDIT_MODIFIERS ("ScreenEdit","EditModifiers");
static ThemeMetric<bool> LOOP_ON_CHART_END ("ScreenEdit","LoopOnChartEnd");
REGISTER_SCREEN_CLASS( ScreenEdit );
void ScreenEdit::Init()
{
m_pSoundMusic = NULL;
GAMESTATE->m_bIsUsingStepTiming = true;
GAMESTATE->m_bIsUsingStepTiming = false;
GAMESTATE->m_bInStepEditor = true;
SubscribeToMessage( "Judgment" );
@@ -733,6 +737,10 @@ void ScreenEdit::Init()
m_pSong = GAMESTATE->m_pCurSong;
m_pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
if( m_pSteps->UsesSplitTiming() )
GAMESTATE->m_bIsUsingStepTiming = true;
m_bReturnToRecordMenuAfterPlay = false;
m_fBeatToReturnTo = 0;
@@ -892,7 +900,7 @@ void ScreenEdit::PlayTicks()
if( m_EditState != STATE_PLAYING )
return;
m_GameplayAssist.PlayTicks( m_Player->GetNoteData() );
m_GameplayAssist.PlayTicks( m_Player->GetNoteData(), m_Player->GetPlayerState() );
}
void ScreenEdit::PlayPreviewMusic()
@@ -1011,8 +1019,7 @@ void ScreenEdit::Update( float fDeltaTime )
float fStopAtSeconds = m_pSteps->m_Timing.GetElapsedTimeFromBeat( NoteRowToBeat(m_iStopPlayingAt) ) + 1;
if( GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fMusicSeconds > fStopAtSeconds )
{
// loop
TransitionEditState( STATE_PLAYING );
TransitionEditState( ( LOOP_ON_CHART_END ? STATE_PLAYING : STATE_EDITING ) );
}
}
@@ -2684,28 +2691,28 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
GAMESTATE->m_pCurSteps[PLAYER_1]->SetMeter(i);
SetDirty( true );
}
else if( SM == SM_BackFromBPMChange )
else if( SM == SM_BackFromBPMChange && !ScreenTextEntry::s_bCancelledLast )
{
float fBPM = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fBPM > 0 )
GetAppropriateTiming().SetBPMAtBeat( GetBeat(), fBPM );
SetDirty( true );
}
else if( SM == SM_BackFromStopChange )
else if( SM == SM_BackFromStopChange && !ScreenTextEntry::s_bCancelledLast )
{
float fStop = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fStop >= 0 )
GetAppropriateTiming().SetStopAtBeat( GetBeat(), fStop );
SetDirty( true );
}
else if( SM == SM_BackFromDelayChange )
else if( SM == SM_BackFromDelayChange && !ScreenTextEntry::s_bCancelledLast )
{
float fDelay = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fDelay >= 0 )
GetAppropriateTiming().SetStopAtBeat( GetBeat(), fDelay, true );
SetDirty( true );
}
else if( SM == SM_BackFromTimeSignatureChange )
else if( SM == SM_BackFromTimeSignatureChange && !ScreenTextEntry::s_bCancelledLast )
{
int iNum, iDen;
if( sscanf( ScreenTextEntry::s_sLastAnswer.c_str(), " %d / %d ", &iNum, &iDen ) == 2 )
@@ -2714,7 +2721,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
}
SetDirty( true );
}
else if ( SM == SM_BackFromTickcountChange )
else if ( SM == SM_BackFromTickcountChange && !ScreenTextEntry::s_bCancelledLast )
{
int iTick = StringToInt( ScreenTextEntry::s_sLastAnswer );
if ( iTick >= 0 && iTick <= ROWS_PER_BEAT )
@@ -2723,7 +2730,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
}
SetDirty( true );
}
else if ( SM == SM_BackFromComboChange )
else if ( SM == SM_BackFromComboChange && !ScreenTextEntry::s_bCancelledLast )
{
int iCombo = StringToInt( ScreenTextEntry::s_sLastAnswer );
if ( iCombo >= 0 )
@@ -2732,7 +2739,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
}
SetDirty( true );
}
else if ( SM == SM_BackFromLabelChange )
else if ( SM == SM_BackFromLabelChange && !ScreenTextEntry::s_bCancelledLast )
{
RString sLabel = ScreenTextEntry::s_sLastAnswer;
if ( !GetAppropriateTiming().DoesLabelExist(sLabel) )
@@ -2743,7 +2750,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
SetDirty( true );
}
}
else if ( SM == SM_BackFromWarpChange )
else if ( SM == SM_BackFromWarpChange && !ScreenTextEntry::s_bCancelledLast )
{
float fWarp = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fWarp >= 0 ) // allow 0 to kill a warp.
@@ -2752,13 +2759,13 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
SetDirty( true );
}
}
else if( SM == SM_BackFromSpeedPercentChange )
else if( SM == SM_BackFromSpeedPercentChange && !ScreenTextEntry::s_bCancelledLast )
{
float fNum = StringToFloat( ScreenTextEntry::s_sLastAnswer );
GetAppropriateTiming().SetSpeedPercentAtBeat( GetBeat(), fNum );
SetDirty( true );
}
else if ( SM == SM_BackFromSpeedWaitChange )
else if ( SM == SM_BackFromSpeedWaitChange && !ScreenTextEntry::s_bCancelledLast )
{
float fDen = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fDen >= 0)
@@ -2767,7 +2774,7 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
}
SetDirty( true );
}
else if ( SM == SM_BackFromSpeedModeChange )
else if ( SM == SM_BackFromSpeedModeChange && !ScreenTextEntry::s_bCancelledLast )
{
if( ScreenTextEntry::s_sLastAnswer.substr(0, 1) == "b" || ScreenTextEntry::s_sLastAnswer.substr(0, 1) == "B" )
{
@@ -2791,7 +2798,13 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
}
SetDirty( true );
}
else if ( SM == SM_BackFromFakeChange )
else if( SM == SM_BackFromScrollChange && !ScreenTextEntry::s_bCancelledLast )
{
float fNum = StringToFloat( ScreenTextEntry::s_sLastAnswer );
GetAppropriateTiming().SetScrollAtBeat( GetBeat(), fNum );
SetDirty( true );
}
else if ( SM == SM_BackFromFakeChange && !ScreenTextEntry::s_bCancelledLast )
{
float fFake = StringToFloat( ScreenTextEntry::s_sLastAnswer );
if( fFake >= 0 ) // allow 0 to kill a warp.
@@ -3200,10 +3213,17 @@ inline float ScreenEdit::GetBeat()
return GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat;
}
inline int ScreenEdit::GetRow()
{
return BeatToNoteRow(GetBeat());
}
void ScreenEdit::DisplayTimingMenu()
{
float fBeat = GetBeat();
TimingData &pTime = GetAppropriateTiming();
bool bHasSpeedOnThisRow = pTime.GetSpeedSegmentAtBeat( fBeat ).m_iStartRow == BeatToNoteRow( fBeat );
g_TimingDataInformation.rows[beat_0_offset].SetOneUnthemedChoice( ssprintf("%.5f", pTime.m_fBeat0OffsetInSeconds) );
g_TimingDataInformation.rows[bpm].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetBPMAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[stop].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetStopAtBeat( fBeat ) ) ) ;
@@ -3213,20 +3233,22 @@ void ScreenEdit::DisplayTimingMenu()
g_TimingDataInformation.rows[tickcount].SetOneUnthemedChoice( ssprintf("%d", pTime.GetTickcountAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[combo].SetOneUnthemedChoice( ssprintf("%d", pTime.GetComboAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[warp].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetWarpAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[speed_percent].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetSpeedPercentAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[speed_wait].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetSpeedWaitAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[speed_percent].SetOneUnthemedChoice( bHasSpeedOnThisRow ? ssprintf("%.5f", pTime.GetSpeedPercentAtBeat( fBeat ) ) : "---" );
g_TimingDataInformation.rows[speed_wait].SetOneUnthemedChoice( bHasSpeedOnThisRow ? ssprintf("%.5f", pTime.GetSpeedWaitAtBeat( fBeat ) ) : "---" );
RString starting = ( pTime.GetSpeedModeAtBeat( fBeat ) == 1 ? "Seconds" : "Beats" );
g_TimingDataInformation.rows[speed_mode].SetOneUnthemedChoice( starting.c_str() );
g_TimingDataInformation.rows[scroll].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetScrollAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[fake].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetFakeAtBeat( fBeat ) ) );
g_TimingDataInformation.rows[tickcount].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[combo].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[speed_percent].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[speed_wait].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[speed_mode].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[speed_wait].bEnabled = GAMESTATE->m_bIsUsingStepTiming && bHasSpeedOnThisRow;
g_TimingDataInformation.rows[speed_mode].bEnabled = GAMESTATE->m_bIsUsingStepTiming && bHasSpeedOnThisRow;
g_TimingDataInformation.rows[fake].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
g_TimingDataInformation.rows[scroll].bEnabled = GAMESTATE->m_bIsUsingStepTiming;
EditMiniMenu( &g_TimingDataInformation, SM_BackFromTimingDataInformation );
}
@@ -3717,11 +3739,11 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
GetAppropriateTiming().InsertRows( BeatToNoteRow( GetBeat() ), BeatToNoteRow(1) );
break;
case shift_pauses_backward:
GetAppropriateTiming().DeleteRows( BeatToNoteRow( GetBeat() ), BeatToNoteRow(1) );
GetAppropriateTiming().DeleteRows( GetRow() + 1, BeatToNoteRow(1) );
break;
case convert_to_pause:
{
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
ASSERT_M( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1, "Attempted to convert beats outside the notefield to pauses!" );
float fMarkerStart = GetAppropriateTiming().GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) );
float fMarkerEnd = GetAppropriateTiming().GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) );
@@ -3735,7 +3757,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
m_NoteFieldEdit.m_iBeginMarker + 1,
m_NoteFieldEdit.m_iEndMarker-m_NoteFieldEdit.m_iBeginMarker
);
GetAppropriateTiming().DeleteRows( m_NoteFieldEdit.m_iBeginMarker,
GetAppropriateTiming().DeleteRows( m_NoteFieldEdit.m_iBeginMarker + 1,
m_NoteFieldEdit.m_iEndMarker-m_NoteFieldEdit.m_iBeginMarker );
GetAppropriateTiming().SetStopAtRow( m_NoteFieldEdit.m_iBeginMarker, fStopLength );
m_NoteFieldEdit.m_iBeginMarker = -1;
@@ -3907,6 +3929,7 @@ static LocalizedString ENTER_WARP_VALUE ( "ScreenEdit", "Enter a new Warp val
static LocalizedString ENTER_SPEED_PERCENT_VALUE ( "ScreenEdit", "Enter a new Speed percent value." );
static LocalizedString ENTER_SPEED_WAIT_VALUE ( "ScreenEdit", "Enter a new Speed wait value." );
static LocalizedString ENTER_SPEED_MODE_VALUE ( "ScreenEdit", "Enter a new Speed mode value." );
static LocalizedString ENTER_SCROLL_VALUE ( "ScreenEdit", "Enter a new Scroll value." );
static LocalizedString ENTER_FAKE_VALUE ( "ScreenEdit", "Enter a new Fake value." );
static LocalizedString CONFIRM_TIMING_ERASE ( "ScreenEdit", "Are you sure you want to erase this chart's timing data?" );
void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice c, const vector<int> &iAnswers )
@@ -3991,6 +4014,14 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
10
);
break;
case scroll:
ScreenTextEntry::TextEntry(
SM_BackFromScrollChange,
ENTER_SCROLL_VALUE,
ssprintf( "%.5f", GetAppropriateTiming().GetScrollSegmentAtBeat( GetBeat() ).m_fPercent ),
10
);
break;
case speed_wait:
ScreenTextEntry::TextEntry(
SM_BackFromSpeedWaitChange,
+2
View File
@@ -498,6 +498,7 @@ public:
speed_percent,
speed_wait,
speed_mode,
scroll,
fake,
erase_step_timing,
NUM_TIMING_DATA_INFORMATION_CHOICES
@@ -581,6 +582,7 @@ private:
TimingData & GetAppropriateTiming() const;
void SetBeat(float fBeat);
float GetBeat();
int GetRow();
};
+9 -2
View File
@@ -804,7 +804,11 @@ void ScreenGameplay::InitSongQueues()
// In a survival course, override stored mods
if( pCourse->GetCourseType() == COURSE_TYPE_SURVIVAL )
{
pi->GetPlayerState()->m_PlayerOptions.FromString( ModsLevel_Stage, "clearall,"+CommonMetrics::DEFAULT_MODIFIERS.GetValue() );
pi->GetPlayerState()->m_PlayerOptions.FromString( ModsLevel_Stage,
"clearall,"
+ CommonMetrics::DEFAULT_NOTESKIN_NAME.GetValue()
+ ","
+ CommonMetrics::DEFAULT_MODIFIERS.GetValue() );
pi->GetPlayerState()->RebuildPlayerOptionsFromActiveAttacks();
}
}
@@ -1386,9 +1390,12 @@ void ScreenGameplay::PauseGame( bool bPause, GameController gc )
// play assist ticks
void ScreenGameplay::PlayTicks()
{
/* TODO: Allow all players to have ticks. Not as simple as it looks.
* If a loop takes place, it could make one player's ticks come later
* than intended. Any help here would be appreciated. -Wolfman2000 */
Player &player = *m_vPlayerInfo[0].m_pPlayer;
const NoteData &nd = player.GetNoteData();
m_GameplayAssist.PlayTicks( nd );
m_GameplayAssist.PlayTicks( nd, player.GetPlayerState() );
}
/* Play announcer "type" if it's been at least fSeconds since the last announcer. */
+1 -1
View File
@@ -41,7 +41,7 @@
* @brief The internal version of the cache for StepMania.
*
* Increment this value to invalidate the current cache. */
const int FILE_CACHE_VERSION = 176;
const int FILE_CACHE_VERSION = 177;
/** @brief How long does a song sample last by default? */
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
-4
View File
@@ -341,10 +341,6 @@ public:
Steps *CreateSteps();
void InitSteps(Steps *pSteps);
/**
* @brief Retrieve the beat based on the specified time.
* @param fElapsedTime the amount of time since the Song started.
* @return the appropriate beat. */
/* [splittiming]
float SongGetBeatFromElapsedTime( float fElapsedTime ) const
{
+78 -76
View File
@@ -93,12 +93,15 @@
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">StepMania</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">StepMania</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">StepMania</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">StepMania</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<PreBuildEvent>
<Command>archutils\Win32\verinc
cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Command>
cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
</PreBuildEvent>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -109,7 +112,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<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;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<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\lib;..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;WINDOWS;DEBUG;GLEW_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
@@ -137,7 +140,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<AdditionalDependencies>shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;ffmpeg/modern_working/lib/avcodec.lib;ffmpeg/modern_working/lib/avformat.lib;ffmpeg/modern_working/lib/avutil.lib;ffmpeg/modern_working/lib/swscale.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../Program/StepMania-debug.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\extern\libpng\lib;ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>wininet.lib;msimg32.lib;libci.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)StepMania.pdb</ProgramDatabaseFile>
@@ -156,8 +159,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEvent>
<Command>archutils\Win32\verinc
cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Command>
cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
</PreBuildEvent>
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -172,7 +174,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<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;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<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\lib;..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;WINDOWS;RELEASE;GLEW_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
@@ -203,7 +205,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<AdditionalDependencies>shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;ffmpeg/modern_working/lib/avcodec.lib;ffmpeg/modern_working/lib/avformat.lib;ffmpeg/modern_working/lib/avutil.lib;ffmpeg/modern_working/lib/swscale.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../Program/StepMania.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\extern\libpng\lib;ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>wininet.lib;msimg32.lib;libci.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ProgramDatabaseFile>$(IntDir)StepMania.pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
@@ -222,8 +224,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">
<PreBuildEvent>
<Command>archutils\Win32\verinc
cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Command>
cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
</PreBuildEvent>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -234,7 +235,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<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;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<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\lib;..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;WINDOWS;DEBUG;GLEW_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
@@ -262,7 +263,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<AdditionalDependencies>shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;ffmpeg/modern_working/lib/avcodec.lib;ffmpeg/lib/avformat.lib;ffmpeg/lib/avutil.lib;ffmpeg/lib/swscale.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../Program/StepMania-fastdebug.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\extern\libpng\lib;ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>wininet.lib;msimg32.lib;libci.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)StepMania.pdb</ProgramDatabaseFile>
@@ -281,8 +282,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
<PreBuildEvent>
<Command>archutils\Win32\verinc
cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</Command>
cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
</PreBuildEvent>
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -297,7 +297,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<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;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<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\lib;..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;WINDOWS;RELEASE;GLEW_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
@@ -329,7 +329,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<AdditionalDependencies>shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;ffmpeg/modern_working/lib/avcodec.lib;ffmpeg/modern_working/lib/avformat.lib;ffmpeg/modern_working/lib/avutil.lib;ffmpeg/modern_working/lib/swscale.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\Program/StepMania-SSE2.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\extern\libpng\lib;ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>wininet.lib;msimg32.lib;libci.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ProgramDatabaseFile>$(IntDir)StepMania-SSE2.pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
@@ -469,6 +469,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<ClCompile Include="Song.cpp" />
<ClCompile Include="SongCacheIndex.cpp" />
<ClCompile Include="SongOptions.cpp" />
<ClCompile Include="SongPosition.cpp" />
<ClCompile Include="SongUtil.cpp" />
<ClCompile Include="SoundEffectControl.cpp" />
<ClCompile Include="StageStats.cpp" />
@@ -1192,94 +1193,94 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\png.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngerror.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngget.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngmem.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngpread.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngread.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngrio.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngrtran.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngrutil.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngset.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngtrans.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngwio.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngwrite.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngwtran.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\libpng\include\pngwutil.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release-SSE2|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='FastDebug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\extern\pcre\chartables.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -1786,6 +1787,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
<ClInclude Include="Song.h" />
<ClInclude Include="SongCacheIndex.h" />
<ClInclude Include="SongOptions.h" />
<ClInclude Include="SongPosition.h" />
<ClInclude Include="SongUtil.h" />
<ClInclude Include="SoundEffectControl.h" />
<ClInclude Include="StageStats.h" />
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -406,7 +406,7 @@ static void AdjustForChangedSystemCapabilities()
}
#if defined(WIN32)
//#include "RageDisplay_D3D.h"
#include "RageDisplay_D3D.h"
#include "archutils/Win32/VideoDriverInfo.h"
#endif
@@ -743,9 +743,9 @@ RageDisplay *CreateDisplay()
else if( sRenderer.CompareNoCase("d3d")==0 )
{
// TODO: ANGLE/RageDisplay_Modern
//#if defined(SUPPORT_D3D)
// pRet = new RageDisplay_D3D;
//#endif
#if defined(SUPPORT_D3D)
pRet = new RageDisplay_D3D;
#endif
}
else if( sRenderer.CompareNoCase("null")==0 )
{
+9 -1
View File
@@ -19,6 +19,7 @@
#include "RageLog.h"
#include "NoteData.h"
#include "GameManager.h"
#include "SongManager.h"
#include "NoteDataUtil.h"
#include "NotesLoaderSSC.h"
#include "NotesLoaderSM.h"
@@ -423,6 +424,12 @@ void Steps::SetCachedRadarValues( const RadarValues v[NUM_PLAYERS] )
copy( v, v + NUM_PLAYERS, m_CachedRadarValues );
}
bool Steps::UsesSplitTiming() const
{
Song *song = SONGMAN->GetSongFromSteps(const_cast<Steps *>(this));
return song->m_SongTiming != this->m_Timing;
}
// lua start
#include "LuaBinding.h"
@@ -440,6 +447,7 @@ public:
DEFINE_METHOD( IsAutogen, IsAutogen() )
DEFINE_METHOD( IsAnEdit, IsAnEdit() )
DEFINE_METHOD( IsAPlayerEdit, IsAPlayerEdit() )
DEFINE_METHOD( UsesSplitTiming, UsesSplitTiming() )
static int HasSignificantTimingChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasSignificantTimingChanges()); return 1; }
@@ -467,7 +475,6 @@ public:
lua_pushstring( L, out );
return 1;
}
LunaSteps()
{
@@ -486,6 +493,7 @@ public:
ADD_METHOD( IsAnEdit );
ADD_METHOD( IsAutogen );
ADD_METHOD( IsAPlayerEdit );
ADD_METHOD( UsesSplitTiming );
}
};
+9 -1
View File
@@ -118,7 +118,10 @@ public:
void TidyUpData();
void CalculateRadarValues( float fMusicLengthSeconds );
/** @brief Timing data */
/**
* @brief The TimingData used by the Steps.
*
* This is required to allow Split Timing. */
TimingData m_Timing;
/**
@@ -132,6 +135,11 @@ public:
StepsType m_StepsType;
CachedObject<Steps> m_CachedObject;
/**
* @brief Determine if the Steps use Split Timing by comparing the Song it's in.
* @return true if the Step and Song use different timings, false otherwise. */
bool UsesSplitTiming() const;
private:
inline const Steps *Real() const { return parent ? parent : this; }
@@ -46,7 +46,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\libpng\include;..\zlib"
AdditionalIncludeDirectories="..\..\extern\libpng\include;..\..\extern\zlib"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -71,7 +71,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="libpng.lib;zdll.lib"
AdditionalDependencies="..\..\extern\libpng\lib\libpng.lib ..\..\extern\zlib\zdll.lib"
OutputFile="..\..\Program\$(ProjectName)-debug.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\libpng\lib;..\zlib"
@@ -135,7 +135,7 @@
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\libpng\include;..\zlib"
AdditionalIncludeDirectories="..\..\extern\libpng\include;..\..\extern\zlib"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
StringPooling="true"
MinimalRebuild="false"
@@ -161,7 +161,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="libpng.lib zdll.lib"
AdditionalDependencies="..\..\extern\libpng\lib\libpng.lib ..\..\extern\zlib\zdll.lib"
OutputFile="..\..\Program\$(ProjectName).exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\libpng\lib;..\zlib"
+7 -7
View File
@@ -101,15 +101,15 @@ void GetBounds( const Surface *pSurf, RECT *out )
#pragma include_alias( "zlib/zlib.h", "../zlib/zlib.h" )
#include "../libpng/include/png.h"
#include "png.h"
#if defined(_MSC_VER)
# pragma comment(lib, "../libpng/lib/libpng.lib")
# pragma comment(lib, "libpng.lib")
#pragma warning(disable: 4611) /* interaction between '_setjmp' and C++ object destruction is non-portable */
#endif
static void File_png_write( png_struct *pPng, png_byte *pData, png_size_t iSize )
{
FILE *f = (FILE *) pPng->io_ptr;
FILE *f = (FILE *) png_get_io_ptr(pPng);
size_t iGot = fwrite( pData, (int) iSize, 1, f );
if( iGot == 0 )
png_error( pPng, strerror(errno) );
@@ -117,7 +117,7 @@ static void File_png_write( png_struct *pPng, png_byte *pData, png_size_t iSize
static void File_png_flush( png_struct *pPng )
{
FILE *f = (FILE *) pPng->io_ptr;
FILE *f = (FILE *) png_get_io_ptr(pPng);
int iGot = fflush(f);
if( iGot == -1 )
png_error( pPng, strerror(errno) );
@@ -130,10 +130,10 @@ struct error_info
static void PNG_Error( png_struct *pPng, const char *szError )
{
error_info *pInfo = (error_info *) pPng->error_ptr;
error_info *pInfo = (error_info *) png_get_error_ptr(pPng);
strncpy( pInfo->szErr, szError, 1024 );
pInfo->szErr[1023] = 0;
longjmp( pPng->jmpbuf, 1 );
longjmp( png_jmpbuf(pPng), 1 );
}
static void PNG_Warning( png_struct *png, const char *warning )
@@ -168,7 +168,7 @@ bool SavePNG( FILE *f, char szErrorbuf[1024], const Surface *pSurf )
return false;
}
if( setjmp(pPng->jmpbuf) )
if( setjmp(png_jmpbuf(pPng)) )
{
png_destroy_read_struct( &pPng, &pInfo, NULL );
return false;
+170
View File
@@ -73,6 +73,11 @@ void TimingData::AddSpeedSegment( const SpeedSegment &seg )
m_SpeedSegments.insert( upper_bound(m_SpeedSegments.begin(), m_SpeedSegments.end(), seg), seg );
}
void TimingData::AddScrollSegment( const ScrollSegment &seg )
{
m_ScrollSegments.insert( upper_bound(m_ScrollSegments.begin(), m_ScrollSegments.end(), seg), seg );
}
void TimingData::AddFakeSegment( const FakeSegment &seg )
{
m_FakeSegments.insert( upper_bound(m_FakeSegments.begin(), m_FakeSegments.end(), seg), seg );
@@ -290,6 +295,34 @@ void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned
}
}
void TimingData::SetScrollAtRow( int iRow, float fPercent )
{
unsigned i;
for( i = 0; i < m_ScrollSegments.size(); i++ )
{
if( m_ScrollSegments[i].m_iStartRow >= iRow)
break;
}
if ( i == m_ScrollSegments.size() || m_ScrollSegments[i].m_iStartRow != iRow )
{
// the core mod itself matters the most for comparisons.
if( i == 0 || m_ScrollSegments[i-1].m_fPercent != fPercent )
AddScrollSegment( ScrollSegment(iRow, fPercent) );
}
else
{
// The others aren't compared: only the mod itself matters.
if( i > 0 && m_ScrollSegments[i-1].m_fPercent == fPercent )
m_ScrollSegments.erase( m_ScrollSegments.begin()+i,
m_ScrollSegments.begin()+i+1 );
else
{
m_ScrollSegments[i].m_fPercent = fPercent;
}
}
}
void TimingData::SetFakeAtRow( int iRow, float fNew )
{
unsigned i;
@@ -400,6 +433,11 @@ unsigned short TimingData::GetSpeedModeAtRow( int iRow )
return GetSpeedSegmentAtRow( iRow ).m_usMode;
}
float TimingData::GetScrollAtRow( int iRow )
{
return GetScrollSegmentAtRow( iRow ).m_fPercent;
}
float TimingData::GetFakeAtRow( int iFakeRow ) const
{
for( unsigned i=0; i<m_FakeSegments.size(); i++ )
@@ -515,6 +553,7 @@ bool TimingData::IsWarpAtRow( int iNoteRow ) const
const WarpSegment& s = m_WarpSegments[i];
if( s.m_iStartRow <= iNoteRow && iNoteRow < (s.m_iStartRow + BeatToNoteRow(s.m_fLengthBeats) ) )
{
// Allow stops inside warps to allow things like stop, warp, stop, warp, stop, and so on.
if( m_StopSegments.empty() )
{
return true;
@@ -584,6 +623,15 @@ int TimingData::GetSpeedSegmentIndexAtRow( int iRow ) const
return static_cast<int>(i);
}
int TimingData::GetScrollSegmentIndexAtRow( int iRow ) const
{
unsigned i;
for (i=0; i < m_ScrollSegments.size() - 1; i++ )
if( m_ScrollSegments[i+1].m_iStartRow > iRow )
break;
return static_cast<int>(i);
}
BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow )
{
static BPMSegment empty;
@@ -612,6 +660,15 @@ SpeedSegment& TimingData::GetSpeedSegmentAtRow( int iRow )
return m_SpeedSegments[i];
}
ScrollSegment& TimingData::GetScrollSegmentAtRow( int iRow )
{
unsigned i;
for( i=0; i<m_ScrollSegments.size()-1; i++ )
if( m_ScrollSegments[i+1].m_iStartRow > iRow )
break;
return m_ScrollSegments[i];
}
int TimingData::GetTimeSignatureNumeratorAtRow( int iRow )
{
return GetTimeSignatureSegmentAtRow( iRow ).m_iNumerator;
@@ -942,6 +999,17 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const
}
float TimingData::GetDisplayedBeat( float fBeat ) const
{
unsigned index = GetScrollSegmentIndexAtBeat(fBeat);
float fOutBeat = ( fBeat - NoteRowToBeat(m_ScrollSegments[index].m_iStartRow) ) * m_ScrollSegments[index].m_fPercent;
for( unsigned i = 0; i < index; i ++ )
{
fOutBeat += ( NoteRowToBeat(m_ScrollSegments[i + 1].m_iStartRow) - NoteRowToBeat(m_ScrollSegments[i].m_iStartRow) ) * m_ScrollSegments[i].m_fPercent;
}
return fOutBeat;
}
void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool bAdjustBPM )
{
ASSERT( fScale > 0 );
@@ -970,6 +1038,17 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
m_StopSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
}
for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ )
{
const int iSegStartRow = m_vTimeSignatureSegments[i].m_iStartRow;
if( iSegStartRow < iStartIndex )
continue;
else if( iSegStartRow > iEndIndex )
m_vTimeSignatureSegments[i].m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1));
else
m_vTimeSignatureSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
}
for( unsigned i = 0; i < m_WarpSegments.size(); i++ )
{
const int iSegStartRow = m_WarpSegments[i].m_iStartRow;
@@ -1052,6 +1131,17 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
m_FakeSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
}
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
{
const int iSegStartRow = m_ScrollSegments[i].m_iStartRow;
if( iSegStartRow < iStartIndex )
continue;
else if( iSegStartRow > iEndIndex )
m_ScrollSegments[i].m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1));
else
m_ScrollSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
}
// adjust BPM changes to preserve timing
if( bAdjustBPM )
{
@@ -1150,6 +1240,14 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd )
continue;
fake.m_iStartRow += iRowsToAdd;
}
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
{
ScrollSegment &scrl = m_ScrollSegments[i];
if( scrl.m_iStartRow < iStartRow )
continue;
scrl.m_iStartRow += iRowsToAdd;
}
if( iStartRow == 0 )
{
@@ -1337,10 +1435,70 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete )
fake.m_iStartRow -= iRowsToDelete;
}
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
{
ScrollSegment &scrl = m_ScrollSegments[i];
if( scrl.m_iStartRow < iStartRow )
continue;
if( scrl.m_iStartRow < iStartRow+iRowsToDelete )
{
m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 );
--i;
continue;
}
scrl.m_iStartRow -= iRowsToDelete;
}
this->SetBPMAtRow( iStartRow, fNewBPM );
}
float TimingData::GetDisplayedSpeedPercent( float fSongBeat, float fMusicSeconds ) const
{
if( m_SpeedSegments.size() == 0 )
return 1.0;
const int index = GetSpeedSegmentIndexAtBeat( fSongBeat );
const SpeedSegment &seg = m_SpeedSegments[index];
float fStartBeat = NoteRowToBeat(seg.m_iStartRow);
float fStartTime = GetElapsedTimeFromBeat( fStartBeat ) - GetDelayAtBeat( fStartBeat );
float fEndTime;
float fCurTime = fMusicSeconds;
if( seg.m_usMode == 1 ) // seconds
{
fEndTime = fStartTime + seg.m_fWait;
}
else
{
fEndTime = GetElapsedTimeFromBeat( fStartBeat + seg.m_fWait ) - GetDelayAtBeat( fStartBeat + seg.m_fWait );
}
if( ( index == 0 && m_SpeedSegments[0].m_fWait > 0.0 ) && fCurTime < fStartTime )
{
return 1.0;
}
else if( fEndTime >= fCurTime && ( index > 0 || m_SpeedSegments[0].m_fWait > 0.0 ) )
{
const float fPriorSpeed = ( index == 0 ? 1 : m_SpeedSegments[index - 1].m_fPercent );
float fTimeUsed = fCurTime - fStartTime;
float fDuration = fEndTime - fStartTime;
float fRatioUsed = fDuration == 0.0 ? 1 : fTimeUsed / fDuration;
float fDistance = fPriorSpeed - seg.m_fPercent;
float fRatioNeed = fRatioUsed * -fDistance;
return (fPriorSpeed + fRatioNeed);
}
else
{
return seg.m_fPercent;
}
}
void TimingData::TidyUpData()
{
// If there are no BPM segments, provide a default.
@@ -1391,6 +1549,13 @@ void TimingData::TidyUpData()
SpeedSegment seg(0, 1, 0);
m_SpeedSegments.push_back( seg );
}
// Always be sure there is a starting scrolling factor.
if( m_ScrollSegments.empty() )
{
ScrollSegment seg(0, 1);
m_ScrollSegments.push_back( seg );
}
}
@@ -1422,6 +1587,11 @@ bool TimingData::HasSpeedChanges() const
return m_SpeedSegments.size()>1;
}
bool TimingData::HasScrollChanges() const
{
return m_ScrollSegments.size()>1;
}
void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, int &iBeatIndexOut, int &iRowsRemainder ) const
{
iMeasureIndexOut = 0;
+150 -3
View File
@@ -667,7 +667,7 @@ struct SpeedSegment
* @brief Sets up the SpeedSegment with specified values.
* @param i The row this activates.
* @param p The percentage to use. */
SpeedSegment(int i, float p): m_iStartRow(0),
SpeedSegment(int i, float p): m_iStartRow(i),
m_fPercent(p), m_fWait(0), m_usMode(0) {}
/**
@@ -777,6 +777,82 @@ struct SpeedSegment
bool operator>=( const SpeedSegment &other ) const { return !operator<(other); }
};
/**
* @brief Identifies when the chart scroll changes.
*
* ScrollSegments adjusts the scrolling speed of the note field.
* Unlike forced attacks, these cannot be turned off at a set time:
* reset it by setting the precentage back to 1.
*
* These were inspired by the Pump It Up series. */
struct ScrollSegment
{
/** @brief Sets up the ScrollSegment with default values. */
ScrollSegment(): m_iStartRow(0), m_fPercent(1) {}
/**
* @brief Sets up the ScrollSegment with specified values.
* @param i The row this activates.
* @param p The percentage to use. */
ScrollSegment(int i, float p): m_iStartRow(i), m_fPercent(p) {}
/**
* @brief Sets up the ScrollSegment with specified values.
* @param r The beat this activates.
* @param p The percentage to use. */
ScrollSegment(float r, float p): m_iStartRow(BeatToNoteRow(r)), m_fPercent(p) {}
/** @brief The row in which the ScrollSegment activates. */
int m_iStartRow;
/** @brief The percentage to use when multiplying the chart's scroll rate. */
float m_fPercent;
/**
* @brief Compares two ScrollSegment to see if they are equal to each other.
* @param other the other ScrollSegment to compare to.
* @return the equality of the two segments.
*/
bool operator==( const ScrollSegment &other ) const
{
COMPARE( m_iStartRow );
COMPARE( m_fPercent );
return true;
}
/**
* @brief Compares two ScrollSegment to see if they are not equal to each other.
* @param other the other ScrollSegment to compare to.
* @return the inequality of the two segments.
*/
bool operator!=( const ScrollSegment &other ) const { return !operator==(other); }
/**
* @brief Compares two ScrollSegment to see if one is less than the other.
* @param other the other ScrollSegment to compare to.
* @return the truth/falsehood of if the first is less than the second.
*/
bool operator<( const ScrollSegment &other ) const { return m_iStartRow < other.m_iStartRow; }
/**
* @brief Compares two ScrollSegment to see if one is less than or equal to the other.
* @param other the other ScrollSegment to compare to.
* @return the truth/falsehood of if the first is less or equal to than the second.
*/
bool operator<=( const ScrollSegment &other ) const
{
return ( operator<(other) || operator==(other) );
}
/**
* @brief Compares two ScrollSegment to see if one is greater than the other.
* @param other the other ScrollSegment to compare to.
* @return the truth/falsehood of if the first is greater than the second.
*/
bool operator>( const ScrollSegment &other ) const { return !operator<=(other); }
/**
* @brief Compares two ScrollSegment to see if one is greater than or equal to the other.
* @param other the other ScrollSegment to compare to.
* @return the truth/falsehood of if the first is greater than or equal to the second.
*/
bool operator>=( const ScrollSegment &other ) const { return !operator<(other); }
};
/**
* @brief Identifies when a whole region of arrows is to be ignored.
*
@@ -1350,13 +1426,13 @@ public:
/**
* @brief Set the row to have the new Combo.
* @param iNoteRow the row to have the new Combo.
* @param iTicks the Combo.
* @param iCombo the Combo.
*/
void SetComboAtRow( int iNoteRow, int iCombo );
/**
* @brief Set the beat to have the new Combo.
* @param fBeat the beat to have the new Combo.
* @param iTicks the Combo.
* @param iCombo the Combo.
*/
void SetComboAtBeat( float fBeat, int iCombo ) { SetComboAtRow( BeatToNoteRow( fBeat ), iCombo ); }
/**
@@ -1594,6 +1670,67 @@ public:
*/
void AddSpeedSegment( const SpeedSegment &seg );
float GetDisplayedSpeedPercent( float fBeat, float fMusicSeconds ) const;
/**
* @brief Retrieve the scrolling factor at the given row.
* @param iNoteRow the row in question.
* @return the percent.
*/
float GetScrollAtRow( int iNoteRow );
/**
* @brief Retrieve the scrolling factor at the given beat.
* @param fBeat the beat in question.
* @return the percent.
*/
float GetScrollAtBeat( float fBeat ) { return GetScrollAtRow( BeatToNoteRow(fBeat) ); }
/**
* @brief Set the row to have the new Scrolling factor.
* @param iNoteRow the row to have the new Speed.
* @param fPercent the scrolling factor.
*/
void SetScrollAtRow( int iNoteRow, float fPercent );
/**
* @brief Set the row to have the new Scrolling factor.
* @param iNoteRow the row to have the new Speed.
* @param fPercent the scrolling factor.
*/
void SetScrollAtBeat( float fBeat, float fPercent ) { SetScrollAtRow( BeatToNoteRow(fBeat), fPercent ); }
/**
* @brief Retrieve the ScrollSegment at the specified row.
* @param iNoteRow the row that has a ScrollSegment.
* @return the ScrollSegment in question.
*/
ScrollSegment& GetScrollSegmentAtRow( int iNoteRow );
/**
* @brief Retrieve the ScrollSegment at the specified beat.
* @param fBeat the beat that has a ScrollSegment.
* @return the ScrollSegment in question.
*/
ScrollSegment& GetScrollSegmentAtBeat( float fBeat ) { return GetScrollSegmentAtRow( BeatToNoteRow(fBeat) ); }
/**
* @brief Retrieve the index of the ScrollSegment at the specified row.
* @param iNoteRow the row that has a ScrollSegment.
* @return the ScrollSegment's index in question.
*/
int GetScrollSegmentIndexAtRow( int iNoteRow ) const;
/**
* @brief Retrieve the index of the ScrollSegment at the specified beat.
* @param fBeat the beat that has a ScrollSegment.
* @return the ScrollSegment's index in question.
*/
int GetScrollSegmentIndexAtBeat( float fBeat ) const { return GetScrollSegmentIndexAtRow( BeatToNoteRow(fBeat) ); }
/**
* @brief Add the ScrollSegment to the TimingData.
* @param seg the new ScrollSegment.
*/
void AddScrollSegment( const ScrollSegment &seg );
/**
* @brief Determine when the fakes end.
* @param iRow The row you start on.
@@ -1687,6 +1824,7 @@ public:
return fBeat;
}
float GetElapsedTimeFromBeatNoOffset( float fBeat ) const;
float GetDisplayedBeat( float fBeat ) const;
/**
* @brief View the TimingData to see if a song changes its BPM at any point.
* @return true if there is at least one change, false otherwise.
@@ -1712,6 +1850,10 @@ public:
* @brief View the TimingData to see if a song changes its speed scrolling at any point.
* @return true if there is at least one change, false otherwise. */
bool HasSpeedChanges() const;
/**
* @brief View the TimingData to see if a song changes its speed scrolling at any point.
* @return true if there is at least one change, false otherwise. */
bool HasScrollChanges() const;
/**
* @brief Compare two sets of timing data to see if they are equal.
* @param other the other TimingData.
@@ -1743,6 +1885,9 @@ public:
COMPARE( m_SpeedSegments.size() );
for( unsigned i=0; i<m_SpeedSegments.size(); i++ )
COMPARE( m_SpeedSegments[i] );
COMPARE( m_ScrollSegments.size() );
for( unsigned i=0; i<m_ScrollSegments.size(); i++ )
COMPARE( m_ScrollSegments[i] );
COMPARE( m_FakeSegments.size() );
for( unsigned i=0; i<m_FakeSegments.size(); i++ )
COMPARE( m_FakeSegments[i] );
@@ -1804,6 +1949,8 @@ public:
vector<LabelSegment> m_LabelSegments;
/** @brief The collection of SpeedSegments. */
vector<SpeedSegment> m_SpeedSegments;
/** @brief The collection of ScrollSegments. */
vector<ScrollSegment> m_ScrollSegments;
/** @brief The collection of FakeSegments. */
vector<FakeSegment> m_FakeSegments;
/**
Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

After

Width:  |  Height:  |  Size: 105 KiB

@@ -0,0 +1,478 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="src">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="src\headers">
<UniqueIdentifier>{ad1b2be2-aa3e-4683-8892-a9742e0e933a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\ciphers\aes\aes.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\base64\base64_decode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\base64\base64_encode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\burn_stack.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_decrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_done.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_encrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_getiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_setiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cbc\cbc_start.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_decrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_done.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_encrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_getiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_setiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\cfb\cfb_start.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_argchk.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_cipher_descriptor.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_cipher_is_valid.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_cipher.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_cipher_any.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_cipher_id.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_hash_any.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_hash_id.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_hash_oid.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_find_prng.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_fsa.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_hash_descriptor.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_hash_is_valid.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_ltc_mp_descriptor.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_prng_descriptor.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_prng_is_valid.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_register_cipher.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_register_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_register_prng.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_unregister_cipher.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_unregister_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\crypt\crypt_unregister_prng.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_decrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_done.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_encrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_getiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_setiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_start.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ctr\ctr_test.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\bit\der_decode_bit_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\boolean\der_decode_boolean.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\choice\der_decode_choice.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\ia5\der_decode_ia5_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\integer\der_decode_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\object_identifier\der_decode_object_identifier.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\octet\der_decode_octet_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\printable_string\der_decode_printable_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_decode_sequence_ex.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_decode_sequence_flexi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_decode_sequence_multi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\short_integer\der_decode_short_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utctime\der_decode_utctime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utf8\der_decode_utf8_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\bit\der_encode_bit_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\boolean\der_encode_boolean.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\ia5\der_encode_ia5_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\integer\der_encode_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\object_identifier\der_encode_object_identifier.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\octet\der_encode_octet_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\printable_string\der_encode_printable_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_encode_sequence_ex.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_encode_sequence_multi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\set\der_encode_set.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\set\der_encode_setof.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\short_integer\der_encode_short_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utctime\der_encode_utctime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utf8\der_encode_utf8_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\bit\der_length_bit_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\boolean\der_length_boolean.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\ia5\der_length_ia5_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\integer\der_length_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\object_identifier\der_length_object_identifier.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\octet\der_length_octet_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\printable_string\der_length_printable_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_length_sequence.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\short_integer\der_length_short_integer.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utctime\der_length_utctime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\utf8\der_length_utf8_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\asn1\der\sequence\der_sequence_free.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_decrypt_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_encrypt_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_export.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_free.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_import.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_make_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_shared_secret.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_sign_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_verify_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\dsa\dsa_verify_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ecb\ecb_decrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ecb\ecb_done.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ecb\ecb_encrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ecb\ecb_start.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\error_to_string.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\prngs\fortuna.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\hashes\helper\hash_memory.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\math\fp\ltc_ecc_fp_mulmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\math\ltm_desc.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\hashes\md5.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\math\multi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_decrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_done.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_encrypt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_getiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_setiv.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\modes\ofb\ofb_start.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_i2osp.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_mgf1.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_oaep_decode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_oaep_encode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_os2ip.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_pss_decode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_pss_encode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_v1_5_decode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\pkcs1\pkcs_1_v1_5_encode.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\pkcs5\pkcs_5_1.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\pkcs5\pkcs_5_2.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\math\rand_prime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\prngs\rng_get_bytes.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\prngs\rng_make_prng.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_decrypt_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_encrypt_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_export.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_exptmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_free.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_import.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_make_key.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_sign_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\pk\rsa\rsa_verify_hash.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\hashes\sha1.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\prngs\sprng.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\prngs\yarrow.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\misc\zeromem.c">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\headers\tomcrypt.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_argchk.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_cfg.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_cipher.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_custom.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_hash.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_mac.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_macros.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_math.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_misc.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_pk.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_pkcs.h">
<Filter>src\headers</Filter>
</ClInclude>
<ClInclude Include="src\headers\tomcrypt_prng.h">
<Filter>src\headers</Filter>
</ClInclude>
</ItemGroup>
</Project>
@@ -0,0 +1,378 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="src">
<UniqueIdentifier>{d28820c7-38c7-477c-8993-1124bc2d2caf}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="bn_error.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_fast_mp_invmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_fast_mp_montgomery_reduce.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_fast_s_mp_mul_digs.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_fast_s_mp_mul_high_digs.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_fast_s_mp_sqr.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_2expt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_abs.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_add.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_add_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_addmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_and.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_clamp.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_clear.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_clear_multi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_cmp.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_cmp_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_cmp_mag.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_cnt_lsb.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_copy.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_count_bits.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_div.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_div_2.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_div_2d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_div_3.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_div_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_dr_is_modulus.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_dr_reduce.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_dr_setup.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_exch.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_expt_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_exptmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_exptmod_fast.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_exteuclid.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_fread.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_fwrite.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_gcd.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_get_int.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_grow.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init_copy.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init_multi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init_set.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init_set_int.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_init_size.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_invmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_invmod_slow.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_is_square.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_jacobi.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_karatsuba_mul.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_karatsuba_sqr.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_lcm.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_lshd.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mod_2d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mod_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_montgomery_calc_normalization.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_montgomery_reduce.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_montgomery_setup.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mul.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mul_2.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mul_2d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mul_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_mulmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_n_root.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_neg.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_or.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_fermat.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_is_divisible.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_is_prime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_miller_rabin.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_next_prime.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_rabin_miller_trials.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_prime_random_ex.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_radix_size.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_radix_smap.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_rand.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_read_radix.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_read_signed_bin.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_read_unsigned_bin.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_2k.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_2k_l.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_2k_setup.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_2k_setup_l.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_is_2k.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_is_2k_l.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_reduce_setup.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_rshd.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_set.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_set_int.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_shrink.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_signed_bin_size.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_sqr.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_sqrmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_sqrt.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_sub.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_sub_d.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_submod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_to_signed_bin.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_to_signed_bin_n.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_to_unsigned_bin.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_to_unsigned_bin_n.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_toom_mul.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_toom_sqr.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_toradix.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_toradix_n.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_unsigned_bin_size.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_xor.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_mp_zero.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_prime_tab.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_reverse.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_add.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_exptmod.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_mul_digs.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_mul_high_digs.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_sqr.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bn_s_mp_sub.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="bncore.c">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="tommath.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="tommath_class.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="tommath_superclass.h">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
</Project>