public Monster AdvanceMonster(Monster oldMonster) { if (oldMonster == null) { return(null); } Monster monster = (Monster)oldMonster.Clone(); switch (template) { case AdvancerTemplate.HalfDragon: if (monster.MakeHalfDragon(_DragonColor)) { monster.Name = "Half-Dragon " + monster.Name; } break; case AdvancerTemplate.Skeleton: if (monster.MakeSkeleton(_SelectedSkeletonTypes[0], _SelectedSkeletonTypes[1], _SelectedSkeletonTypes[2])) { monster.Name = "Skeletal " + monster.Name; for (int i = 2; i >= 0; i--) { if (_SelectedSkeletonTypes[i]) { monster.Name = SkeletonText(i) + " " + monster.Name; } } } break; case AdvancerTemplate.Zombie: if (monster.MakeZombie(_ZombieType)) { monster.Name = ZombieText(_ZombieType, true) + " " + monster.Name; } break; case AdvancerTemplate.Vampire: if (monster.MakeVampire()) { monster.Name = "Vampire " + monster.Name; } break; case AdvancerTemplate.HalfCelestial: if (SelectedStats.Count == 3 && monster.MakeHalfCelestial(SelectedStats)) { monster.Name = "Half-Celestial " + monster.Name; } break; case AdvancerTemplate.HalfFiend: if (SelectedStats.Count == 3 && monster.MakeHalfFiend(SelectedStats)) { monster.Name = "Half-Fiend " + monster.Name; } break; } if (racialHDChange != 0) { int dice = racialHDChange; Stat stat = racialBonusStat; bool size = racialSizeChange; int res = monster.AddRacialHD(dice, stat, size); if (res != 0) { monster.Name = monster.Name + " " + CMStringUtilities.PlusFormatNumber(res) + " HD"; } } if (advancedLevel > 0) { int count = advancedLevel; int added = 0; for (int i = 0; i < count; i++) { if (monster.MakeAdvanced()) { added++; } } if (added > 0) { monster.Name += " (Adv " + added.PlusFormat() + ")"; } } if (simpleSize != 0) { if (simpleSize > 0) { int count = simpleSize; int added = 0; for (int i = 0; i < count; i++) { if (monster.MakeGiant()) { added++; } } if (added == 1) { monster.Name = "Giant " + monster.Name; } if (added > 1) { monster.Name = "Giant x" + added + " " + monster.Name; } } else { int count = -simpleSize; int added = 0; for (int i = 0; i < count; i++) { if (monster.MakeYoung()) { added++; } } if (added == 1) { monster.Name = "Young " + monster.Name; } if (added > 1) { monster.Name = "Young x" + added + " " + monster.Name; } } } if (simpleOutsiderType != null) { switch (simpleOutsiderType) { case Monster.HalfOutsiderType.Celestial: if (monster.MakeCelestial()) { monster.Name = "Celestial " + monster.Name; } break; case Monster.HalfOutsiderType.Entropic: if (monster.MakeEntropic()) { monster.Name = "Entopic " + monster.Name; } break; case Monster.HalfOutsiderType.Fiendish: if (monster.MakeFiendish()) { monster.Name = "Fiendish " + monster.Name; } break; case Monster.HalfOutsiderType.Resolute: if (monster.MakeResolute()) { monster.Name = "Resolute " + monster.Name; } break; } } if (augmentSummoning) { monster.AugmentSummoning(); monster.Name = "Augmented " + monster.Name; } return(monster); }