private AmountN GetPowerLevel(AmountN amount, CampaignDifficultyVariation variation, int missionIndex, int missionsCount) { if (amount == AmountN.Random) { return(AmountN.Random); } if (variation == CampaignDifficultyVariation.Steady) { return(amount); } double campaignProgress = missionIndex / (double)(Math.Max(2, missionsCount) - 1.0); double amountOffset = 0; switch (variation) { case CampaignDifficultyVariation.ConsiderablyEasier: amountOffset = -3.5; break; case CampaignDifficultyVariation.MuchEasier: amountOffset = -2.25; break; case CampaignDifficultyVariation.SomewhatEasier: amountOffset = -1.5; break; case CampaignDifficultyVariation.SomewhatHarder: amountOffset = 1.5; break; case CampaignDifficultyVariation.MuchHarder: amountOffset = 2.25; break; case CampaignDifficultyVariation.ConsiderablyHarder: amountOffset = 3.5; break; } double amountDouble = (double)amount + amountOffset * campaignProgress; return((AmountN)Toolbox.Clamp((int)amountDouble, (int)AmountN.VeryLow, (int)AmountN.VeryHigh)); }
/// <summary> /// Resets all properties to their default values. /// </summary> public void Clear() { ContextCoalitionsBlue = TemplateTools.CheckValue <DBEntryCoalition>(Database.Instance.Common.DefaultCoalitionBlue); ContextCoalitionsRed = TemplateTools.CheckValue <DBEntryCoalition>(Database.Instance.Common.DefaultCoalitionRed); ContextDecade = Decade.Decade2000; ContextTheaterID = TemplateTools.CheckValue <DBEntryTheater>(Database.Instance.Common.DefaultTheater); ContextTheaterRegionsCoalitions = CountryCoalition.Default; EnvironmentBadWeatherChance = AmountN.Random; EnvironmentNightMissionChance = AmountN.Random; MissionsCount = 5; MissionsObjectiveCount = Amount.Average; MissionsObjectiveDistance = Amount.Average; MissionsTypes = new string[] { Database.Instance.Common.DefaultObjective }; OptionsPreferences = new MissionTemplatePreferences[0]; OptionsUnitMods = new string[0]; PlayerAircraft = TemplateTools.CheckValuePlayerAircraft(Database.Instance.Common.DefaultPlayerAircraft); PlayerCoalition = Coalition.Blue; PlayerStartLocation = PlayerStartLocation.Runway; SituationEnemyAirDefense = AmountN.Random; SituationEnemyAirForce = AmountN.Random; SituationFriendlyAirDefense = AmountN.Random; SituationFriendlyAirForce = AmountN.Random; SituationVariation = CampaignDifficultyVariation.Random; }
private BRSkillLevel GetSkillLevel(AmountN amount, CampaignDifficultyVariation variation, int missionIndex, int missionsCount) { if (amount == AmountN.Random) { return(BRSkillLevel.Random); } double campaignProgress = missionIndex / (double)(Math.Max(2, missionsCount) - 1.0); BRSkillLevel baseSkillLevel = BRSkillLevel.Regular; switch (amount) { case AmountN.VeryLow: baseSkillLevel = BRSkillLevel.Rookie; break; case AmountN.Low: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Rookie, BRSkillLevel.Regular); break; case AmountN.Average: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Rookie, BRSkillLevel.Regular, BRSkillLevel.Veteran); break; case AmountN.High: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Veteran, BRSkillLevel.Ace); break; case AmountN.VeryHigh: baseSkillLevel = BRSkillLevel.Ace; break; } if (variation == CampaignDifficultyVariation.Steady) { return(baseSkillLevel); } double amountOffset = 0; switch (variation) { case CampaignDifficultyVariation.ConsiderablyEasier: amountOffset = -2.25; break; case CampaignDifficultyVariation.MuchEasier: amountOffset = -1.5; break; case CampaignDifficultyVariation.SomewhatEasier: amountOffset = -1.0; break; case CampaignDifficultyVariation.SomewhatHarder: amountOffset = 1.0; break; case CampaignDifficultyVariation.MuchHarder: amountOffset = 1.5; break; case CampaignDifficultyVariation.ConsiderablyHarder: amountOffset = 2.25; break; } double skillDouble = (double)baseSkillLevel + amountOffset * campaignProgress; return((BRSkillLevel)Toolbox.Clamp((int)skillDouble, (int)BRSkillLevel.Regular, (int)BRSkillLevel.Ace)); }
/// <summary> /// Loads a campaign template from an .ini file. /// </summary> /// <param name="filePath">Path to the .ini file</param> /// <returns></returns> public bool LoadFromFile(string filePath) { Clear(); if (!File.Exists(filePath)) { return(false); } using (INIFile ini = new INIFile(filePath)) { ContextCoalitionsBlue = ini.GetValue("Context", "Coalitions.Blue", ContextCoalitionsBlue); ContextCoalitionsRed = ini.GetValue("Context", "Coalitions.Red", ContextCoalitionsRed); ContextDecade = ini.GetValue("Context", "Decade", ContextDecade); ContextTheaterID = ini.GetValue("Context", "TheaterID", ContextTheaterID); ContextTheaterRegionsCoalitions = ini.GetValue("Context", "TheaterRegionsCoalitions", ContextTheaterRegionsCoalitions); EnvironmentBadWeatherChance = ini.GetValue("Environment", "BadWeatherChance", EnvironmentBadWeatherChance); EnvironmentNightMissionChance = ini.GetValue("Environment", "NightMissionChance", EnvironmentNightMissionChance); MissionsCount = ini.GetValue("Missions", "Count", MissionsCount); MissionsObjectiveCount = ini.GetValue("Missions", "ObjectiveCount", MissionsObjectiveCount); MissionsObjectiveDistance = ini.GetValue("Missions", "ObjectiveDistance", MissionsObjectiveDistance); MissionsTypes = ini.GetValueArray <string>("Missions", "Types"); OptionsCivilianTraffic = ini.GetValue("Options", "CivilianTraffic", OptionsCivilianTraffic); OptionsPreferences = ini.GetValueArray <MissionTemplatePreferences>("Options", "Preferences"); OptionsRealism = ini.GetValueArray <RealismOption>("Options", "Realism"); OptionsUnitMods = ini.GetValueArray <string>("Options", "UnitMods"); PlayerAircraft = ini.GetValue("Player", "Aircraft", PlayerAircraft); PlayerCoalition = ini.GetValue("Player", "Coalition", PlayerCoalition); PlayerStartingAirbase = ini.GetValue("Player", "StartingAirbase", PlayerStartingAirbase); PlayerStartingCarrier = ini.GetValue("Player", "StartingCarrier", PlayerStartingCarrier); PlayerStartLocation = ini.GetValue("Player", "StartLocation", PlayerStartLocation); SituationEnemyAirDefense = ini.GetValue("Situation", "Enemy.AirDefense", SituationEnemyAirDefense); SituationEnemyAirForce = ini.GetValue("Situation", "Enemy.AirForce", SituationEnemyAirForce); SituationFriendlyAirDefense = ini.GetValue("Situation", "Friendly.AirDefense", SituationFriendlyAirDefense); SituationFriendlyAirForce = ini.GetValue("Situation", "Friendly.AirForce", SituationFriendlyAirForce); SituationVariation = ini.GetValue("Situation", "Variation", SituationVariation); } return(true); }