public static void AddContentLine(ref FlowDocument doc, string header, DocContentItem content)
        {
            Paragraph paragraph = new Paragraph {
                FontSize = 12
            };

            if (header.Trim().Length > 0)
            {
                paragraph.Inlines.Add(new Bold(new Run(header + ": ")));
            }
            if (content.AdvancedContent != null)
            {
                foreach (var inline in content.AdvancedContent.Inlines)
                {
                    paragraph.Inlines.Add(inline);
                }
            }
            else
            {
                paragraph.Inlines.Add(new Run(content.Content));
            }
            if (Properties.Settings.Default.ShowPageNumbers && content.RuleName.Trim().Length > 0 && content.PageNumber > 0)
            {
                paragraph.Inlines.Add(new Italic(new Run("  (" + content.RuleName + ", page " + content.PageNumber + " - " + content.BookSource + ")")));
            }
            else if (Properties.Settings.Default.ShowPageNumbers && content.PageNumber > 0)
            {
                paragraph.Inlines.Add(new Italic(new Run("  (page " + content.PageNumber + " - " + content.BookSource + ")")));
            }
            doc.Blocks.Add(paragraph);
        }
Пример #2
0
 public XenosPrimitive()
 {
     UnusualCommunication = new DocContentItem("No");
     SocialStructure      = new DocContentItem("None");
 }
Пример #3
0
        public void Generate()
        {
            GeneratePrimitiveXenos();

            switch (Globals.RollD5())
            {
            case 1:
                Traits.Deadly++;
                break;

            case 2:
                Traits.Mighty++;
                break;

            case 3:
                Traits.Resilient++;
                break;

            case 4:
                Traits.Stealthy++;
                break;

            case 5:
                Traits.Swift++;
                break;
            }

            switch (Globals.RollD10())
            {
            case 1:
                Traits.Crawler++;
                break;

            case 2:
                Traits.Flyer = 6;
                break;

            case 3:
                Traits.Hoverer = 4;
                break;

            case 4:
                Traits.MultipleArms++;
                break;

            case 5:
                Traits.Quadruped++;
                break;

            case 6:
                Traits.Size = XenosSizes.Hulking;
                break;

            case 7:
                Traits.Size = XenosSizes.Scrawny;
                break;

            case 8:
            case 9:
            case 10:
                // Regular humanoid, average size
                break;
            }

            if (Globals.RollD100() <= 25)
            {
                switch (Globals.RollD10())
                {
                case 1:
                    Traits.Armoured++;
                    break;

                case 2:
                    Traits.Disturbing++;
                    break;

                case 3:
                    Traits.Deathdweller++;
                    break;

                case 4:
                    Traits.LethalDefences++;
                    break;

                case 5:
                    Traits.Disturbing++;
                    break;

                case 6:
                    Traits.Warped++;
                    break;

                case 7:
                    Traits.Darkling++;
                    break;

                case 8:
                    Traits.Unkillable++;
                    break;

                case 9:
                    Traits.ProjectileAttack++;
                    break;

                case 10:
                    Traits.Deterrent++;
                    break;
                }
            }

            if (Globals.RollD100() <= 25)
            {
                switch (Globals.RollD5())
                {
                case 1:
                    UnusualCommunication = new DocContentItem("Intuitive Communicators", 137, "Table 4-11", RuleBook.TheKoronusBestiary);
                    break;

                case 2:
                    UnusualCommunication = new DocContentItem("Previous Contact", 137, "Table 4-11", RuleBook.TheKoronusBestiary);
                    break;

                case 3:
                    UnusualCommunication = new DocContentItem("Relic Civilisation", 137, "Table 4-11", RuleBook.TheKoronusBestiary);
                    break;

                case 4:
                    UnusualCommunication = new DocContentItem("Simplistic", 137, "Table 4-11", RuleBook.TheKoronusBestiary);
                    break;

                case 5:
                    UnusualCommunication = new DocContentItem("Exotic", 137, "Table 4-11", RuleBook.TheKoronusBestiary);
                    break;
                }
            }

            switch (Globals.RollD10())
            {
            case 1:
            case 2:
                SocialStructure = new DocContentItem("Agriculturalist", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 3:
                SocialStructure = new DocContentItem("Hunter", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 4:
                SocialStructure = new DocContentItem("Feudal", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 5:
                SocialStructure = new DocContentItem("Raiders", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 6:
                SocialStructure = new DocContentItem("Nomadic", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 7:
                SocialStructure = new DocContentItem("Hivemind", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 8:
                SocialStructure = new DocContentItem("Scavengers", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 9:
                SocialStructure = new DocContentItem("Xenophobic", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;

            case 10:
                SocialStructure = new DocContentItem("Tradition-bound", 137, "Table 4-12", RuleBook.TheKoronusBestiary);
                break;
            }

            switch (Traits.Size)
            {
            case XenosSizes.Miniscule:
                Stats.Strength  -= 25;
                Stats.Toughness -= 25;
                break;

            case XenosSizes.Puny:
                Stats.Strength  -= 20;
                Stats.Toughness -= 20;
                break;

            case XenosSizes.Scrawny:
                Stats.Strength  -= 10;
                Stats.Toughness -= 10;
                break;

            case XenosSizes.Average:
                break;

            case XenosSizes.Hulking:
                Stats.Strength  += 5;
                Stats.Toughness += 5;
                Stats.Agility   -= 5;
                break;

            case XenosSizes.Enormous:
                Stats.Strength  += 10;
                Stats.Toughness += 10;
                Stats.Agility   -= 10;
                break;

            case XenosSizes.Massive:
                Stats.Strength  += 20;
                Stats.Toughness += 20;
                Stats.Agility   -= 20;
                break;
            }

            CalculateEffectsFromTraits();
            CalculateMovement();
        }
Пример #4
0
        private void GenerateApexPredator()
        {
            BestialArchetype = BestialArchetypes.ApexPredator;

            // Generate base stats
            Stats.WeaponSkill    = 58;
            Stats.BallisticSkill = 0;
            Stats.Strength       = 48;
            Stats.Toughness      = 45;
            Stats.Agility        = 48;
            Stats.Intelligence   = 19;
            Stats.Perception     = 49;
            Stats.WillPower      = 41;
            Stats.Fellowship     = 9;

            BaseMovement = 4;
            Wounds       = 15;

            // Generate Skills
            Skills.AwarenessPer = 1;
            Skills.TrackingInt  = 2;

            // Generate Talents
            int randValue = Globals.Rand.Next(4);

            if (randValue == 0)
            {
                Talents.CrushingBlow++;
            }
            else if (randValue == 1)
            {
                Talents.Frenzy++;
            }
            else if (randValue == 2)
            {
                Talents.SwiftAttack++;
            }
            else
            {
                Talents.TalentedTracking++;
            }

            // Generate Traits
            Traits.Bestial++;

            randValue = Globals.Rand.Next(3);
            if (randValue == 0)
            {
                Traits.BrutalCharge++;
            }
            else if (randValue == 1)
            {
                Traits.Fear++;
            }
            else
            {
                Traits.Toxic++;
            }

            Traits.NaturalArmour = 2;
            Traits.NaturalWeapons++;

            // Generate Weapons (Note that weapon damage bonus is NOT including strength)
            Weapons.Add(new Weapon("Claws, fangs, horns, stingers, tentacles, or other deadly adaption", true, 1, 0, "I or R", 0, true));

            // Generate Bestial Nature
            randValue = Globals.RollD10();
            if (randValue <= 2)
            {
                BestialNature = new DocContentItem("Adapted", 35);
                int numExtras = Globals.Rand.Next(3) + 1;
                while (numExtras > 0)
                {
                    switch (Globals.Rand.Next(7))
                    {
                    case 0:
                        if (Talents.CrushingBlow > 0)
                        {
                            continue;
                        }
                        Talents.CrushingBlow++;
                        break;

                    case 1:
                        if (Talents.Frenzy > 0)
                        {
                            continue;
                        }
                        Talents.Frenzy++;
                        break;

                    case 2:
                        if (Talents.SwiftAttack > 0)
                        {
                            continue;
                        }
                        Talents.SwiftAttack++;
                        break;

                    case 3:
                        if (Talents.TalentedTracking > 0)
                        {
                            continue;
                        }
                        Talents.TalentedTracking++;
                        break;

                    case 4:
                        if (Traits.BrutalCharge > 0)
                        {
                            continue;
                        }
                        Traits.BrutalCharge++;
                        break;

                    case 5:
                        if (Traits.Fear > 0)
                        {
                            continue;
                        }
                        Traits.Fear++;
                        break;

                    case 6:
                        if (Traits.Toxic > 0)
                        {
                            continue;
                        }
                        Traits.Toxic++;
                        break;
                    }
                    numExtras--;
                }
            }
            else if (randValue <= 4)
            {
                BestialNature    = new DocContentItem("Brute", 35);
                Traits.Size      = Globals.RollD5() > 5 ? XenosSizes.Hulking : XenosSizes.Enormous;
                Stats.Strength  += Globals.RollD10();
                Stats.Toughness += Globals.RollD10();
                Wounds          += Globals.Rand.Next(3, 7);
                if (Globals.RollD10() > 5)
                {
                    Stats.Agility -= 15;
                }
            }
            else if (randValue <= 6)
            {
                BestialNature = new DocContentItem("Cunning Stalker", 35);
                Skills.ConcealmentAg++;
                Skills.ShadowingAg++;
                Skills.SilentMoveAg++;
            }
            else if (randValue <= 7)
            {
                BestialNature = new DocContentItem("Killing Machine", 35);
                int numTraits = Globals.Rand.Next(3) + 1;
                while (numTraits > 0)
                {
                    switch (Globals.Rand.Next(3))
                    {
                    case 0:
                        if (Traits.UnnaturalSpeed > 0)
                        {
                            continue;
                        }
                        Traits.UnnaturalSpeed++;
                        break;

                    case 1:
                        if (Traits.UnnaturalStrength > 0)
                        {
                            continue;
                        }
                        Traits.UnnaturalStrength++;
                        break;

                    case 2:
                        if (Traits.UnnaturalToughness > 0)
                        {
                            continue;
                        }
                        Traits.UnnaturalToughness++;
                        break;
                    }
                    numTraits--;
                }
                if (Globals.RollD10() > 5)
                {
                    Talents.Fearless++;
                }
                else
                {
                    Talents.ResistanceFear++;
                }
            }
            else if (randValue <= 8)
            {
                BestialNature = new DocContentItem("Living Arsenal", 35);
                foreach (Weapon weapon in Weapons)
                {
                    weapon.Primitive    = false;
                    weapon.Penetration += 2;
                }
                Traits.NaturalArmour = 8;
            }
            else
            {
                BestialNature    = new DocContentItem("Natural Prowess", 35);
                Stats.Strength  += Globals.Rand.Next(16);
                Stats.Toughness += Globals.Rand.Next(16);
                Stats.Agility   += Globals.Rand.Next(16);
            }
        }
Пример #5
0
        private void GenerateVenomousTerror()
        {
            BestialArchetype = BestialArchetypes.VenomousTerror;

            // Generate base stats
            Stats.WeaponSkill    = 38;
            Stats.BallisticSkill = 0;
            Stats.Strength       = 32;
            Stats.Toughness      = 29;
            Stats.Agility        = 38;
            Stats.Intelligence   = 13;
            Stats.Perception     = 28;
            Stats.WillPower      = 30;
            Stats.Fellowship     = 9;

            BaseMovement = 2;
            Wounds       = 6;

            // Generate Skills
            Skills.AwarenessPer = 1;

            // Generate Talents
            int randValue = Globals.Rand.Next(2);

            if (randValue == 0)
            {
                Talents.Fearless++;
            }
            else
            {
                Talents.Unremarkable++;
            }

            // Generate Traits
            Traits.Bestial++;
            Traits.NaturalWeapons++;
            Traits.Size = XenosSizes.Scrawny;
            Traits.Toxic++;

            // Generate Weapons (Note that weapon damage bonus is NOT including strength)
            Weapon weapon = new Weapon("Envenomed bite or sting", true, 1, 0, "I or R", 6, true)
            {
                Toxic = true
            };

            Weapons.Add(weapon);

            // Generate Bestial Nature
            randValue = Globals.RollD10();
            if (randValue <= 1)
            {
                BestialNature = new DocContentItem("Deadly Touch", 38);
                // Special features only, listed in book
            }
            else if (randValue <= 2)
            {
                BestialNature = new DocContentItem("Delirium Bringer", 38);
                // Special features only, listed in book
            }
            else if (randValue <= 4)
            {
                BestialNature        = new DocContentItem("Toxic Hunter", 38);
                Traits.Size          = XenosSizes.Average;
                Stats.WeaponSkill    = 58;
                Stats.BallisticSkill = 0;
                Stats.Strength       = 48;
                Stats.Toughness      = 45;
                Stats.Agility        = 48;
                Stats.Intelligence   = 19;
                Stats.Perception     = 49;
                Stats.WillPower      = 41;
                Stats.Fellowship     = 9;
                Wounds = 15;
            }
            else if (randValue <= 6)
            {
                BestialNature   = new DocContentItem("Hidden Death", 38);
                Traits.Size     = XenosSizes.Miniscule;
                Stats.Strength  = 11;
                Stats.Toughness = 11;
                Wounds          = 3;
            }
            else if (randValue <= 8)
            {
                BestialNature = new DocContentItem("Poisonous Presence", 38);
                foreach (Weapon weapon1 in Weapons)
                {
                    weapon1.Toxic = false;
                }
            }
            else
            {
                BestialNature = new DocContentItem("Potent Toxins", 38);
                // Special features only, listed in book
            }
        }
Пример #6
0
        private void GenerateShadowedStalker()
        {
            BestialArchetype = BestialArchetypes.ShadowedStalker;

            // Generate base stats
            Stats.WeaponSkill    = 53;
            Stats.BallisticSkill = 0;
            Stats.Strength       = 41;
            Stats.Toughness      = 37;
            Stats.Agility        = 48;
            Stats.Intelligence   = 17;
            Stats.Perception     = 43;
            Stats.WillPower      = 36;
            Stats.Fellowship     = 10;

            BaseMovement = 4;
            Wounds       = 12;

            // Generate Skills
            if (Globals.RollD10() > 5)
            {
                Skills.AcrobaticsAg = 1;
            }
            else
            {
                Skills.ShadowingAg = 1;
            }
            Skills.ConcealmentAg = 1;
            Skills.SilentMoveAg  = 1;
            Skills.TrackingInt   = 3;

            // Generate Talents
            int randValue = Globals.Rand.Next(4);

            if (randValue == 0)
            {
                Talents.AssassinStrike++;
            }
            else if (randValue == 1)
            {
                Talents.CrushingBlow++;
            }
            else if (randValue == 2)
            {
                Talents.FuriousAssault++;
            }
            else
            {
                Talents.TalentedShadowing++;
            }

            // Generate Traits
            Traits.Bestial++;

            randValue = Globals.Rand.Next(2);
            if (randValue == 0)
            {
                Traits.BrutalCharge++;
            }
            else
            {
                Traits.Toxic++;
            }
            Traits.NaturalWeapons++;

            // Generate Weapons (Note that weapon damage bonus is NOT including strength)
            Weapons.Add(new Weapon("Claws, fangs, tentacles, stingers, or other deadly adaption", true, 1, 0, "I or R", 0, true));

            // Generate Bestial Nature
            randValue = Globals.RollD10();
            if (randValue <= 2)
            {
                BestialNature = new DocContentItem("Adapted", 37);
                int numExtrasRemaining = Globals.Rand.Next(1, 5);
                while (numExtrasRemaining > 0)
                {
                    switch (Globals.Rand.Next(6))
                    {
                    case 0:
                        if (Talents.AssassinStrike > 0)
                        {
                            continue;
                        }
                        Talents.AssassinStrike++;
                        break;

                    case 1:
                        if (Talents.CrushingBlow > 0)
                        {
                            continue;
                        }
                        Talents.CrushingBlow++;
                        break;

                    case 2:
                        if (Talents.FuriousAssault > 0)
                        {
                            continue;
                        }
                        Talents.FuriousAssault++;
                        break;

                    case 3:
                        if (Talents.TalentedShadowing > 0)
                        {
                            continue;
                        }
                        Talents.TalentedShadowing++;
                        break;

                    case 4:
                        if (Traits.BrutalCharge > 0)
                        {
                            continue;
                        }
                        Traits.BrutalCharge++;
                        break;

                    case 5:
                        if (Traits.Toxic > 0)
                        {
                            continue;
                        }
                        Traits.Toxic++;
                        break;
                    }
                    numExtrasRemaining--;
                }
            }
            else if (randValue <= 4)
            {
                BestialNature = new DocContentItem("Chameleonic", 37);
                // Special features only, listed in book
            }
            else if (randValue <= 6)
            {
                BestialNature = new DocContentItem("Deadly Ambusher", 37);
                // Special features only, listed in book
            }
            else if (randValue <= 7)
            {
                BestialNature = new DocContentItem("Lure", 37);
                Talents.Mimic++;
            }
            else if (randValue <= 8)
            {
                BestialNature = new DocContentItem("Shadow-walking", 37);
                Traits.Phase++;
            }
            else
            {
                BestialNature = new DocContentItem("Vanisher", 37);
                // Special features only, listed in book
            }
        }
Пример #7
0
        private void GeneratePteraBeast()
        {
            BestialArchetype = BestialArchetypes.PteraBeast;

            // Generate base stats
            Stats.WeaponSkill    = 45;
            Stats.BallisticSkill = 0;
            Stats.Strength       = 40;
            Stats.Toughness      = 35;
            Stats.Agility        = 35;
            Stats.Intelligence   = 16;
            Stats.Perception     = 48;
            Stats.WillPower      = 35;
            Stats.Fellowship     = 10;

            BaseMovement = 3;
            Wounds       = 10;

            // Generate Skills
            Skills.AwarenessPer = 1;
            Skills.DodgeAg      = 1;

            // Generate Talents
            int randValue = Globals.Rand.Next(3);

            if (randValue == 0)
            {
                Talents.DoubleTeam++;
            }
            else if (randValue == 1)
            {
                Talents.LightningReflexes++;
            }
            else
            {
                Talents.StepAside++;
            }

            // Generate Traits
            Traits.Bestial++;
            Traits.Flyer = 6;
            Traits.NaturalWeapons++;

            // Generate Weapons (Note that weapon damage bonus is NOT including strength)
            Weapons.Add(new Weapon("Cruel talons, barbed tail, or vicious beak", true, 1, 0, "I or R", 0, true));

            // Generate Bestial Nature
            randValue = Globals.RollD10();
            if (randValue <= 1)
            {
                BestialNature    = new DocContentItem("Aerial Impossibility", 36);
                Traits.Size      = Globals.RollD10() > 5 ? XenosSizes.Enormous : XenosSizes.Massive;
                Stats.Strength  += 15 + Globals.RollD10();
                Stats.Toughness += 15 + Globals.RollD10();
                Wounds          += Globals.Rand.Next(8, 15);
                if (Globals.RollD10() > 6)
                {
                    Traits.NaturalArmour = Globals.Rand.Next(1, 6);
                }
            }
            else if (randValue <= 3)
            {
                BestialNature = new DocContentItem("Doom Diver", 36);
                // Special attack only, listed in book
            }
            else if (randValue <= 5)
            {
                BestialNature = new DocContentItem("Earth-Scorning", 36);
                EarthScorning = true;
                // Special features only, listed in book
            }
            else if (randValue <= 6)
            {
                BestialNature = new DocContentItem("Skyless Flight", 36);
                // Special features only, listed in book
            }
            else if (randValue <= 9)
            {
                BestialNature  = new DocContentItem("Swift Flyer", 36);
                Stats.Agility += 10;
                Traits.Flyer   = 12;
            }
            else
            {
                BestialNature = new DocContentItem("Wyrdwing", 36);
                // Special features only, listed in book
            }
        }
Пример #8
0
        private void GenerateBehemoth()
        {
            BestialArchetype = BestialArchetypes.Behemoth;

            // Generate base stats
            Stats.WeaponSkill    = 40;
            Stats.BallisticSkill = 0;
            Stats.Strength       = 70;
            Stats.Toughness      = 65;
            Stats.Agility        = 28;
            Stats.Intelligence   = 14;
            Stats.Perception     = 26;
            Stats.WillPower      = 37;
            Stats.Fellowship     = 12;

            BaseMovement     = 4;
            Wounds           = 55;
            UniqueArmourName = "Durable hide";

            // Generate Skills
            Skills.AwarenessPer = 1;

            // Generate Talents
            int randValue = Globals.Rand.Next(4);

            if (randValue == 0)
            {
                Talents.CombatMaster++;
            }
            else if (randValue == 1)
            {
                Talents.Fearless++;
            }
            else if (randValue == 2)
            {
                Talents.Hardy++;
            }
            else
            {
                Talents.IronJaw++;
            }

            // Generate Traits
            Traits.Bestial++;
            Traits.NaturalArmour = 5;
            Traits.NaturalWeapons++;
            Traits.Size = XenosSizes.Enormous;
            Traits.UnnaturalStrength++;

            // Generate Weapons (Note that weapon damage bonus is NOT including strength)
            Weapons.Add(new Weapon("Oversized claws, fangs, horns, or other natural weapons", true, 1, 0, "I or R", 0, true));
            Weapon trampleWeapon = new Weapon("Trample", true, 2, 0, "I or R", 2, false)
            {
                SpecialTrait1 = Properties.Settings.Default.ShowPageNumbers ? "Overwhelming (page 36, Stars of Inequity)" : "Overwhelming*"
            };

            Weapons.Add(trampleWeapon);

            // Generate Bestial Nature
            randValue = Globals.RollD10();
            if (randValue <= 2)
            {
                BestialNature = new DocContentItem("Beyond Challenge", 35);
                if (Talents.CombatMaster < 1)
                {
                    Talents.CombatMaster++;
                }
                if (Talents.Fearless < 1)
                {
                    Talents.Fearless++;
                }
                if (Talents.Hardy < 1)
                {
                    Talents.Hardy++;
                }
                if (Talents.IronJaw < 1)
                {
                    Talents.IronJaw++;
                }
            }
            else if (randValue <= 3)
            {
                BestialNature  = new DocContentItem("Impossible Grace", 35);
                Stats.Agility += 20;
            }
            else if (randValue <= 5)
            {
                BestialNature    = new DocContentItem("Leviathan", 35);
                Traits.Size      = XenosSizes.Massive;
                Stats.Strength  += 10;
                Stats.Toughness += 10;
                Wounds          += Globals.RollD10(4);
            }
            else if (randValue <= 7)
            {
                BestialNature = new DocContentItem("Megapredator", 35);
                int randWsIncrease1 = Globals.Rand.Next(1, 21);
                int randWsIncrease2 = Globals.Rand.Next(1, 21);
                if (randWsIncrease1 > randWsIncrease2)
                {
                    Stats.WeaponSkill += randWsIncrease1;
                }
                else
                {
                    Stats.WeaponSkill += randWsIncrease2;
                }
                foreach (Weapon weapon in Weapons)
                {
                    weapon.Primitive = false;
                }
            }
            else if (randValue <= 8)
            {
                BestialNature = new DocContentItem("Titanborn", 35);
                Traits.Size   = XenosSizes.Massive;
                Traits.UnnaturalStrength++;
                Traits.UnnaturalToughness++;
            }
            else
            {
                BestialNature = new DocContentItem("Unstoppable", 35);
                // Only special conditions listed in book
            }
        }