Ship_UpdateParameters()
...
//sail dmg check
if( sti(rCharacter.Ship.SP) <=0 )
{
arCharShip.MaxSpeedY = 0.0;
}
else
{
// wind power
float fWindPower = Whr_GetWindSpeed() / WIND_NORMAL_POWER;
float fWindDotShip = GetDotProduct(Whr_GetWindAngle(), stf(arCharShip.Ang.y)); // Wind.ay | Ship.ay
// boal -->
fShipSpeed = (fShipSpeed * fWindPower); // boal ęđĺéńĺđńęŕ˙ ńęîđîńňü äî óěĺíüřĺíčé ďđč äŕííîě âĺňđĺ.
arCharShip.MaxSpeedZ = fShipSpeed;
//Log_info("1 = " + arCharShip.MaxSpeedZ);
arCharShip.MaxSpeedZ = Sea_ApplyMaxSpeedZ(arCharShip, fWindDotShip); // ó÷ĺň ďŕđóńîâ â äđ ěĺńňĺ
//Log_info("2 = " + arCharShip.MaxSpeedZ);
// boal <--
// ďîäíčěĺě âűřĺ č çŕęýřčđóĺě float fShipTurnRate = FindShipTurnRate(rCharacter);
float fMaxSpeedY = stf(rShip.TurnRate) / Sea_TurnRateMagicNumber(); //boal
float fTRFromSailState = 1.0;
switch (MakeInt(fSailState * 2.0))
{
case 0: fTRFromSailState = 0.00; break;
case 1: fTRFromSailState = 1.0; break;
case 2: fTRFromSailState = 0.68; break;
}
// boal çŕâčńčěîńňü îň ńęîđîńňč íŕ ěŕíĺâđ -->
float fTRFromSpeed = 1.0;
float fCurrentSpeedZ = stf(rCharacter.Ship.Speed.z);
if (iCharacterIndex == GetMainCharacterIndex())
{
if (MOD_SKILL_ENEMY_RATE > 2) // őŕë˙âŕ č ţíăŕ - ďîńëŕáëĺíčĺ)
{
if (iArcadeSails == 1)
{
fTRFromSpeed = 1.0 - 0.5 * (1.0 - Clampf(fCurrentSpeedZ / fShipSpeed));
}
else
{
fTRFromSpeed = 1.0 - 0.86 * (1.0 - Clampf(fCurrentSpeedZ / fShipSpeed));
}
}
}
else
{
if (iArcadeSails == 1)
{
fTRFromSpeed = 1.0 - (0.51 - MOD_SKILL_ENEMY_RATE*0.01) * (1.0 - Clampf(fCurrentSpeedZ / fShipSpeed));
}
else
{
fTRFromSpeed = 1.0 - (0.87 - MOD_SKILL_ENEMY_RATE*0.01) * (1.0 - Clampf(fCurrentSpeedZ / fShipSpeed));
}
}
// boal çŕâčńčěîńňü îň ńęîđîńňč íŕ ěŕíĺâđ <--
float fTRResult = fMaxSpeedY * fShipTurnRate * fTRFromSailState * fTRFromSpeed;
// ===============
// boal äŕëĺĺ ˙ âńĺ çŕęîěĺíňčë, ňę ěĺřŕëî đŕáîňŕňü ęîäó îň ńęîđîńňč, äŕ č âîîáůĺ ńîěíčňĺëüíî ýňî äë˙ ěŕíĺâđŕ.
// VANO :: update fTRResult using rotate with wind direction
//float fRotateSide = stf(arCharShip.speed.y);
/*float fPrevWindDotShip = stf(arCharShip.WindDotShip);
bool bShipTurnToWind = fWindDotShip >= fPrevWindDotShip;
float fWindTurnMultiply = 1.0;
if (bShipTurnToWind)
{ fWindTurnMultiply = Bring2Range(1.5, 1.0, 0.0, 1.0, abs(fWindDotShip)); }
else
{ fWindTurnMultiply = Bring2Range(0.5, 1.0, 0.0, 1.0, abs(fWindDotShip)); }
arCharShip.WindDotShip = fWindDotShip;
//Trace("fWindTurnMultiply = " + fWindTurnMultiply);
// ===============
fTRResult = fWindTurnMultiply * Bring2Range(0.01, 1.0, 0.00001, 1.0, fTRResult);
*/
fTRResult = Bring2Range(0.07, 0.95, 0.00001, 1.0, fTRResult);
arCharShip.MaxSpeedY = fTRResult;
}
...