Added nITG's Tangent Modifiers (#1495)

* Implemented nITG's TanDrunk modifiers.

RageMath functions added:
RageFastTan
RageFastCsc
Modifers added:
GlitchyTan
TanDrunk
TanDrunkSpeed
TanDrunkOffset
TanDrunkPeriod
TanDrunkZ
TanDrunkZSpeed
TanDrunkZOffset
TanDrunkZPeriod

* Implemented nITG's TanTipsy and TanTornado mods

Also, the Drunk code and Tipsy update code was deduplicated.
Modifiers Added:
TanTipsy
TanTipsySpeed
TanTipsyOffset
TanTornado
TanTornadoPeriod
TanTornadoOffset
TanTornadoZ
TanTornadoZPeriod
TanTornadoZOffset

* Implemented nITG's remaining tan mods.

Modifiers added:
TanExpand
TanExpandPeriod
TanBumpy
TanBumpyPeriod
TanBumpyOffset
TanBumpyX
TanBumpyXPeriod
TanBumpyXOffset
TanDigital
TanDigitalPeriod
TanDigitalSteps
TanDigitalOffset
TanDigitalZ
TanDigitalZPeriod
TanDigitalZSteps
TanDigitalZOffset

* Updated luadocs to reference new modifiers

* Rename GlitchyTan to Cosecant (#4)

* Rename GlitchyTan to Cosecant

* Update luadocs to reflect change
This commit is contained in:
MrThatKid
2017-07-14 22:32:58 -07:00
committed by GitHub
parent 05a58a69bd
commit 921a617a64
7 changed files with 479 additions and 68 deletions
+189 -34
View File
@@ -115,8 +115,11 @@ namespace
float m_fInvertDistance[MAX_COLS_PER_PLAYER];
float m_tipsy_result[MAX_COLS_PER_PLAYER];
float m_tipsy_offset_result[MAX_COLS_PER_PLAYER];
float m_tan_tipsy_result[MAX_COLS_PER_PLAYER];
float m_tan_tipsy_offset_result[MAX_COLS_PER_PLAYER];
float m_fBeatFactor[3];
float m_fExpandSeconds;
float m_fTanExpandSeconds;
// m_prev_style is for checking whether ArrowEffects::Init needs to be
// called. Finding all the placed ArrowEffects is used and making sure
@@ -136,10 +139,18 @@ namespace
float tornado_offset_scale_from_high[3];
};
static float SelectTanType(float angle, bool is_cosec)
{
if (is_cosec)
return RageFastCsc(angle);
else
return RageFastTan(angle);
}
static float CalculateTornadoOffsetFromMagnitude(int dimension, int col_id,
float magnitude, float effect_offset, float period,
const Style::ColumnInfo* pCols, float field_zoom,
PerPlayerData& data, float y_offset)
PerPlayerData& data, float y_offset, bool is_tan)
{
float const real_pixel_offset= pCols[col_id].fXOffset * field_zoom;
float const position_between= SCALE(real_pixel_offset,
@@ -150,7 +161,9 @@ static float CalculateTornadoOffsetFromMagnitude(int dimension, int col_id,
float rads= acosf(position_between);
float frequency= tornado_offset_frequency[dimension];
rads+= (y_offset + effect_offset) * ((period * frequency) + frequency) / SCREEN_HEIGHT;
float const adjusted_pixel_offset= SCALE(RageFastCos(rads),
float processed_rads = is_tan ? SelectTanType(rads, curr_options->m_bCosecant) : RageFastCos(rads);
float const adjusted_pixel_offset= SCALE(processed_rads,
tornado_offset_scale_from_low[dimension],
tornado_offset_scale_from_high[dimension],
data.m_MinTornado[dimension][col_id] * field_zoom,
@@ -158,6 +171,24 @@ static float CalculateTornadoOffsetFromMagnitude(int dimension, int col_id,
return (adjusted_pixel_offset - real_pixel_offset) * magnitude;
}
static float CalculateDrunkAngle(float speed, int col, float offset,
float col_frequency, float y_offset, float period, float offset_frequency)
{
float time = ArrowEffects::GetTime();
return time * (1+speed) + col*( (offset*col_frequency) + col_frequency)
+ y_offset * ( (period*offset_frequency) + offset_frequency) / SCREEN_HEIGHT;
}
static float CalculateBumpyAngle(float y_offset, float offset, float period)
{
return (y_offset+(100.0f*offset))/((period*16.0f)+16.0f);
}
static float CalculateDigitalAngle(float y_offset, float offset, float period)
{
return PI * (y_offset + (1.0f * offset ) ) / (ARROW_SIZE + (period * ARROW_SIZE) );
}
static void UpdateBeat(int dimension, PerPlayerData &data, const SongPosition &position, float beat_offset, float beat_mult)
{
float fAccelTime = 0.2f, fTotalTime = 0.5f;
@@ -191,6 +222,36 @@ static void UpdateBeat(int dimension, PerPlayerData &data, const SongPosition &p
data.m_fBeatFactor[dimension] *= 20.0f;
}
static void UpdateTipsy(float * tipsy_result, float * tipsy_offset_result, float offset, float speed, bool is_tan)
{
const float time= ArrowEffects::GetTime();
const float time_times_timer= time * ((speed * TIPSY_TIMER_FREQUENCY) + TIPSY_TIMER_FREQUENCY);
const float arrow_times_mag= ARROW_SIZE * TIPSY_ARROW_MAGNITUDE;
const float time_times_offset_timer= time *
TIPSY_OFFSET_TIMER_FREQUENCY;
const float arrow_times_offset_mag= ARROW_SIZE *
TIPSY_OFFSET_ARROW_MAGNITUDE;
for(int col= 0; col < MAX_COLS_PER_PLAYER; ++col)
{
if (is_tan)
{
tipsy_result[col]= SelectTanType(time_times_timer + (col * ((offset *
TIPSY_COLUMN_FREQUENCY) + TIPSY_COLUMN_FREQUENCY)), curr_options->m_bCosecant)
* arrow_times_mag;
tipsy_offset_result[col]= SelectTanType(time_times_offset_timer + (col *
TIPSY_OFFSET_COLUMN_FREQUENCY), curr_options->m_bCosecant)
* arrow_times_offset_mag;
}
else
{
tipsy_result[col]= RageFastCos(time_times_timer + (col * ((offset *
TIPSY_COLUMN_FREQUENCY) + TIPSY_COLUMN_FREQUENCY))) * arrow_times_mag;
tipsy_offset_result[col]= RageFastCos(time_times_offset_timer + (col *
TIPSY_OFFSET_COLUMN_FREQUENCY)) * arrow_times_offset_mag;
}
}
}
void ArrowEffects::Init(PlayerNumber pn)
{
@@ -274,6 +335,8 @@ void ArrowEffects::Update()
{
data.m_fExpandSeconds += fTime - fLastTime;
data.m_fExpandSeconds = fmodf( data.m_fExpandSeconds, (PI*2)/(accels[PlayerOptions::ACCEL_EXPAND_PERIOD]+1) );
data.m_fTanExpandSeconds += fTime - fLastTime;
data.m_fTanExpandSeconds = fmodf( data.m_fTanExpandSeconds, (PI*2)/(accels[PlayerOptions::ACCEL_TAN_EXPAND_PERIOD]+1) );
}
// Update Invert
@@ -323,22 +386,9 @@ void ArrowEffects::Update()
// Update Tipsy
if(effects[PlayerOptions::EFFECT_TIPSY] != 0)
{
const float time= ArrowEffects::GetTime();
const float time_times_timer= time * ((effects[PlayerOptions::EFFECT_TIPSY_SPEED] * TIPSY_TIMER_FREQUENCY) + TIPSY_TIMER_FREQUENCY);
const float arrow_times_mag= ARROW_SIZE * TIPSY_ARROW_MAGNITUDE;
const float time_times_offset_timer= time *
TIPSY_OFFSET_TIMER_FREQUENCY;
const float arrow_times_offset_mag= ARROW_SIZE *
TIPSY_OFFSET_ARROW_MAGNITUDE;
for(int col= 0; col < MAX_COLS_PER_PLAYER; ++col)
{
data.m_tipsy_result[col]= RageFastCos(
time_times_timer + (col * ((effects[PlayerOptions::EFFECT_TIPSY_OFFSET] * TIPSY_COLUMN_FREQUENCY) + TIPSY_COLUMN_FREQUENCY))) *
arrow_times_mag;
data.m_tipsy_offset_result[col]= RageFastCos(
time_times_offset_timer + (col * TIPSY_OFFSET_COLUMN_FREQUENCY)) *
arrow_times_offset_mag;
}
UpdateTipsy(data.m_tipsy_result, data.m_tipsy_offset_result,
effects[PlayerOptions::EFFECT_TIPSY_OFFSET],
effects[PlayerOptions::EFFECT_TIPSY_SPEED], false);
}
else
{
@@ -347,6 +397,21 @@ void ArrowEffects::Update()
data.m_tipsy_result[col]= 0;
}
}
// Update TanTipsy
if(effects[PlayerOptions::EFFECT_TAN_TIPSY] != 0)
{
UpdateTipsy(data.m_tan_tipsy_result, data.m_tan_tipsy_offset_result,
effects[PlayerOptions::EFFECT_TAN_TIPSY_OFFSET],
effects[PlayerOptions::EFFECT_TAN_TIPSY_SPEED], true);
}
else
{
for(int col= 0; col < MAX_COLS_PER_PLAYER; ++col)
{
data.m_tan_tipsy_result[col]= 0;
}
}
// Update Beat
UpdateBeat(dim_x, data, position, effects[PlayerOptions::EFFECT_BEAT_OFFSET], effects[PlayerOptions::EFFECT_BEAT_MULT]);
@@ -452,6 +517,9 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
const float* fAccels = curr_options->m_fAccels;
const float* fEffects = curr_options->m_fEffects;
// TODO: Don't index by PlayerNumber.
PerPlayerData &data = g_EffectData[pPlayerState->m_PlayerNumber];
float fYAdjust = 0; // fill this in depending on PlayerOptions
@@ -511,9 +579,6 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
if( fAccels[PlayerOptions::ACCEL_EXPAND] != 0 )
{
// TODO: Don't index by PlayerNumber.
PerPlayerData &data = g_EffectData[pPlayerState->m_PlayerNumber];
float fExpandMultiplier = SCALE( RageFastCos(data.m_fExpandSeconds*EXPAND_MULTIPLIER_FREQUENCY*(fAccels[PlayerOptions::ACCEL_EXPAND_PERIOD]+1)),
EXPAND_MULTIPLIER_SCALE_FROM_LOW, EXPAND_MULTIPLIER_SCALE_FROM_HIGH,
EXPAND_MULTIPLIER_SCALE_TO_LOW, EXPAND_MULTIPLIER_SCALE_TO_HIGH );
@@ -522,6 +587,16 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
EXPAND_SPEED_SCALE_TO_LOW, fExpandMultiplier );
}
if( fAccels[PlayerOptions::ACCEL_TAN_EXPAND] != 0 )
{
float fTanExpandMultiplier = SCALE( SelectTanType(data.m_fTanExpandSeconds*EXPAND_MULTIPLIER_FREQUENCY*(fAccels[PlayerOptions::ACCEL_TAN_EXPAND_PERIOD]+1), curr_options->m_bCosecant),
EXPAND_MULTIPLIER_SCALE_FROM_LOW, EXPAND_MULTIPLIER_SCALE_FROM_HIGH,
EXPAND_MULTIPLIER_SCALE_TO_LOW, EXPAND_MULTIPLIER_SCALE_TO_HIGH );
fScrollSpeed *= SCALE( fAccels[PlayerOptions::ACCEL_TAN_EXPAND],
EXPAND_SPEED_SCALE_FROM_LOW, EXPAND_SPEED_SCALE_FROM_HIGH,
EXPAND_SPEED_SCALE_TO_LOW, fTanExpandMultiplier );
}
fYOffset *= fScrollSpeed;
fPeakYOffsetOut *= fScrollSpeed;
@@ -569,6 +644,7 @@ float ArrowEffects::GetYPos( const PlayerState* pPlayerState, int iCol, float fY
// TODO: Don't index by PlayerNumber.
PerPlayerData& data= g_EffectData[curr_options->m_pn];
f+= fEffects[PlayerOptions::EFFECT_TIPSY] * data.m_tipsy_result[iCol];
f+= fEffects[PlayerOptions::EFFECT_TAN_TIPSY] * data.m_tan_tipsy_result[iCol];
if( fEffects[PlayerOptions::EFFECT_ATTENUATE_Y] != 0 )
{
@@ -600,6 +676,7 @@ float ArrowEffects::GetYOffsetFromYPos(int iCol, float YPos, float fYReverseOffs
// TODO: Don't index by PlayerNumber.
PerPlayerData& data= g_EffectData[curr_options->m_pn];
f+= fEffects[PlayerOptions::EFFECT_TIPSY] * data.m_tipsy_offset_result[iCol];
f+= fEffects[PlayerOptions::EFFECT_TAN_TIPSY] * data.m_tan_tipsy_offset_result[iCol];
f+= fEffects[PlayerOptions::EFFECT_PARABOLA_Y] * (YPos/ARROW_SIZE) * (YPos/ARROW_SIZE);
@@ -630,16 +707,44 @@ float ArrowEffects::GetXPos( const PlayerState* pPlayerState, int iColNum, float
iColNum, fEffects[PlayerOptions::EFFECT_TORNADO],
fEffects[PlayerOptions::EFFECT_TORNADO_OFFSET],
fEffects[PlayerOptions::EFFECT_TORNADO_PERIOD],
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset);
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset, false);
}
if( fEffects[PlayerOptions::EFFECT_TAN_TORNADO] != 0 )
{
fPixelOffsetFromCenter += CalculateTornadoOffsetFromMagnitude(dim_x,
iColNum, fEffects[PlayerOptions::EFFECT_TAN_TORNADO],
fEffects[PlayerOptions::EFFECT_TAN_TORNADO_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_TORNADO_PERIOD],
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset, true);
}
if( fEffects[PlayerOptions::EFFECT_BUMPY_X] != 0 )
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_BUMPY_X] * 40*RageFastSin( (fYOffset+(100.0f*(fEffects[PlayerOptions::EFFECT_BUMPY_X_OFFSET])))/((fEffects[PlayerOptions::EFFECT_BUMPY_X_PERIOD]*16.0f)+16.0f) );
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_BUMPY_X] *
40*RageFastSin( CalculateBumpyAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_BUMPY_X_OFFSET],
fEffects[PlayerOptions::EFFECT_BUMPY_X_PERIOD]) );
if( fEffects[PlayerOptions::EFFECT_TAN_BUMPY_X] != 0 )
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_TAN_BUMPY_X] *
40*SelectTanType( CalculateBumpyAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_BUMPY_X_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_BUMPY_X_PERIOD]), curr_options->m_bCosecant );
if( fEffects[PlayerOptions::EFFECT_DRUNK] != 0 )
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_DRUNK] *
( RageFastCos( GetTime()*(1+fEffects[PlayerOptions::EFFECT_DRUNK_SPEED]) + iColNum*((fEffects[PlayerOptions::EFFECT_DRUNK_OFFSET]*DRUNK_COLUMN_FREQUENCY)+DRUNK_COLUMN_FREQUENCY)
+ fYOffset*((fEffects[PlayerOptions::EFFECT_DRUNK_PERIOD]*DRUNK_OFFSET_FREQUENCY)+DRUNK_OFFSET_FREQUENCY)/SCREEN_HEIGHT) * ARROW_SIZE*DRUNK_ARROW_MAGNITUDE );
( RageFastCos( CalculateDrunkAngle(fEffects[PlayerOptions::EFFECT_DRUNK_SPEED], iColNum,
fEffects[PlayerOptions::EFFECT_DRUNK_OFFSET], DRUNK_COLUMN_FREQUENCY,
fYOffset, fEffects[PlayerOptions::EFFECT_DRUNK_PERIOD],
DRUNK_OFFSET_FREQUENCY) ) * ARROW_SIZE*DRUNK_ARROW_MAGNITUDE );
if( fEffects[PlayerOptions::EFFECT_TAN_DRUNK] != 0 )
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_TAN_DRUNK] *
( SelectTanType( CalculateDrunkAngle(fEffects[PlayerOptions::EFFECT_TAN_DRUNK_SPEED],
iColNum, fEffects[PlayerOptions::EFFECT_TAN_DRUNK_OFFSET],
DRUNK_COLUMN_FREQUENCY, fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_DRUNK_PERIOD], DRUNK_OFFSET_FREQUENCY)
, curr_options->m_bCosecant) * ARROW_SIZE*DRUNK_ARROW_MAGNITUDE );
if( fEffects[PlayerOptions::EFFECT_FLIP] != 0 )
{
@@ -685,8 +790,17 @@ float ArrowEffects::GetXPos( const PlayerState* pPlayerState, int iColNum, float
if( fEffects[PlayerOptions::EFFECT_DIGITAL] != 0 )
fPixelOffsetFromCenter += (fEffects[PlayerOptions::EFFECT_DIGITAL] * ARROW_SIZE * 0.5f) *
round((fEffects[PlayerOptions::EFFECT_DIGITAL_STEPS]+1) * RageFastSin(
(PI * (fYOffset + (1.0f * (fEffects[PlayerOptions::EFFECT_DIGITAL_OFFSET]) ) ) /
(ARROW_SIZE + (fEffects[PlayerOptions::EFFECT_DIGITAL_PERIOD] * ARROW_SIZE)) ) ) )/(fEffects[PlayerOptions::EFFECT_DIGITAL_STEPS]+1);
CalculateDigitalAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_DIGITAL_OFFSET],
fEffects[PlayerOptions::EFFECT_DIGITAL_PERIOD]) ) )/(fEffects[PlayerOptions::EFFECT_DIGITAL_STEPS]+1);
if( fEffects[PlayerOptions::EFFECT_TAN_DIGITAL] != 0 )
fPixelOffsetFromCenter += (fEffects[PlayerOptions::EFFECT_TAN_DIGITAL] * ARROW_SIZE * 0.5f) *
round((fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_STEPS]+1) * SelectTanType(
CalculateDigitalAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_PERIOD]), curr_options->m_bCosecant ) )/(fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_STEPS]+1);
if( fEffects[PlayerOptions::EFFECT_SQUARE] != 0 )
{
@@ -1073,14 +1187,35 @@ float ArrowEffects::GetZPos( const PlayerState* pPlayerState, int iCol, float fY
fEffects[PlayerOptions::EFFECT_TORNADO_Z],
fEffects[PlayerOptions::EFFECT_TORNADO_Z_OFFSET],
fEffects[PlayerOptions::EFFECT_TORNADO_Z_PERIOD],
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset);
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset, false);
}
if( fEffects[PlayerOptions::EFFECT_TAN_TORNADO_Z] != 0 )
{
fZPos += CalculateTornadoOffsetFromMagnitude(dim_z, iCol,
fEffects[PlayerOptions::EFFECT_TAN_TORNADO_Z],
fEffects[PlayerOptions::EFFECT_TAN_TORNADO_Z_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_TORNADO_Z_PERIOD],
pCols, pPlayerState->m_NotefieldZoom, data, fYOffset, true);
}
if( fEffects[PlayerOptions::EFFECT_BUMPY] != 0 )
fZPos += fEffects[PlayerOptions::EFFECT_BUMPY] * 40*RageFastSin( (fYOffset+(100.0f*fEffects[PlayerOptions::EFFECT_BUMPY_OFFSET]) )/((fEffects[PlayerOptions::EFFECT_BUMPY_PERIOD]*16.0f)+16.0f) );
fZPos += fEffects[PlayerOptions::EFFECT_BUMPY] * 40*RageFastSin(
CalculateBumpyAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_BUMPY_OFFSET],
fEffects[PlayerOptions::EFFECT_BUMPY_PERIOD]) );
if( curr_options->m_fBumpy[iCol] != 0 )
fZPos += curr_options->m_fBumpy[iCol] * 40*RageFastSin( (fYOffset+(100.0f*(fEffects[PlayerOptions::EFFECT_BUMPY_OFFSET])))/((fEffects[PlayerOptions::EFFECT_BUMPY_PERIOD]*16.0f)+16.0f) );
fZPos += curr_options->m_fBumpy[iCol] * 40*RageFastSin(
CalculateBumpyAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_BUMPY_OFFSET],
fEffects[PlayerOptions::EFFECT_BUMPY_PERIOD]) );
if( fEffects[PlayerOptions::EFFECT_TAN_BUMPY] != 0 )
fZPos += fEffects[PlayerOptions::EFFECT_TAN_BUMPY] * 40*SelectTanType(
CalculateBumpyAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_BUMPY_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_BUMPY_PERIOD]), curr_options->m_bCosecant );
if( fEffects[PlayerOptions::EFFECT_ZIGZAG_Z] != 0 )
{
@@ -1106,8 +1241,19 @@ float ArrowEffects::GetZPos( const PlayerState* pPlayerState, int iCol, float fY
if( fEffects[PlayerOptions::EFFECT_DRUNK_Z] != 0 )
fZPos += fEffects[PlayerOptions::EFFECT_DRUNK_Z] *
( RageFastCos( GetTime()*(1+fEffects[PlayerOptions::EFFECT_DRUNK_Z_SPEED]) + iCol*((fEffects[PlayerOptions::EFFECT_DRUNK_Z_OFFSET]*DRUNK_Z_COLUMN_FREQUENCY)+DRUNK_Z_COLUMN_FREQUENCY)
+ fYOffset*((fEffects[PlayerOptions::EFFECT_DRUNK_Z_PERIOD]*DRUNK_Z_OFFSET_FREQUENCY)+DRUNK_Z_OFFSET_FREQUENCY)/SCREEN_HEIGHT) * ARROW_SIZE*DRUNK_Z_ARROW_MAGNITUDE );
( RageFastCos( CalculateDrunkAngle(fEffects[PlayerOptions::EFFECT_DRUNK_Z_SPEED], iCol,
fEffects[PlayerOptions::EFFECT_DRUNK_Z_OFFSET], DRUNK_Z_COLUMN_FREQUENCY,
fYOffset, fEffects[PlayerOptions::EFFECT_DRUNK_Z_PERIOD],
DRUNK_Z_OFFSET_FREQUENCY) ) * ARROW_SIZE*DRUNK_Z_ARROW_MAGNITUDE );
if( fEffects[PlayerOptions::EFFECT_TAN_DRUNK_Z] != 0 )
fZPos += fEffects[PlayerOptions::EFFECT_TAN_DRUNK_Z] *
( SelectTanType( CalculateDrunkAngle(fEffects[PlayerOptions::EFFECT_TAN_DRUNK_Z_SPEED],
iCol, fEffects[PlayerOptions::EFFECT_TAN_DRUNK_Z_OFFSET],
DRUNK_Z_COLUMN_FREQUENCY, fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_DRUNK_Z_PERIOD],
DRUNK_Z_OFFSET_FREQUENCY)
, curr_options->m_bCosecant) * ARROW_SIZE*DRUNK_Z_ARROW_MAGNITUDE );
if( fEffects[PlayerOptions::EFFECT_BEAT_Z] != 0 )
{
@@ -1118,8 +1264,17 @@ float ArrowEffects::GetZPos( const PlayerState* pPlayerState, int iCol, float fY
if( fEffects[PlayerOptions::EFFECT_DIGITAL_Z] != 0 )
fZPos += (fEffects[PlayerOptions::EFFECT_DIGITAL_Z] * ARROW_SIZE * 0.5f) *
round((fEffects[PlayerOptions::EFFECT_DIGITAL_Z_STEPS]+1) * RageFastSin(
(PI * (fYOffset + (1.0f * (fEffects[PlayerOptions::EFFECT_DIGITAL_Z_OFFSET]) ) ) /
(ARROW_SIZE + (fEffects[PlayerOptions::EFFECT_DIGITAL_Z_PERIOD] * ARROW_SIZE)) )))/(fEffects[PlayerOptions::EFFECT_DIGITAL_Z_STEPS]+1);
CalculateDigitalAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_DIGITAL_Z_OFFSET],
fEffects[PlayerOptions::EFFECT_DIGITAL_Z_PERIOD]) ) ) /(fEffects[PlayerOptions::EFFECT_DIGITAL_Z_STEPS]+1);
if( fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z] != 0 )
fZPos += (fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z] * ARROW_SIZE * 0.5f) *
round((fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z_STEPS]+1) * SelectTanType(
CalculateDigitalAngle(fYOffset,
fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z_OFFSET],
fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z_PERIOD]), curr_options->m_bCosecant ) ) /(fEffects[PlayerOptions::EFFECT_TAN_DIGITAL_Z_STEPS]+1);
if( fEffects[PlayerOptions::EFFECT_SQUARE_Z] != 0 )
{