public CastSpellBuilder SetSlotsPerLevel(int startingLevel, CasterProgression progression) { int level = 1; for (; level < startingLevel; level++) { FeatureDefinitionCastSpell.SlotsByLevelDuplet slotsForLevel = new FeatureDefinitionCastSpell.SlotsByLevelDuplet { Level = level, Slots = SlotsByCasterLevel[0] }; Definition.SlotsPerLevels.Add(slotsForLevel); } switch (progression) { case CasterProgression.FULL_CASTER: for (; level < 21; level++) { FeatureDefinitionCastSpell.SlotsByLevelDuplet slotsForLevel = new FeatureDefinitionCastSpell.SlotsByLevelDuplet { Level = level, Slots = SlotsByCasterLevel[level - startingLevel + 1] }; Definition.SlotsPerLevels.Add(slotsForLevel); } break; case CasterProgression.HALF_CASTER: for (; level < 21; level++) { FeatureDefinitionCastSpell.SlotsByLevelDuplet slotsForLevel = new FeatureDefinitionCastSpell.SlotsByLevelDuplet { Level = level, Slots = SlotsByCasterLevel[(level - startingLevel) / 2 + 1] }; Definition.SlotsPerLevels.Add(slotsForLevel); } break; case CasterProgression.THIRD_CASTER: for (; level < 21; level++) { FeatureDefinitionCastSpell.SlotsByLevelDuplet slotsForLevel = new FeatureDefinitionCastSpell.SlotsByLevelDuplet { Level = level, Slots = SlotsByCasterLevel[(level - startingLevel + 2) / 3 + 1] }; Definition.SlotsPerLevels.Add(slotsForLevel); } break; } return(this); }
public CastSpellBuilder SetKnownSpells(int startingAmount, int startingLevel, CasterProgression progression) { Definition.KnownSpells.Clear(); int level = 1; for (; level < startingLevel; level++) { Definition.KnownSpells.Add(0); } switch (progression) { case CasterProgression.FULL_CASTER: for (; level < 21; level++) { Definition.KnownSpells.Add(startingAmount + BonusSpellsKnownByCasterLevel[level]); } break; case CasterProgression.HALF_CASTER: for (; level < 21; level++) { // +1 here because half casters effectively round up the spells known Definition.KnownSpells.Add(startingAmount + BonusSpellsKnownByCasterLevel[(level + 1) / 2]); } break; case CasterProgression.THIRD_CASTER: for (; level < 21; level++) { Definition.KnownSpells.Add(startingAmount + // +2 here because third casters effectively "round up" for spells known BonusSpellsKnownByCasterLevel[(level + 2) / 3] + // Third casters also just learn spells faster BonusSpellsKnownThirdCaster[level]); } break; default: throw new SolastaModApiException($"Unknown CasterProgression: {progression}"); } return(this); }
public CastSpellBuilder SetKnownCantrips(int startingAmount, int startingLevel, CasterProgression progression) { Definition.KnownCantrips.Clear(); int level = 1; int numCantrips = 0; for (; level < startingLevel; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips = startingAmount; switch (progression) { case CasterProgression.FULL_CASTER: for (; level < 4; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips++; for (; level < 10; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips++; for (; level < 21; level++) { Definition.KnownCantrips.Add(numCantrips); } break; case CasterProgression.HALF_CASTER: for (; level < 10; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips++; for (; level < 14; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips++; for (; level < 21; level++) { Definition.KnownCantrips.Add(numCantrips); } break; case CasterProgression.THIRD_CASTER: for (; level < 10; level++) { Definition.KnownCantrips.Add(numCantrips); } numCantrips++; for (; level < 21; level++) { Definition.KnownCantrips.Add(numCantrips); } break; default: throw new SolastaModApiException($"Unknown CasterProgression: {progression}"); } return(this); }