private void HandleHdInfos(ref StatBlockInfo.HDBlockInfo tempHDInfo, ref int Count, ref bool Found, List <string> FoundClasses, List <ClassWrapper> tempCharacterClasses) { for (int a = 0; a < _hitDiceBlockInfo.Count; a++) { tempHDInfo = _hitDiceBlockInfo[a]; foreach (ClassWrapper wrapper in _sbCheckerBaseInput.CharacterClasses.Classes) { if (tempHDInfo.HDType == _sbCheckerBaseInput.CharacterClasses.GetClassHDType(wrapper.Name)) { if (wrapper.Name == "Eidolon") { tempHDInfo.Multiplier -= StatBlockInfo.ComputeEidolonHD(wrapper.Level); } else { tempHDInfo.Multiplier -= wrapper.Level; } Found = true; FoundClasses.Add(wrapper.Name); tempCharacterClasses.Remove(wrapper); } } if (Found) { Found = false; _hitDiceBlockInfo[Count] = tempHDInfo; } Count++; } }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { string size = MonSB.Size; int naturalMod = 0; switch (size) { case "Large": naturalMod = 6; break; case "Huge": naturalMod = 7; break; case "Gargantuan": naturalMod = 8; break; case "Colossal": naturalMod = 9; break; } MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", naturalMod, true); return(MonSB); }
public int RaceBAB() { switch (BaseRaceType) { case RaceType.Race: return(0); case RaceType.StatBlock: case RaceType.BestiaryStatBlock: if (!UseRacialHD) { return(0); // determined by class } if (Race_SB.BaseAtk.Length > 0) { return(StatBlockInfo.ComputeBAB(RacialHDValue(), BaseBABType)); } else { return(0); } case RaceType.None: return(0); } return(-100); }
public int HDFeats() { switch (BaseRaceType) { case RaceType.Race: return(0); case RaceType.StatBlock: if (!UseRacialHD) { return(0); // determined by class } if (Race_SB.Feats.Length > 0) { return(StatBlockInfo.GetHDFeats(RacialHDValue())); } else { return(0); } case RaceType.None: return(0); } return(-100); }
public override MonsterStatBlock ApplyAdvancedHDTemplate(MonsterStatBlock MonSB, string NewSizeValue, int HighCR, int LowCR) { if (NewSizeValue.Length > 0) { ComputeSizeChange(MonSB, NewSizeValue); } //natural armor change for CR increase List <int> HigherCR = new List <int> { 0, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2 }; //0 for 0th spot int diff = HighCR - LowCR - 1; int lowCRIndex = LowCR + 1; int highCRIndex = diff + lowCRIndex; int total = 0; for (int a = lowCRIndex; a <= highCRIndex; a++) { total += HigherCR[a]; } MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", total, true); return(MonSB); }
public int GetWillSaveValue(int HD) { if (CreatureTypeInstance != null) { return(StatBlockInfo.ParseSaveBonues(HD, CreatureTypeInstance.WillSaveType)); } return(-1); }
public Ability(StatBlockInfo.AbilityName Name, int Score) { this.Name = Name; this.Score = Score; ScoreTemp = Score; AbilityModifier = 0; Modifiers = new List <StatBlockModifier>(); AbilityModifier = StatBlockInfo.GetAbilityModifier(Score); }
private void ComputeSizeChange(MonsterStatBlock MonSB, string NewSizeValue) { StatBlockInfo.SizeCategories RaceSize = StatBlockInfo.GetSizeEnum(MonSB.Size); StatBlockInfo.SizeCategories NewSize = StatBlockInfo.GetSizeEnum(NewSizeValue); int diff = NewSize - RaceSize; int naturalArmorChange = 0; int sign = 0; while (diff != 0) { if (diff < 0) //smaller { RaceSize--; sign = -1; } else //bigger { RaceSize++; sign = 1; } //apply new size changes switch (RaceSize) { case StatBlockInfo.SizeCategories.Diminutive: case StatBlockInfo.SizeCategories.Tiny: case StatBlockInfo.SizeCategories.Small: case StatBlockInfo.SizeCategories.Medium: break; case StatBlockInfo.SizeCategories.Large: naturalArmorChange += 2 * sign; break; case StatBlockInfo.SizeCategories.Huge: naturalArmorChange += 3 * sign; break; case StatBlockInfo.SizeCategories.Gargantuan: naturalArmorChange += 4 * sign; break; case StatBlockInfo.SizeCategories.Colossal: naturalArmorChange += 5 * sign; break; } diff = NewSize - RaceSize; } if (naturalArmorChange > 0) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", naturalArmorChange, true); } }
public int GetBABValue() { int Count = 0; foreach (ClassWrapper wrapper in Classes) { Count += StatBlockInfo.ComputeBAB(wrapper.Level, wrapper.ClassInstance.BABType); } return(Count); }
public int GetWillSaveValue() { int Count = 0; foreach (ClassWrapper wrapper in Classes) { Count += StatBlockInfo.ParseSaveBonues(wrapper.Level, wrapper.ClassInstance.WillSaveType); } return(Count); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { int ChaValue = MonSB.GetAbilityScoreValue(StatBlockInfo.CHA) + 4; int ChaMod = StatBlockInfo.GetAbilityModifier(ChaValue); TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); // MonSB.AbilitiyScores // MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "deflection", ChaMod, true); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); TemplateCommon.AddDR(MonSB, "slashing", 5); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 5, true); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Sense Motive"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); TemplateCommon.AddDR(MonSB, "bludgeoning and magic", 15); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); TemplateCommon.AddDR(MonSB, "-", 10); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Intimidate"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Sense Motive"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); return(MonSB); }
public int GetBABValue(out string formula) { int Count = 0; formula = string.Empty; foreach (ClassWrapper wrapper in Classes) { int value = StatBlockInfo.ComputeBAB(wrapper.Level, wrapper.ClassInstance.BABType); Count += value; formula += wrapper.Name + ": " + wrapper.Level.ToString() + PathfinderConstants.SPACE + wrapper.ClassInstance.BABType.ToString() + " computed BAB--" + value.ToString(); } return(Count); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 4, true); TemplateCommon.AddDR(MonSB, "-", 5); TemplateCommon.AddResistance(MonSB, "cold ", 5); TemplateCommon.AddResistance(MonSB, "electricity ", 5); TemplateCommon.AddResistance(MonSB, "acid ", 5); TemplateCommon.AddResistance(MonSB, "fire ", 5); TemplateCommon.AddResistance(MonSB, "sonic ", 5); return(MonSB); }
private StatBlockInfo.HDBlockInfo FindSpecialClassUnarmedDamage(StatBlockInfo.SizeCategories ClassSize) { int CLassLevel = 0; if (_sbCheckerBaseInput.CharacterClasses.HasClass("monk")) { CLassLevel = _sbCheckerBaseInput.CharacterClasses.FindClassLevel("Monk"); } else if (_sbCheckerBaseInput.CharacterClasses.HasClass("brawler")) { CLassLevel = _sbCheckerBaseInput.CharacterClasses.FindClassLevel("brawler"); } return(StatBlockInfo.GetSpecialClassUnarmedDamage(CLassLevel, ClassSize)); }
public string Size() { switch (BaseRaceType) { case RaceType.Race: return(StatBlockInfo.GetSizeFromEnum(RaceFoundationType.Size)); case RaceType.StatBlock: return(Race_SB.Size); case RaceType.None: return(string.Empty); } return(null); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 4, true); TemplateCommon.AddDR(MonSB, "-", 5); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+4 Stealth"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, " Improved Natural AttackB"); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 0, false); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "DiehardB"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Sense Motive"); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { if (!MonSB.DontUseRacialHD) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); StatBlockInfo.HDBlockInfo tempHDInfo = new StatBlockInfo.HDBlockInfo(); tempHDInfo.ParseHDBlock(MonSB.HD); //tempHDInfo.HDType = StatBlockInfo.HitDiceCategories.d8; //keeps HD, change to d8 //tempHDInfo.Modifier = 0; //MonSB.HD = tempHDInfo.ToString(); CreatureTypeFoundation CreatureType = CreatureTypeDetailsWrapper.GetRaceDetailClass("undead"); int fort = StatBlockInfo.ParseSaveBonues(tempHDInfo.Multiplier, CreatureType.FortSaveType); CreatureTypeMaster CreatureTypeMaster = new CreatureTypeMaster(); CreatureTypeMaster.CreatureTypeInstance = CreatureType; fort += StatBlockInfo.GetAbilityModifier(MonSB.GetAbilityScoreValue(CreatureTypeMaster.CreatureTypeInstance.FortMod())); MonSB.Fort = fort.ToString(); int refValue = StatBlockInfo.ParseSaveBonues(tempHDInfo.Multiplier, CreatureType.RefSaveType); refValue += StatBlockInfo.GetAbilityModifier(MonSB.GetAbilityScoreValue(StatBlockInfo.DEX)); MonSB.Ref = refValue.ToString(); int will = StatBlockInfo.ParseSaveBonues(tempHDInfo.Multiplier, CreatureType.WillSaveType); will += StatBlockInfo.GetAbilityModifier(MonSB.GetAbilityScoreValue(StatBlockInfo.WIS)); MonSB.Will = will.ToString(); } MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 6, true); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "AlertnessB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Combat ReflexesB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "DodgeB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Improved InitiativeB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Lightning ReflexesB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Bluff"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Sense Motive"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); TemplateCommon.AddDR(MonSB, "magic and silver", 10); TemplateCommon.AddResistance(MonSB, "cold ", 10); TemplateCommon.AddResistance(MonSB, "electricity ", 10); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 3, true); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Climb"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Improved InitiativeB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); TemplateCommon.AddDR(MonSB, "magic and slashing", 5); TemplateCommon.AddResistance(MonSB, "fire ", 10); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 6, true); TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); TemplateCommon.AddDR(MonSB, "silver and slashing", 5); TemplateCommon.AddResistance(MonSB, "cold ", 10); TemplateCommon.AddResistance(MonSB, "fire ", 10); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Bluff"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Fly"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Sense Motive"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Knowledge (arcana)"); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 4, true); TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); TemplateCommon.AddDR(MonSB, "magic", 10); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Intimidatee"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Ride"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Mounted CombatB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Improved InitiativeB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Ride-By AttackB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "ToughnessB"); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { TemplateCommon.ChangeHD(MonSB, StatBlockInfo.HitDiceCategories.d8); int ACMod = StatBlockInfo.GetAbilityModifier(MonSB.GetAbilityScoreValue(StatBlockInfo.AbilityName.Charisma)) / 2; if (ACMod < 1) { ACMod = 1; } MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "deflection", ACMod, true); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Intimidate"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 2, true); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "AlertnessB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "DodgeB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "MobilityB"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Skill Focus (Acrobatics)B"); MonSB.Feats = StatBlockInfo.AddFeat(MonSB.Feats, "Spring AttackB"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Acrobatics"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Perception"); MonSB.RacialMods = StatBlockInfo.AddRacialMod(MonSB.RacialMods, "+8 Stealth"); TemplateCommon.AddDR(MonSB, "magic and slashing", 10); TemplateCommon.AddResistance(MonSB, "cold ", 20); return(MonSB); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 1, true); if (MonSB.HDValue() <= 11) { TemplateCommon.AddDR(MonSB, "magic", 5); } else { TemplateCommon.AddDR(MonSB, "magic", 10); } TemplateCommon.AddResistance(MonSB, "acid ", 10); TemplateCommon.AddResistance(MonSB, "cold ", 10); TemplateCommon.AddResistance(MonSB, "electricity ", 10); return(MonSB); }
public int RaceWill() { switch (BaseRaceType) { case RaceType.Race: return(0); case RaceType.StatBlock: case RaceType.BestiaryStatBlock: // if (IsHumanoid) return 0; // determined by class if (!UseRacialHD) { return(0); // determined by class } if (_useTemplateValues) { int modWill = StatBlockInfo.GetAbilityModifier(GetAbilityScore(StatBlockInfo.WIS)); return(Convert.ToInt32(Race_SB.Will) - modWill); } else { if (WillOverride == StatBlockInfo.SaveBonusType.None) { StatBlockInfo.HDBlockInfo racialHDInfo = new StatBlockInfo.HDBlockInfo(); racialHDInfo.ParseHDBlock(RacialHD()); return(CreatureTypeMaster.GetWillSaveValue(racialHDInfo.Multiplier)); } else { return(StatBlockInfo.ParseSaveBonues(RacialHDValue(), WillOverride)); } } case RaceType.None: return(0); } return(-1); }
private string HandleAnimatedObject(string RacialHD) { if (_sbCheckerBaseInput.MonsterSB.Race.ToLower() == "animated object") { switch (StatBlockInfo.GetSizeEnum(_sbCheckerBaseInput.MonsterSB.Size)) { case StatBlockInfo.SizeCategories.Tiny: RacialHD = "1d10"; break; case StatBlockInfo.SizeCategories.Small: RacialHD = "2d10+10"; break; case StatBlockInfo.SizeCategories.Medium: RacialHD = "3d10+20"; break; case StatBlockInfo.SizeCategories.Large: RacialHD = "4d10+30"; break; case StatBlockInfo.SizeCategories.Huge: RacialHD = "7d10+40"; break; case StatBlockInfo.SizeCategories.Gargantuan: RacialHD = "10d10+60"; break; case StatBlockInfo.SizeCategories.Colossal: RacialHD = "13d10+80"; break; } } return(RacialHD); }
public override MonsterStatBlock ApplyTemplate(MonsterStatBlock MonSB) { MonSB.AC_Mods = StatBlockInfo.ChangeAC_Mod(MonSB.AC_Mods, "natural", 1, true); if (MonSB.HDValue() <= 11) { TemplateCommon.AddDR(MonSB, "magic", 5); } else { TemplateCommon.AddDR(MonSB, "magic", 10); } TemplateCommon.AddResistance(MonSB, "cold ", 10); TemplateCommon.AddResistance(MonSB, "electricity ", 10); TemplateCommon.AddResistance(MonSB, "acid ", 10); TemplateCommon.AddResistance(MonSB, "fire ", 10); int CR_Hold; int.TryParse(MonSB.CR, out CR_Hold); if (CR_Hold <= 4) { MonSB.SR = ((CR_Hold - 1) + 11).ToString(); } else if (CR_Hold <= 10) { MonSB.SR = ((CR_Hold - 2) + 11).ToString(); } else { MonSB.SR = ((CR_Hold - 2) + 11).ToString(); } return(MonSB); }