Beispiel #1
0
        public override void PerformSetup(Context context, IState previousState)
        {
            base.PerformSetup(context, previousState);

            // Generate Calamity
            EnemyDefinition calamityType = HackUtil.GetRandomCalamityClass();

            _calamity = ClassUtil.CreateCharacter(
                calamityType.Id,
                (uint)Guid.NewGuid().GetHashCode(),
                calamityType.NameGenerator.GetName(),
                calamityType.CharacterClass,
                30u);

            // Generate Potential Party Members
            uint partyId = (uint)NewPartyGuid.GetHashCode();

            for (int i = 0; i < 5; i++)
            {
                uint id = (uint)(i + 1);
                PlayerClassDefinition randomClass = HackUtil.GetRandomPlayerClass();
                string          randomName        = randomClass.NameGenerator.GetName();
                PlayerCharacter playerCharacter   = ClassUtil.CreatePlayerCharacter(id, partyId, randomName, randomClass.PlayerClass);
                _generatedCharacters.Add(playerCharacter);
            }

            // Generate (Unequipped) Starting Equipment
            int weaponCount = RANDOM.Next(3);

            for (int i = 0; i < weaponCount; i++)
            {
                if (HackUtil.GetRandomWeapon() is var newWeapon)
                {
                    _generatedInventory.Add(newWeapon.Item);
                }
            }

            int armorCount = RANDOM.Next(3);

            for (int i = 0; i < armorCount; i++)
            {
                if (HackUtil.GetRandomArmor() is var newArmor)
                {
                    _generatedInventory.Add(newArmor.Item);
                }
            }

            int itemCount = RANDOM.Next(5);

            for (int i = 0; i < itemCount; i++)
            {
                if (HackUtil.GetRandomItem() is var newItem)
                {
                    _generatedInventory.Add(newItem.Item);
                }
            }
        }
Beispiel #2
0
        public static CombatSettings CreateFromEnemyTypes(IReadOnlyCollection <EnemyDefinition> enemyTypes, CombatDifficulty difficulty, PartyDataWrapper playerParty)
        {
            uint GetStatTotal(IReadOnlyCollection <ICharacterActor> actors)
            {
                uint total = 0u;

                foreach (ICharacterActor actor in actors)
                {
                    for (StatType statType = StatType.STR; statType <= StatType.CHA; statType++)
                    {
                        total += actor.Stats[statType];
                    }
                }

                return(total);
            }

            uint GetStatTarget(uint totalStats, CombatDifficulty diff)
            {
                switch (diff)
                {
                case CombatDifficulty.Normal:
                    return((uint)(totalStats * 0.75f));

                case CombatDifficulty.Hard:
                    return((uint)(totalStats * 1f));

                case CombatDifficulty.Easy:
                default:
                    return((uint)(totalStats * 0.5f));
                }
            }

            uint partyId = (uint)Guid.NewGuid().GetHashCode();

            // Generate Enemies
            List <Character> enemies = new List <Character>(enemyTypes.Count);

            foreach (EnemyDefinition enemyDefinition in enemyTypes)
            {
                var newEnemy = ClassUtil.CreateCharacter(
                    ClassUtil.NextId,
                    partyId,
                    enemyDefinition.NameGenerator.GetName(),
                    enemyDefinition.CharacterClass);
                enemies.Add(newEnemy);
            }

            // Scale Enemies for Difficulty
            uint totalPartyStats       = GetStatTotal(playerParty.Characters);
            uint targetTotalEnemyStats = GetStatTarget(totalPartyStats, difficulty);
            uint totalEnemyStats       = GetStatTotal(enemies);

            while (totalEnemyStats < targetTotalEnemyStats)
            {
                Character enemy = enemies[RANDOM.Next(enemies.Count)];
                enemy.Stats = enemy.Class.LevelUpStats.Increment(enemy.Stats, RANDOM);
                enemy.Stats.ModifyStat(StatType.LVL, 1);

                totalEnemyStats = GetStatTotal(enemies);
            }

            return(CreateFromEnemies(enemies));
        }