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); } } }
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)); }