public void ExportConfiguration(DomainModelService domainModel, string gameExecutableFilePath) { // Scenarios for each reversible code module // Scenario 1: If currently applied and should not be applied, apply unmodified code // Scenario 2: If currently not applied and should be applied, apply modified code // Scenario 3: If currently applied and should be applied, do nothing // Scenario 4: If currently not applied and should not be applied, do nothing // Compatibility var isGameCdFixApplied = _gameCdFix.IsCodeModified(gameExecutableFilePath); var isGameCdFixRequired = domainModel.Configurations.DisableGameCd; if (isGameCdFixApplied != isGameCdFixRequired) { ApplyReversibleCode(_gameCdFix, isGameCdFixRequired, gameExecutableFilePath); } var isDisplayModeFixApplied = _displayModeFix.IsCodeModified(gameExecutableFilePath); var isDisplayModeFixRequired = domainModel.Configurations.DisableColourMode; if (isDisplayModeFixApplied != isDisplayModeFixRequired) { ApplyReversibleCode(_displayModeFix, isDisplayModeFixRequired, gameExecutableFilePath); } var isSampleAppFixApplied = _sampleAppFix.IsCodeModified(gameExecutableFilePath); var isSampleAppFixRequired = domainModel.Configurations.DisableSampleApp; if (isSampleAppFixApplied != isSampleAppFixRequired) { ApplyReversibleCode(_sampleAppFix, isSampleAppFixRequired, gameExecutableFilePath); } var isRaceSoundsFixApplied = _raceSoundsFix.IsCodeModified(gameExecutableFilePath); var isRaceSoundsFixRequired = domainModel.Configurations.DisableMemoryResetForRaceSounds; if (isRaceSoundsFixApplied != isRaceSoundsFixRequired) { ApplyReversibleCode(_raceSoundsFix, isRaceSoundsFixRequired, gameExecutableFilePath); } // var isPitExitPriorityFixApplied = _pitExitPriorityFix.IsCodeModified(gameExecutableFilePath); // TODO: Not implemented yet // var isPitExitPriorityFixRequired = domainModel.Configurations.DisablePitExitPriority; // TODO: Not implemented yet // if (isPitExitPriorityFixApplied != isPitExitPriorityFixRequired) // TODO: Not implemented yet // { // TODO: Not implemented yet // ApplyReversibleCode(_pitExitPriorityFix, isPitExitPriorityFixRequired, gameExecutableFilePath); // TODO: Not implemented yet // } // TODO: Not implemented yet // Gameplay var isYellowFlagFixApplied = _yellowFlagFix.IsCodeModified(gameExecutableFilePath); var isYellowFlagFixRequired = domainModel.Configurations.DisableYellowFlagPenalties; if (isYellowFlagFixApplied != isYellowFlagFixRequired) { ApplyReversibleCode(_yellowFlagFix, isYellowFlagFixRequired, gameExecutableFilePath); } var isCarDesignCalculationUpdateApplied = _carDesignCalculationUpdate.IsCodeModified(gameExecutableFilePath); var isCarDesignCalculationUpdateRequired = domainModel.Configurations.EnableCarHandlingDesignCalculation; if (isCarDesignCalculationUpdateApplied != isCarDesignCalculationUpdateRequired) { ApplyReversibleCode(_carDesignCalculationUpdate, isCarDesignCalculationUpdateRequired, gameExecutableFilePath); } var isCarHandlingPerformanceFixApplied = _carHandlingPerformanceFix.IsCodeModified(gameExecutableFilePath); var isCarHandlingPerformanceFixRequired = domainModel.Configurations.EnableCarPerformanceRaceCalcuation; if (isCarHandlingPerformanceFixApplied != isCarHandlingPerformanceFixRequired) { ApplyReversibleCode(_carHandlingPerformanceFix, isCarHandlingPerformanceFixRequired, gameExecutableFilePath); } _gameYearUpdate.SetGameYear(domainModel.Configurations.GameYear, gameExecutableFilePath); // Scenarios for each irreversible code module // Scenario 1: If currently not applied and should be applied, apply modified code // Scenario 2: If currently not applied and should not be applied, do nothing // Scenario 3: If currently applied, do nothing // Points Scoring System var isPointsScoringSystemDefaultApplied = _pointsSystemF119912002Update.IsCodeModified(gameExecutableFilePath); var isPointsScoringSystemDefaultRequired = domainModel.Configurations.PointsScoringSystemDefault; if (!isPointsScoringSystemDefaultApplied && isPointsScoringSystemDefaultRequired) { ApplyIrreversibleCode(_pointsSystemF119912002Update, gameExecutableFilePath); } var isPointsScoringSystemOption1Applied = _pointsSystemF119811990Update.IsCodeModified(gameExecutableFilePath); var isPointsScoringSystemOption1Required = domainModel.Configurations.PointsScoringSystemOption1; if (!isPointsScoringSystemOption1Applied && isPointsScoringSystemOption1Required) { ApplyIrreversibleCode(_pointsSystemF119811990Update, gameExecutableFilePath); } var isPointsScoringSystemOption2Applied = _pointsSystemF120032009Update.IsCodeModified(gameExecutableFilePath); var isPointsScoringSystemOption2Required = domainModel.Configurations.PointsScoringSystemOption2; if (!isPointsScoringSystemOption2Applied && isPointsScoringSystemOption2Required) { ApplyIrreversibleCode(_pointsSystemF120032009Update, gameExecutableFilePath); } var isPointsScoringSystemOption3Applied = _pointsSystemF1201020XxUpdate.IsCodeModified(gameExecutableFilePath); var isPointsScoringSystemOption3Required = domainModel.Configurations.PointsScoringSystemOption3; if (!isPointsScoringSystemOption3Applied && isPointsScoringSystemOption3Required) { ApplyIrreversibleCode(_pointsSystemF1201020XxUpdate, gameExecutableFilePath); } // Track Editor var isTrackEditorFixApplied = _trackEditorFix.IsCodeModified(gameExecutableFilePath); var isTrackEditorFixRequired = domainModel.Configurations.EnableTrackEditor; if (isTrackEditorFixApplied != isTrackEditorFixRequired) { ApplyReversibleCode(_trackEditorFix, isTrackEditorFixRequired, gameExecutableFilePath); } }
private void ExportGameConfiguration(string gameExecutablePath) { // Scenarios for each reversible code module // Scenario 1: If currently applied and should not be applied, apply unmodified code // Scenario 2: If currently not applied and should be applied, apply modified code // Scenario 3: If currently applied and should be applied, do nothing // Scenario 4: If currently not applied and should not be applied, do nothing var gameCdFix = new GameCdFix(gameExecutablePath); var isGameCdFixApplied = gameCdFix.IsCodeModified(); if (isGameCdFixApplied != IsGameCdFixRequired) { ApplyReversibleCode(gameCdFix, IsGameCdFixRequired); } var displayModeFix = new DisplayModeFix(gameExecutablePath); var isDisplayModeFixApplied = displayModeFix.IsCodeModified(); if (isDisplayModeFixApplied != IsDisplayModeFixRequired) { ApplyReversibleCode(displayModeFix, IsDisplayModeFixRequired); } var sampleAppFix = new SampleAppFix(gameExecutablePath); var isSampleAppFixApplied = sampleAppFix.IsCodeModified(); if (isSampleAppFixApplied != IsSampleAppFixRequired) { ApplyReversibleCode(sampleAppFix, IsSampleAppFixRequired); } var raceSoundsFix = new RaceSoundsFix(gameExecutablePath); var isRaceSoundsFixApplied = raceSoundsFix.IsCodeModified(); if (isRaceSoundsFixApplied != IsRaceSoundsFixRequired) { ApplyReversibleCode(raceSoundsFix, IsRaceSoundsFixRequired); } // TODO: var pitExitPriorityFix = new PitExitPriorityFix(gameExecutablePath); // TODO: var isPitExitPriorityFixApplied = pitExitPriorityFix.IsCodeModified(); // TODO: if (isPitExitPriorityFixApplied != IsPitExitPriorityFixRequired) // TODO: { // TODO: ApplyReversibleCode(pitExitPriorityFix, IsPitExitPriorityFixRequired); // TODO: } var yellowFlagFix = new YellowFlagFix(gameExecutablePath); var isYellowFlagFixApplied = yellowFlagFix.IsCodeModified(); if (isYellowFlagFixApplied != IsYellowFlagFixRequired) { ApplyReversibleCode(yellowFlagFix, IsYellowFlagFixRequired); } var carDesignCalculationUpdate = new CarDesignCalculationUpdate(gameExecutablePath); var isEnableCarHandlingDesignCalculationApplied = carDesignCalculationUpdate.IsCodeModified(); if (isEnableCarHandlingDesignCalculationApplied != IsCarDesignCalculationUpdateRequired) { ApplyReversibleCode(carDesignCalculationUpdate, IsCarDesignCalculationUpdateRequired); } var carHandlingPerformanceFix = new CarHandlingPerformanceFix(gameExecutablePath); var isEnableCarPerformanceRaceCalcuationApplied = carHandlingPerformanceFix.IsCodeModified(); if (isEnableCarPerformanceRaceCalcuationApplied != IsCarHandlingPerformanceFixRequired) { ApplyReversibleCode(carHandlingPerformanceFix, IsCarHandlingPerformanceFixRequired); } // Scenarios for each irreversible code module // Scenario 1: If currently not applied and should be applied, apply modified code // Scenario 2: If currently not applied and should not be applied, do nothing // Scenario 3: If currently applied, do nothing var pointsScoringSystemDefault = new PointsSystemF119912002Update(gameExecutablePath); var isPointsScoringSystemDefaultApplied = pointsScoringSystemDefault.IsCodeModified(); if (!isPointsScoringSystemDefaultApplied && IsPointsScoringSystemDefaultRequired) { ApplyIrreversibleCode(pointsScoringSystemDefault); } var pointsScoringSystemOption1 = new PointsSystemF119811990Update(gameExecutablePath); var isPointsScoringSystemOption1Applied = pointsScoringSystemOption1.IsCodeModified(); if (!isPointsScoringSystemOption1Applied && IsPointsScoringSystemOption1Required) { ApplyIrreversibleCode(pointsScoringSystemOption1); } var pointsScoringSystemOption2 = new PointsSystemF120032009Update(gameExecutablePath); var isPointsScoringSystemOption2Applied = pointsScoringSystemOption2.IsCodeModified(); if (!isPointsScoringSystemOption2Applied && IsPointsScoringSystemOption2Required) { ApplyIrreversibleCode(pointsScoringSystemOption2); } var pointsScoringSystemOption3 = new PointsSystemF1201020xxUpdate(gameExecutablePath); var isPointsScoringSystemOption3Applied = pointsScoringSystemOption3.IsCodeModified(); if (!isPointsScoringSystemOption3Applied && IsPointsScoringSystemOption3Required) { ApplyIrreversibleCode(pointsScoringSystemOption3); } }