Go back to : Skydrift research homepage
For some reason I don't have notes on passive regen, yet I still made a mod replicating it...
Boost here is referring to a rise to the spell meter (ex : getting a fifth of a bar).
10002000300010000
// from class TankItem
public const int cLV3SpellPower = 3000;
public const int cLV2SpellPower = 2000;
public const int cLV1SpellPower = 1000;
public const int cLWLimitPower = 10000;
Each (or most ?) time a character's spell meter changes, the chargePower (or chargeSubPower for the board) handles the change.
This is important as those functions can do nothing under special circumstances.
Current version of the game has a second parameter for those, BILNCOGBIHL, which seems to be a toggle to force a boost to happen.
It seems to only be used for red ring boosts.
Emit item state (Cradle, Tengu Fan, Reverie & Orin Last Word),BILNCOGBIHL is false,0 & 2000.
// From class TankItem, some variable names were renammed by myself
public void chargePower(int meterValueToAdd, bool BILNCOGBIHL = false)
// param LKAOOJJKCCN → meterValueToAdd
{
if (this.HOGCBJENGAL == NKMNNKLBGKJ.Emit && meterValueToAdd >= 0 && !BILNCOGBIHL)
return;
this.activeMeterValue = Mathf.Clamp(this.activeMeterValue + meterValueToAdd, 0, 2000);
}
public void chargeSubPower(int meterValueToAdd, bool BILNCOGBIHL = false)
{
if (this.HOGCBJENGAL == NKMNNKLBGKJ.Emit && meterValueToAdd >= 0 && !BILNCOGBIHL)
return;
this.subMeterValue = Mathf.Clamp(this.subMeterValue + meterValueToAdd, 0, 2000);
}
// ---------- Older version ----------
public void chargePower(int power)
{
if (this.mState == EItemState.Emit && power >= 0)
{
return;
}
this.mSpellPower = Mathf.Clamp(this.mSpellPower + power, 0, 2000);
}
public void chargeSubPower(int power)
{
if (this.mState == EItemState.Emit && power >= 0)
{
return;
}
this.mSpellPowerS = Mathf.Clamp(this.mSpellPowerS + power, 0, 2000);
}
See boostKart method in class Tank
Yellow rings spell boosts varies based on multiple facors.
In Free Run, the base value of the boost is the track booster power (see Start method in class Tank for more details, seems to be between 40 & 70).
In others modes, the "base value" follows the following logic :
3000. Progression is linear, where 0 acceleration frames would be the track booster power and 3000 would be 4 times the track booster power).900).1500, it is set to the bigger version of the track booster power.Once this base value is obtained, a few steps still influence the final value :
0.7f to 1.7f).adjustPerformance() can not affect spell power, so it is ignored here.50, the boost will give nothing.
(Or if the actual lap is stricly inferior to 0, though I'm not entirely sure how to trigger this)
And finally, the boosting function is called with the result of those operations.
this.mRedBoostFrame == 0)50 :
500 frames, even if the restriction was still going.
This means that touching the red ring during the red ring restriction delay will :
Note : this boost seems to be the only one calling the boosting function with BILNCOGBIHL set as true, which forces the boost to happen.
500 (= half of a level)1000, boosts 200.400.200 on the board & 400 on the rider.10001000, boosts 10001000 minus the current meter value (= gives level 1 bar)
// from class Tank, some variable names were renammed by myself
private int getRedRingMeterBoostValue(int currentMeterValue)
// method name : LIPBNPPEMDF
// EFGKCEEABKB = arg currentMeterValue
{
if (this.world.isFreeRun())
return 500;
return this.getRank() == 0 && this.getLap() > 0 ? (currentMeterValue > 1000 ? 200 : 400) : (currentMeterValue > 1000 ? 1000 : 1000 - currentMeterValue);
}
// ---------- Older version ----------
private int getMaxBoostPower(int spell_power)
{
if (this.mpWorld.isFreeRun())
{
return 500;
}
if (this.getRank() == 0 && this.getAccelFrame() >= 1000)
{
return (spell_power <= 1000) ? 400 : 200;
}
if (spell_power > 1000)
{
return 1000;
}
return 1000 - spell_power;
}
>