Add nITG's various path shape & other modifiers - V2 (#1435)

* Implemented nITG's Square modifiers

Modifiers added:
Square
SquareOffset
SquarePeriod
SquareZ
SquareZOffset
SquareZPeriod

* Implemented nITG's BumpyX Modifiers

Also fixes up some tiny bits pertaining to the square modifiers.
Modifiers Added:
BumpyX
BumpyXPeriod
BumpyXOffset

* Implemented nITG's TornadoZ Modifiers

Modifiers Added:
TornadoZ
TornadoZPeriod
TornadoZOffset

Another commit is needed to update fallback's metrics

* Update fallback's metrics to accommodate TornadoX

* Implemented nITG's Parabola Modifiers

Modifiers Added:
ParabolaX
ParabolaY
ParabolaZ

* Implemented nITG's Sawtooth Modifiers

Modifiers Added:
Sawtooth
SawtoothPeriod
SawtoothZ
SawtoothZPeriod

* Implemented nITG's Zigzag Modifiers

Modifiers Added:
Zigzag
ZigzagPeriod
ZigzagOffset
ZigzagZ
ZigzagZPeriod
ZigzagZOffset

* Implemented nITG's ModTimer modifiers

Modifiers Added:
ModTimer (Lua method name is ModTimerSetting (takes enums. Ex: 'ModTimerType_Song'). Can be activated with mod strings 'modtimer(song/beat/game/default)' )
ModTimerOffset
ModTimerMult

* Remove Log use from ArrowEffects::GetTime()

* Accidentally removed a CPY(m_BatteryLives)

* Implemented nITG's DrunkZ modifiers

Modifiers added:
drunkz
drunkzspeed
drunkzoffset
drunkzperiod

Another commit is needed to update fallback's metrics

* Update fallback's metrics to accommodate DrunkZ

* Implemented nITG's BeatY & BeatZ Modifers

Modifiers Added:
beaty
beatyoffset
beatyperiod
beatymult	
beatz
beatzoffset
beatzperiod
beatzmult

Another commit is needed to update fallback's metrics

* Updated fallback's metrics to accommodate ...

the new Beat modifiers.

* Implemented nITG's Digital Modifiers

Modifers Added:
digital
digitalsteps
digitalperiod
digitaloffset
digitalz
digitalzsteps
digitalzperiod
digitalzoffset

* Removed duplicate zbuffer check.

* Updated Luadocs with the new modifiers

* Removed accidental duplicate Mini from Luadocs

* Split up long modifier lines.

Hopefully, this makes it a bit easier to read.

* Remove accidental commit to root of repo.

* Split up long modifier lines

Hopefully, this makes it easier to read.

* Redid Square functions to not use FastSin

This implementation is based off of 5.2's square_wave function from ModValue.

* Redid zigzag functions to not use FastSin

This implementation is based off of 5.2's triangle_wave function from ModValue.

* Moved square & zigzag calculation to RageMath.

New RageMath functions:
RageSquare
RageTriangle

* Made Square & Digital have the same period...

as Zigzag and Sawtooth.

* Deduplicate tornado calculations.

* Fixed typo in UpdateTornado, and moved UpdateTornado logic to ArrowEffects::Init because it doesn't depend on anything that changes every frame.  Tornado metrics are also loaded in ArrowEffects::Init.

* Deduplicated Beat mod update logic.

The logic is now placed into a function called UpdateBeat.
The m_fBeatFactor members are now a 1D array, similar to m_MaxTornado and m_MinTornado.
This commit is contained in:
MrThatKid
2017-05-13 11:34:34 -07:00
committed by Colby Klein
parent 31e99dc457
commit e15e0e68be
10 changed files with 801 additions and 97 deletions
+257 -2
View File
@@ -30,6 +30,16 @@ XToString( DrainType );
XToLocalizedString( DrainType );
LuaXType( DrainType );
static const char *ModTimerTypeNames[] = {
"Game",
"Beat",
"Song",
"Default",
};
XToString( ModTimerType );
XToLocalizedString( ModTimerType );
LuaXType( ModTimerType );
void NextFloat( float fValues[], int size );
void NextBool( bool bValues[], int size );
@@ -51,6 +61,7 @@ void PlayerOptions::Init()
{
m_LifeType = LifeType_Bar;
m_DrainType = DrainType_Normal;
m_ModTimerType = ModTimerType_Default;
m_BatteryLives = 4;
m_MinTNSToHideNotes= PREFSMAN->m_MinTNSToHideNotes;
m_bSetScrollSpeed = false;
@@ -72,6 +83,8 @@ void PlayerOptions::Init()
m_fSkew = 0; m_SpeedfSkew = 1.0f;
m_fPassmark = 0; m_SpeedfPassmark = 1.0f;
m_fRandomSpeed = 0; m_SpeedfRandomSpeed = 1.0f;
m_fModTimerMult = 0; m_SpeedfModTimerMult = 1.0f;
m_fModTimerOffset = 0; m_SpeedfModTimerOffset = 1.0f;
ZERO( m_bTurns );
ZERO( m_bTransforms );
m_bMuteOnError = false;
@@ -91,7 +104,10 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds )
DO_COPY( m_LifeType );
DO_COPY( m_DrainType );
DO_COPY( m_ModTimerType );
DO_COPY( m_BatteryLives );
APPROACH( fModTimerMult );
APPROACH( fModTimerOffset );
APPROACH( fTimeSpacing );
APPROACH( fScrollSpeed );
APPROACH( fMaxScrollBPM );
@@ -210,6 +226,23 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
RString s = ssprintf( "C%.0f", m_fScrollBPM );
AddTo.push_back( s );
}
switch(m_ModTimerType)
{
case ModTimerType_Game:
AddTo.push_back("ModTimerGame");
break;
case ModTimerType_Beat:
AddTo.push_back("ModTimerBeat");
break;
case ModTimerType_Song:
AddTo.push_back("ModTimerSong");
break;
case ModTimerType_Default:
break;
default:
FAIL_M(ssprintf("Invalid ModTimerType: %i", m_ModTimerType));
}
AddPart( AddTo, m_fAccels[ACCEL_BOOST], "Boost" );
AddPart( AddTo, m_fAccels[ACCEL_BRAKE], "Brake" );
@@ -223,6 +256,10 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_SPEED], "DrunkSpeed" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_OFFSET], "DrunkOffset" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_PERIOD], "DrunkPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_Z], "DrunkZ" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_Z_SPEED], "DrunkZSpeed" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_Z_OFFSET], "DrunkZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_DRUNK_Z_PERIOD], "DrunkZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_DIZZY], "Dizzy" );
AddPart( AddTo, m_fEffects[EFFECT_CONFUSION], "Confusion" );
AddPart( AddTo, m_fEffects[EFFECT_CONFUSION_OFFSET], "ConfusionOffset" );
@@ -237,16 +274,57 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
AddPart( AddTo, m_fEffects[EFFECT_TORNADO], "Tornado" );
AddPart( AddTo, m_fEffects[EFFECT_TORNADO_PERIOD], "TornadoPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_TORNADO_OFFSET], "TornadoOffset" );
AddPart( AddTo, m_fEffects[EFFECT_TORNADO_Z], "TornadoZ" );
AddPart( AddTo, m_fEffects[EFFECT_TORNADO_Z_PERIOD], "TornadoZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_TORNADO_Z_OFFSET], "TornadoZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_TIPSY], "Tipsy" );
AddPart( AddTo, m_fEffects[EFFECT_TIPSY_SPEED], "TipsySpeed" );
AddPart( AddTo, m_fEffects[EFFECT_TIPSY_OFFSET], "TipsyOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY], "Bumpy" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_OFFSET], "BumpyOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_PERIOD], "BumpyPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_OFFSET], "BumpyOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_PERIOD], "BumpyPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_X], "BumpyX" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_X_OFFSET], "BumpyXOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BUMPY_X_PERIOD], "BumpyXPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT], "Beat" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_OFFSET], "BeatOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_PERIOD], "BeatPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_MULT], "BeatMult" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Y], "BeatY" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Y_OFFSET], "BeatYOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Y_PERIOD], "BeatYPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Y_MULT], "BeatYMult" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Z], "BeatZ" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Z_OFFSET], "BeatZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Z_PERIOD], "BeatZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_BEAT_Z_MULT], "BeatZMult" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG], "Zigzag" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG_PERIOD], "ZigzagPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG_OFFSET], "ZigzagOffset" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG_Z], "ZigzagZ" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG_Z_PERIOD], "ZigzagZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_ZIGZAG_Z_OFFSET], "ZigzagZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_SAWTOOTH], "Sawtooth" );
AddPart( AddTo, m_fEffects[EFFECT_SAWTOOTH_PERIOD], "SawtoothPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_SAWTOOTH_Z], "SawtoothZ" );
AddPart( AddTo, m_fEffects[EFFECT_SAWTOOTH_Z_PERIOD], "SawtoothZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE], "Square" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE_OFFSET], "SquareOffset" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE_PERIOD], "SquarePeriod" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE_Z], "SquareZ" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE_Z_OFFSET], "SquareZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_SQUARE_Z_PERIOD], "SquareZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL], "Digital" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_STEPS], "DigitalSteps" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_PERIOD], "DigitalPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_OFFSET], "DigitalOffset" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_Z], "DigitalZ" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_Z_STEPS], "DigitalZSteps" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_Z_PERIOD], "DigitalZPeriod" );
AddPart( AddTo, m_fEffects[EFFECT_DIGITAL_Z_OFFSET], "DigitalZOffset" );
AddPart( AddTo, m_fEffects[EFFECT_PARABOLA_X], "ParabolaX" );
AddPart( AddTo, m_fEffects[EFFECT_PARABOLA_Y], "ParabolaY" );
AddPart( AddTo, m_fEffects[EFFECT_PARABOLA_Z], "ParabolaZ" );
AddPart( AddTo, m_fEffects[EFFECT_XMODE], "XMode" );
AddPart( AddTo, m_fEffects[EFFECT_TWIRL], "Twirl" );
AddPart( AddTo, m_fEffects[EFFECT_ROLL], "Roll" );
@@ -276,6 +354,9 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
AddPart( AddTo, m_fScrolls[SCROLL_CROSS], "Cross" );
AddPart( AddTo, m_fScrolls[SCROLL_CENTERED], "Centered" );
AddPart( AddTo, m_fModTimerMult, "ModTimerMult" );
AddPart( AddTo, m_fModTimerOffset, "ModTimerOffset" );
AddPart( AddTo, m_fDark, "Dark" );
AddPart( AddTo, m_fBlind, "Blind" );
@@ -490,6 +571,15 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
// level is a percentage for every other option, so multiply by 100. -Kyz
m_BatteryLives= level * 100.0f;
}
else if( sBit.find("modtimer") != sBit.npos)
{
if( sBit == "modtimerdefault" ) { m_ModTimerType= ModTimerType_Default; }
else if( sBit == "modtimersong" ) { m_ModTimerType= ModTimerType_Song; }
else if( sBit == "modtimerbeat" ) { m_ModTimerType= ModTimerType_Beat; }
else if( sBit == "modtimergame" ) { m_ModTimerType= ModTimerType_Game; }
else if( sBit == "modtimermult" ) SET_FLOAT( fModTimerMult )
else if( sBit == "modtimeroffset" ) SET_FLOAT( fModTimerOffset )
}
else if( sBit == "bar" ) { m_LifeType= LifeType_Bar; }
else if( sBit == "battery" ) { m_LifeType= LifeType_Battery; }
else if( sBit == "lifetime" ) { m_LifeType= LifeType_Time; }
@@ -515,6 +605,10 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
else if( sBit == "drunkspeed" ) SET_FLOAT( fEffects[EFFECT_DRUNK_SPEED] )
else if( sBit == "drunkoffset" ) SET_FLOAT( fEffects[EFFECT_DRUNK_OFFSET] )
else if( sBit == "drunkperiod" ) SET_FLOAT( fEffects[EFFECT_DRUNK_PERIOD] )
else if( sBit == "drunkz" ) SET_FLOAT( fEffects[EFFECT_DRUNK_Z] )
else if( sBit == "drunkzspeed" ) SET_FLOAT( fEffects[EFFECT_DRUNK_Z_SPEED] )
else if( sBit == "drunkzoffset" ) SET_FLOAT( fEffects[EFFECT_DRUNK_Z_OFFSET] )
else if( sBit == "drunkzperiod" ) SET_FLOAT( fEffects[EFFECT_DRUNK_Z_PERIOD] )
}
else if( sBit == "dizzy" ) SET_FLOAT( fEffects[EFFECT_DIZZY] )
else if( sBit.find("confusion") != sBit.npos)
@@ -535,6 +629,9 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
if( sBit == "tornado" ) SET_FLOAT( fEffects[EFFECT_TORNADO] )
else if( sBit == "tornadoperiod" ) SET_FLOAT( fEffects[EFFECT_TORNADO_PERIOD] )
else if( sBit == "tornadooffset" ) SET_FLOAT( fEffects[EFFECT_TORNADO_OFFSET] )
else if( sBit == "tornadoz" ) SET_FLOAT( fEffects[EFFECT_TORNADO_Z] )
else if( sBit == "tornadozperiod" ) SET_FLOAT( fEffects[EFFECT_TORNADO_Z_PERIOD] )
else if( sBit == "tornadozoffset" ) SET_FLOAT( fEffects[EFFECT_TORNADO_Z_OFFSET] )
}
else if( sBit.find("tipsy") != sBit.npos)
{
@@ -547,6 +644,9 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
if( sBit == "bumpy" ) SET_FLOAT( fEffects[EFFECT_BUMPY] )
else if( sBit == "bumpyoffset" ) SET_FLOAT( fEffects[EFFECT_BUMPY_OFFSET] )
else if( sBit == "bumpyperiod" ) SET_FLOAT( fEffects[EFFECT_BUMPY_PERIOD] )
else if( sBit == "bumpyx" ) SET_FLOAT( fEffects[EFFECT_BUMPY_X] )
else if( sBit == "bumpyxoffset" ) SET_FLOAT( fEffects[EFFECT_BUMPY_X_OFFSET] )
else if( sBit == "bumpyxperiod" ) SET_FLOAT( fEffects[EFFECT_BUMPY_X_PERIOD] )
}
else if( sBit.find("beat") != sBit.npos)
{
@@ -554,6 +654,56 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
else if( sBit == "beatoffset" ) SET_FLOAT( fEffects[EFFECT_BEAT_OFFSET] )
else if( sBit == "beatperiod" ) SET_FLOAT( fEffects[EFFECT_BEAT_PERIOD] )
else if( sBit == "beatmult" ) SET_FLOAT( fEffects[EFFECT_BEAT_MULT] )
else if( sBit == "beaty" ) SET_FLOAT( fEffects[EFFECT_BEAT_Y] )
else if( sBit == "beatyoffset" ) SET_FLOAT( fEffects[EFFECT_BEAT_Y_OFFSET] )
else if( sBit == "beatyperiod" ) SET_FLOAT( fEffects[EFFECT_BEAT_Y_PERIOD] )
else if( sBit == "beatymult" ) SET_FLOAT( fEffects[EFFECT_BEAT_Y_MULT] )
else if( sBit == "beatz" ) SET_FLOAT( fEffects[EFFECT_BEAT_Z] )
else if( sBit == "beatzoffset" ) SET_FLOAT( fEffects[EFFECT_BEAT_Z_OFFSET] )
else if( sBit == "beatzperiod" ) SET_FLOAT( fEffects[EFFECT_BEAT_Z_PERIOD] )
else if( sBit == "beatzmult" ) SET_FLOAT( fEffects[EFFECT_BEAT_Z_MULT] )
}
else if( sBit.find("digital") != sBit.npos)
{
if( sBit == "digital" ) SET_FLOAT( fEffects[EFFECT_DIGITAL] )
else if( sBit == "digitalsteps" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_STEPS] )
else if( sBit == "digitalperiod" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_PERIOD] )
else if( sBit == "digitaloffset" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_OFFSET] )
else if( sBit == "digitalz" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_Z] )
else if( sBit == "digitalzsteps" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_Z_STEPS] )
else if( sBit == "digitalzperiod" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_Z_PERIOD] )
else if( sBit == "digitalzoffset" ) SET_FLOAT( fEffects[EFFECT_DIGITAL_Z_OFFSET] )
}
else if( sBit.find("zigzag") != sBit.npos)
{
if( sBit == "zigzag" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG] )
else if( sBit == "zigzagperiod" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG_PERIOD] )
else if( sBit == "zigzagoffset" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG_OFFSET] )
else if( sBit == "zigzagz" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG_Z] )
else if( sBit == "zigzagzperiod" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG_Z_PERIOD] )
else if( sBit == "zigzagzoffset" ) SET_FLOAT( fEffects[EFFECT_ZIGZAG_Z_OFFSET] )
}
else if( sBit.find("sawtooth") != sBit.npos)
{
if( sBit == "sawtooth" ) SET_FLOAT( fEffects[EFFECT_SAWTOOTH] )
else if( sBit == "sawtoothperiod" ) SET_FLOAT( fEffects[EFFECT_SAWTOOTH_PERIOD] )
else if( sBit == "sawtoothz" ) SET_FLOAT( fEffects[EFFECT_SAWTOOTH_Z] )
else if( sBit == "sawtoothzperiod" ) SET_FLOAT( fEffects[EFFECT_SAWTOOTH_Z_PERIOD] )
}
else if( sBit.find("square") != sBit.npos)
{
if( sBit == "square" ) SET_FLOAT( fEffects[EFFECT_SQUARE] )
else if( sBit == "squareoffset" ) SET_FLOAT( fEffects[EFFECT_SQUARE_OFFSET] )
else if( sBit == "squareperiod" ) SET_FLOAT( fEffects[EFFECT_SQUARE_PERIOD] )
else if( sBit == "squarez" ) SET_FLOAT( fEffects[EFFECT_SQUARE_Z] )
else if( sBit == "squarezoffset" ) SET_FLOAT( fEffects[EFFECT_SQUARE_Z_OFFSET] )
else if( sBit == "squarezperiod" ) SET_FLOAT( fEffects[EFFECT_SQUARE_Z_PERIOD] )
}
else if( sBit.find("parabola") != sBit.npos)
{
if( sBit == "parabolax" ) SET_FLOAT( fEffects[EFFECT_PARABOLA_X] )
else if( sBit == "parabolay" ) SET_FLOAT( fEffects[EFFECT_PARABOLA_Y] )
else if( sBit == "parabolaz" ) SET_FLOAT( fEffects[EFFECT_PARABOLA_Z] )
}
else if( sBit == "xmode" ) SET_FLOAT( fEffects[EFFECT_XMODE] )
else if( sBit == "twirl" ) SET_FLOAT( fEffects[EFFECT_TWIRL] )
@@ -861,6 +1011,9 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
#define COMPARE(x) { if( x != other.x ) return false; }
COMPARE(m_LifeType);
COMPARE(m_DrainType);
COMPARE(m_ModTimerType);
COMPARE(m_fModTimerMult);
COMPARE(m_fModTimerOffset);
COMPARE(m_BatteryLives);
COMPARE(m_fTimeSpacing);
COMPARE(m_fScrollSpeed);
@@ -916,6 +1069,9 @@ PlayerOptions& PlayerOptions::operator=(PlayerOptions const& other)
#define CPY_SPEED(x) m_ ## x = other.m_ ## x; m_Speed ## x = other.m_Speed ## x;
CPY(m_LifeType);
CPY(m_DrainType);
CPY(m_ModTimerType);
CPY_SPEED(fModTimerMult);
CPY_SPEED(fModTimerOffset);
CPY(m_BatteryLives);
CPY_SPEED(fTimeSpacing);
CPY_SPEED(fScrollSpeed);
@@ -1152,6 +1308,9 @@ void PlayerOptions::ResetPrefs( ResetPrefsType type )
CPY(m_LifeType);
CPY(m_DrainType);
CPY(m_BatteryLives);
CPY(m_ModTimerType);
CPY(m_fModTimerMult);
CPY(m_fModTimerOffset);
CPY(m_MinTNSToHideNotes);
CPY( m_fPerspectiveTilt );
@@ -1198,7 +1357,10 @@ public:
ENUM_INTERFACE(LifeSetting, LifeType, LifeType);
ENUM_INTERFACE(DrainSetting, DrainType, DrainType);
ENUM_INTERFACE(ModTimerSetting, ModTimerType, ModTimerType)
INT_INTERFACE(BatteryLives, BatteryLives);
FLOAT_INTERFACE(ModTimerMult, ModTimerMult, true);
FLOAT_INTERFACE(ModTimerOffset, ModTimerOffset, true);
FLOAT_INTERFACE(TimeSpacing, TimeSpacing, true);
FLOAT_INTERFACE(MaxScrollBPM, MaxScrollBPM, true);
FLOAT_INTERFACE(ScrollSpeed, ScrollSpeed, true);
@@ -1214,6 +1376,10 @@ public:
FLOAT_INTERFACE(DrunkSpeed, Effects[PlayerOptions::EFFECT_DRUNK_SPEED], true);
FLOAT_INTERFACE(DrunkOffset, Effects[PlayerOptions::EFFECT_DRUNK_OFFSET], true);
FLOAT_INTERFACE(DrunkPeriod, Effects[PlayerOptions::EFFECT_DRUNK_PERIOD], true);
FLOAT_INTERFACE(DrunkZ, Effects[PlayerOptions::EFFECT_DRUNK_Z], true);
FLOAT_INTERFACE(DrunkZSpeed, Effects[PlayerOptions::EFFECT_DRUNK_Z_SPEED], true);
FLOAT_INTERFACE(DrunkZOffset, Effects[PlayerOptions::EFFECT_DRUNK_Z_OFFSET], true);
FLOAT_INTERFACE(DrunkZPeriod, Effects[PlayerOptions::EFFECT_DRUNK_Z_PERIOD], true);
FLOAT_INTERFACE(Dizzy, Effects[PlayerOptions::EFFECT_DIZZY], true);
FLOAT_INTERFACE(Confusion, Effects[PlayerOptions::EFFECT_CONFUSION], true);
FLOAT_INTERFACE(ConfusionOffset, Effects[PlayerOptions::EFFECT_CONFUSION_OFFSET], true);
@@ -1228,16 +1394,57 @@ public:
FLOAT_INTERFACE(Tornado, Effects[PlayerOptions::EFFECT_TORNADO], true);
FLOAT_INTERFACE(TornadoPeriod, Effects[PlayerOptions::EFFECT_TORNADO_PERIOD], true);
FLOAT_INTERFACE(TornadoOffset, Effects[PlayerOptions::EFFECT_TORNADO_OFFSET], true);
FLOAT_INTERFACE(TornadoZ, Effects[PlayerOptions::EFFECT_TORNADO_Z], true);
FLOAT_INTERFACE(TornadoZPeriod, Effects[PlayerOptions::EFFECT_TORNADO_Z_PERIOD], true);
FLOAT_INTERFACE(TornadoZOffset, Effects[PlayerOptions::EFFECT_TORNADO_Z_OFFSET], true);
FLOAT_INTERFACE(Tipsy, Effects[PlayerOptions::EFFECT_TIPSY], true);
FLOAT_INTERFACE(TipsySpeed, Effects[PlayerOptions::EFFECT_TIPSY_SPEED], true);
FLOAT_INTERFACE(TipsyOffset, Effects[PlayerOptions::EFFECT_TIPSY_OFFSET], true);
FLOAT_INTERFACE(Bumpy, Effects[PlayerOptions::EFFECT_BUMPY], true);
FLOAT_INTERFACE(BumpyOffset, Effects[PlayerOptions::EFFECT_BUMPY_OFFSET], true);
FLOAT_INTERFACE(BumpyPeriod, Effects[PlayerOptions::EFFECT_BUMPY_PERIOD], true);
FLOAT_INTERFACE(BumpyX, Effects[PlayerOptions::EFFECT_BUMPY_X], true);
FLOAT_INTERFACE(BumpyXOffset, Effects[PlayerOptions::EFFECT_BUMPY_X_OFFSET], true);
FLOAT_INTERFACE(BumpyXPeriod, Effects[PlayerOptions::EFFECT_BUMPY_X_PERIOD], true);
FLOAT_INTERFACE(Beat, Effects[PlayerOptions::EFFECT_BEAT], true);
FLOAT_INTERFACE(BeatOffset, Effects[PlayerOptions::EFFECT_BEAT_OFFSET], true);
FLOAT_INTERFACE(BeatPeriod, Effects[PlayerOptions::EFFECT_BEAT_PERIOD], true);
FLOAT_INTERFACE(BeatMult, Effects[PlayerOptions::EFFECT_BEAT_MULT], true);
FLOAT_INTERFACE(BeatY, Effects[PlayerOptions::EFFECT_BEAT_Y], true);
FLOAT_INTERFACE(BeatYOffset, Effects[PlayerOptions::EFFECT_BEAT_Y_OFFSET], true);
FLOAT_INTERFACE(BeatYPeriod, Effects[PlayerOptions::EFFECT_BEAT_Y_PERIOD], true);
FLOAT_INTERFACE(BeatYMult, Effects[PlayerOptions::EFFECT_BEAT_Y_MULT], true);
FLOAT_INTERFACE(BeatZ, Effects[PlayerOptions::EFFECT_BEAT_Z], true);
FLOAT_INTERFACE(BeatZOffset, Effects[PlayerOptions::EFFECT_BEAT_Z_OFFSET], true);
FLOAT_INTERFACE(BeatZPeriod, Effects[PlayerOptions::EFFECT_BEAT_Z_PERIOD], true);
FLOAT_INTERFACE(BeatZMult, Effects[PlayerOptions::EFFECT_BEAT_Z_MULT], true);
FLOAT_INTERFACE(Zigzag, Effects[PlayerOptions::EFFECT_ZIGZAG], true);
FLOAT_INTERFACE(ZigzagPeriod, Effects[PlayerOptions::EFFECT_ZIGZAG_PERIOD], true);
FLOAT_INTERFACE(ZigzagOffset, Effects[PlayerOptions::EFFECT_ZIGZAG_OFFSET], true);
FLOAT_INTERFACE(ZigzagZ, Effects[PlayerOptions::EFFECT_ZIGZAG_Z], true);
FLOAT_INTERFACE(ZigzagZPeriod, Effects[PlayerOptions::EFFECT_ZIGZAG_Z_PERIOD], true);
FLOAT_INTERFACE(ZigzagZOffset, Effects[PlayerOptions::EFFECT_ZIGZAG_Z_OFFSET], true);
FLOAT_INTERFACE(Sawtooth, Effects[PlayerOptions::EFFECT_SAWTOOTH], true);
FLOAT_INTERFACE(SawtoothPeriod, Effects[PlayerOptions::EFFECT_SAWTOOTH_PERIOD], true);
FLOAT_INTERFACE(SawtoothZ, Effects[PlayerOptions::EFFECT_SAWTOOTH_Z], true);
FLOAT_INTERFACE(SawtoothZPeriod, Effects[PlayerOptions::EFFECT_SAWTOOTH_Z_PERIOD], true);
FLOAT_INTERFACE(Square, Effects[PlayerOptions::EFFECT_SQUARE], true);
FLOAT_INTERFACE(SquareOffset, Effects[PlayerOptions::EFFECT_SQUARE_OFFSET], true);
FLOAT_INTERFACE(SquarePeriod, Effects[PlayerOptions::EFFECT_SQUARE_PERIOD], true);
FLOAT_INTERFACE(SquareZ, Effects[PlayerOptions::EFFECT_SQUARE_Z], true);
FLOAT_INTERFACE(SquareZOffset, Effects[PlayerOptions::EFFECT_SQUARE_Z_OFFSET], true);
FLOAT_INTERFACE(SquareZPeriod, Effects[PlayerOptions::EFFECT_SQUARE_Z_PERIOD], true);
FLOAT_INTERFACE(Digital, Effects[PlayerOptions::EFFECT_DIGITAL], true);
FLOAT_INTERFACE(DigitalSteps, Effects[PlayerOptions::EFFECT_DIGITAL_STEPS], true);
FLOAT_INTERFACE(DigitalPeriod, Effects[PlayerOptions::EFFECT_DIGITAL_PERIOD], true);
FLOAT_INTERFACE(DigitalOffset, Effects[PlayerOptions::EFFECT_DIGITAL_OFFSET], true);
FLOAT_INTERFACE(DigitalZ, Effects[PlayerOptions::EFFECT_DIGITAL_Z], true);
FLOAT_INTERFACE(DigitalZSteps, Effects[PlayerOptions::EFFECT_DIGITAL_Z_STEPS], true);
FLOAT_INTERFACE(DigitalZPeriod, Effects[PlayerOptions::EFFECT_DIGITAL_Z_PERIOD], true);
FLOAT_INTERFACE(DigitalZOffset, Effects[PlayerOptions::EFFECT_DIGITAL_Z_OFFSET], true);
FLOAT_INTERFACE(ParabolaX, Effects[PlayerOptions::EFFECT_PARABOLA_X], true);
FLOAT_INTERFACE(ParabolaY, Effects[PlayerOptions::EFFECT_PARABOLA_Y], true);
FLOAT_INTERFACE(ParabolaZ, Effects[PlayerOptions::EFFECT_PARABOLA_Z], true);
FLOAT_INTERFACE(Xmode, Effects[PlayerOptions::EFFECT_XMODE], true);
FLOAT_INTERFACE(Twirl, Effects[PlayerOptions::EFFECT_TWIRL], true);
FLOAT_INTERFACE(Roll, Effects[PlayerOptions::EFFECT_ROLL], true);
@@ -1608,6 +1815,9 @@ public:
ADD_METHOD(LifeSetting);
ADD_METHOD(DrainSetting);
ADD_METHOD(ModTimerSetting);
ADD_METHOD(ModTimerMult);
ADD_METHOD(ModTimerOffset);
ADD_METHOD(BatteryLives);
ADD_METHOD(TimeSpacing);
ADD_METHOD(MaxScrollBPM);
@@ -1624,6 +1834,10 @@ public:
ADD_METHOD(DrunkSpeed);
ADD_METHOD(DrunkOffset);
ADD_METHOD(DrunkPeriod);
ADD_METHOD(DrunkZ);
ADD_METHOD(DrunkZSpeed);
ADD_METHOD(DrunkZOffset);
ADD_METHOD(DrunkZPeriod);
ADD_METHOD(Dizzy);
ADD_METHOD(Confusion);
ADD_METHOD(ConfusionOffset);
@@ -1638,16 +1852,57 @@ public:
ADD_METHOD(Tornado);
ADD_METHOD(TornadoPeriod);
ADD_METHOD(TornadoOffset);
ADD_METHOD(TornadoZ);
ADD_METHOD(TornadoZPeriod);
ADD_METHOD(TornadoZOffset);
ADD_METHOD(Tipsy);
ADD_METHOD(TipsySpeed);
ADD_METHOD(TipsyOffset);
ADD_METHOD(Bumpy);
ADD_METHOD(BumpyOffset);
ADD_METHOD(BumpyPeriod);
ADD_METHOD(BumpyX);
ADD_METHOD(BumpyXOffset);
ADD_METHOD(BumpyXPeriod);
ADD_METHOD(Beat);
ADD_METHOD(BeatOffset);
ADD_METHOD(BeatPeriod);
ADD_METHOD(BeatMult);
ADD_METHOD(BeatY);
ADD_METHOD(BeatYOffset);
ADD_METHOD(BeatYPeriod);
ADD_METHOD(BeatYMult);
ADD_METHOD(BeatZ);
ADD_METHOD(BeatZOffset);
ADD_METHOD(BeatZPeriod);
ADD_METHOD(BeatZMult);
ADD_METHOD(Zigzag);
ADD_METHOD(ZigzagPeriod);
ADD_METHOD(ZigzagOffset);
ADD_METHOD(ZigzagZ);
ADD_METHOD(ZigzagZPeriod);
ADD_METHOD(ZigzagZOffset);
ADD_METHOD(Sawtooth);
ADD_METHOD(SawtoothPeriod);
ADD_METHOD(SawtoothZ);
ADD_METHOD(SawtoothZPeriod);
ADD_METHOD(Square);
ADD_METHOD(SquareOffset);
ADD_METHOD(SquarePeriod);
ADD_METHOD(SquareZ);
ADD_METHOD(SquareZOffset);
ADD_METHOD(SquareZPeriod);
ADD_METHOD(Digital);
ADD_METHOD(DigitalSteps);
ADD_METHOD(DigitalPeriod);
ADD_METHOD(DigitalOffset);
ADD_METHOD(DigitalZ);
ADD_METHOD(DigitalZSteps);
ADD_METHOD(DigitalZPeriod);
ADD_METHOD(DigitalZOffset);
ADD_METHOD(ParabolaX);
ADD_METHOD(ParabolaY);
ADD_METHOD(ParabolaZ);
ADD_METHOD(Xmode);
ADD_METHOD(Twirl);
ADD_METHOD(Roll);