void InitNextEnvelopeState(EffectEnvelope env)
{
byte lastState = (byte)(env.state - 1);
short stepCount = _effectEnvStepTable[GetEffectModifier((ushort)(((env.stateTargetLevels[lastState] & 0x7F) << 5) + env.modWheelSensitivity))];
if ((env.stateTargetLevels[lastState] & 0x80) != 0)
stepCount = GetRandScale(stepCount);
if (stepCount == 0)
stepCount = 1;
env.stateNumSteps = env.stateStepCounter = stepCount;
short totalChange = 0;
if (lastState != 2)
{
totalChange = GetEffectModLevel(env.maxLevel, (sbyte)((env.stateModWheelLevels[lastState] & 0x7F) - 31));
if ((env.stateModWheelLevels[lastState] & 0x80) != 0)
totalChange = GetRandScale(totalChange);
if (totalChange + env.startLevel > env.maxLevel)
totalChange = (short)(env.maxLevel - env.startLevel);
else if (totalChange + env.startLevel < 0)
totalChange = (short)-env.startLevel;
totalChange -= env.currentLevel;
}
env.changePerStep = (short)(totalChange / stepCount);
if (totalChange < 0)
{
totalChange = (short)-totalChange;
env.dir = -1;
}
else
{
env.dir = 1;
}
env.changePerStepRem = (short)(totalChange % stepCount);
env.changeCountRem = 0;
}