Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }