Go back to : Skydrift research homepage

Gensou Skydrift - Spell Meter

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).

Spell Meter values

Clic here to show code

// from class TankItem
  public const int cLV3SpellPower = 3000;
  public const int cLV2SpellPower = 2000;
  public const int cLV1SpellPower = 1000;
  public const int cLWLimitPower = 10000;

Boosting function

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.

Clic here to show code

// 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);
	}

Ring boost

See boostKart method in class Tank

Yellow rings

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 :

Once this base value is obtained, a few steps still influence the final value :

And finally, the boosting function is called with the result of those operations.

Red rings activation condition

Red rings boost value

Note : this boost seems to be the only one calling the boosting function with BILNCOGBIHL set as true, which forces the boost to happen.

Clic here to show code

// 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;
	}
>