diff --git a/app/src/main/cpp/ARMSX2Bridge.h b/app/src/main/cpp/ARMSX2Bridge.h index 2234a39090..7918431f16 100644 --- a/app/src/main/cpp/ARMSX2Bridge.h +++ b/app/src/main/cpp/ARMSX2Bridge.h @@ -145,11 +145,15 @@ typedef void (^ARMSX2RetroAchievementsCompletion)(BOOL success, NSString * _Nonn volumePercent:(int)volumePercent eeCoreType:(int)eeCoreType mtvu:(BOOL)mtvu + eeCycleRateOverride:(BOOL)eeCycleRateOverride + eeCycleRate:(int)eeCycleRate + fastBootOverride:(BOOL)fastBootOverride + fastBoot:(BOOL)fastBoot enableCheats:(BOOL)enableCheats enablePatches:(BOOL)enablePatches enableGameFixes:(BOOL)enableGameFixes enableGameDBHardwareFixes:(BOOL)enableGameDBHardwareFixes - NS_SWIFT_NAME(setGameSettings(forISO:enabled:upscaleMultiplier:aspectRatio:textureFiltering:hardwareMipmapping:blendingAccuracy:interlaceMode:trilinearFiltering:halfPixelOffset:roundSprite:alignSpriteOverride:alignSprite:mergeSpriteOverride:mergeSprite:wildArmsOffsetOverride:wildArmsOffset:textureOffsetXOverride:textureOffsetX:textureOffsetYOverride:textureOffsetY:skipDrawStartOverride:skipDrawStart:skipDrawEndOverride:skipDrawEnd:volumeOverride:volumePercent:eeCoreType:mtvu:enableCheats:enablePatches:enableGameFixes:enableGameDBHardwareFixes:)); + NS_SWIFT_NAME(setGameSettings(forISO:enabled:upscaleMultiplier:aspectRatio:textureFiltering:hardwareMipmapping:blendingAccuracy:interlaceMode:trilinearFiltering:halfPixelOffset:roundSprite:alignSpriteOverride:alignSprite:mergeSpriteOverride:mergeSprite:wildArmsOffsetOverride:wildArmsOffset:textureOffsetXOverride:textureOffsetX:textureOffsetYOverride:textureOffsetY:skipDrawStartOverride:skipDrawStart:skipDrawEndOverride:skipDrawEnd:volumeOverride:volumePercent:eeCoreType:mtvu:eeCycleRateOverride:eeCycleRate:fastBootOverride:fastBoot:enableCheats:enablePatches:enableGameFixes:enableGameDBHardwareFixes:)); + (void)setGameSettingsForCurrentGameWithEnabled:(BOOL)enabled upscaleMultiplier:(float)upscaleMultiplier aspectRatio:(nonnull NSString *)aspectRatio @@ -178,11 +182,15 @@ typedef void (^ARMSX2RetroAchievementsCompletion)(BOOL success, NSString * _Nonn volumePercent:(int)volumePercent eeCoreType:(int)eeCoreType mtvu:(BOOL)mtvu + eeCycleRateOverride:(BOOL)eeCycleRateOverride + eeCycleRate:(int)eeCycleRate + fastBootOverride:(BOOL)fastBootOverride + fastBoot:(BOOL)fastBoot enableCheats:(BOOL)enableCheats enablePatches:(BOOL)enablePatches enableGameFixes:(BOOL)enableGameFixes enableGameDBHardwareFixes:(BOOL)enableGameDBHardwareFixes - NS_SWIFT_NAME(setGameSettingsForCurrentGame(enabled:upscaleMultiplier:aspectRatio:textureFiltering:hardwareMipmapping:blendingAccuracy:interlaceMode:trilinearFiltering:halfPixelOffset:roundSprite:alignSpriteOverride:alignSprite:mergeSpriteOverride:mergeSprite:wildArmsOffsetOverride:wildArmsOffset:textureOffsetXOverride:textureOffsetX:textureOffsetYOverride:textureOffsetY:skipDrawStartOverride:skipDrawStart:skipDrawEndOverride:skipDrawEnd:volumeOverride:volumePercent:eeCoreType:mtvu:enableCheats:enablePatches:enableGameFixes:enableGameDBHardwareFixes:)); + NS_SWIFT_NAME(setGameSettingsForCurrentGame(enabled:upscaleMultiplier:aspectRatio:textureFiltering:hardwareMipmapping:blendingAccuracy:interlaceMode:trilinearFiltering:halfPixelOffset:roundSprite:alignSpriteOverride:alignSprite:mergeSpriteOverride:mergeSprite:wildArmsOffsetOverride:wildArmsOffset:textureOffsetXOverride:textureOffsetX:textureOffsetYOverride:textureOffsetY:skipDrawStartOverride:skipDrawStart:skipDrawEndOverride:skipDrawEnd:volumeOverride:volumePercent:eeCoreType:mtvu:eeCycleRateOverride:eeCycleRate:fastBootOverride:fastBoot:enableCheats:enablePatches:enableGameFixes:enableGameDBHardwareFixes:)); + (nonnull NSString *)clearCacheForISO:(nonnull NSString *)isoName NS_SWIFT_NAME(clearCache(forISO:)); + (nonnull NSString *)deleteGameDataForISO:(nonnull NSString *)isoName NS_SWIFT_NAME(deleteGameData(forISO:)); + (BOOL)deleteISO:(nonnull NSString *)isoName deleteGameData:(BOOL)deleteGameData NS_SWIFT_NAME(deleteISO(_:deleteGameData:)); diff --git a/app/src/main/cpp/ARMSX2Bridge.mm b/app/src/main/cpp/ARMSX2Bridge.mm index 66d7bbfb76..05c95eb983 100644 --- a/app/src/main/cpp/ARMSX2Bridge.mm +++ b/app/src/main/cpp/ARMSX2Bridge.mm @@ -1483,6 +1483,14 @@ static NSMutableDictionary* ARMSX2BuildGlobalGameSettingsResult() const bool globalEnableGameDBHardwareFixes = g_p44_settings_interface ? !g_p44_settings_interface->GetBoolValue("EmuCore/GS", "UserHacks", false) : true; const int globalEECoreType = g_p44_settings_interface ? g_p44_settings_interface->GetIntValue("EmuCore/CPU", "CoreType", 2) : 2; const bool globalMTVU = g_p44_settings_interface ? g_p44_settings_interface->GetBoolValue("EmuCore/Speedhacks", "vuThread", true) : true; + const int globalEECycleRate = ARMSX2ClampInt( + g_p44_settings_interface ? g_p44_settings_interface->GetIntValue("EmuCore/Speedhacks", "EECycleRate", 0) : 0, + -3, + 3); + const bool globalFastBoot = g_p44_settings_interface ? + g_p44_settings_interface->GetBoolValue( + "EmuCore", "EnableFastBoot", + g_p44_settings_interface->GetBoolValue("GameISO", "FastBoot", false)) : false; const int globalVolumePercent = ARMSX2ClampInt( g_p44_settings_interface ? g_p44_settings_interface->GetIntValue("SPU2/Output", "StandardVolume", ARMSX2DefaultAudioVolumePercent) : ARMSX2DefaultAudioVolumePercent, 0, @@ -1524,6 +1532,12 @@ static NSMutableDictionary* ARMSX2BuildGlobalGameSettingsResult() @"enableGameDBHardwareFixes": @(globalEnableGameDBHardwareFixes), @"eeCoreType": @(globalEECoreType), @"mtvu": @(globalMTVU), + @"globalEECycleRate": @(globalEECycleRate), + @"eeCycleRate": @(globalEECycleRate), + @"hasEECycleRateOverride": @NO, + @"globalFastBoot": @(globalFastBoot), + @"fastBoot": @(globalFastBoot), + @"hasFastBootOverride": @NO, @"globalVolumePercent": @(globalVolumePercent), @"volumePercent": @(globalVolumePercent), @"hasVolumeOverride": @NO, @@ -1583,6 +1597,8 @@ static void ARMSX2ApplyPerGameSettingsOverrides(NSMutableDictionary Int { + min(max(value, -3), 3) + } + private static func formatPercent(_ value: Int) -> String { "\(clampedVolume(value))%" } + private static func formatEECycleRate(_ value: Int) -> String { + let clamped = clampedEECycleRate(value) + return clamped > 0 ? "+\(clamped)" : "\(clamped)" + } + private static func normalizedSkipDrawEnd(start: Int, end: Int, startOverride: Bool, endOverride: Bool) -> Int { let clampedEnd = clampedSkipDraw(end) guard startOverride && endOverride else {