diff --git a/stardew-access/CustomSoundEffects.cs b/stardew-access/CustomSoundEffects.cs index b5610e4..9303f32 100644 --- a/stardew-access/CustomSoundEffects.cs +++ b/stardew-access/CustomSoundEffects.cs @@ -22,6 +22,9 @@ namespace stardew_access soundEffects.Add("drop_item", TYPE.Sound); soundEffects.Add("colliding", TYPE.Sound); + + soundEffects.Add("bobber_target_up", TYPE.Sound); + soundEffects.Add("bobber_target_down", TYPE.Sound); soundEffects.Add("npc_top", TYPE.Footstep); soundEffects.Add("npc_right", TYPE.Footstep); diff --git a/stardew-access/ModConfig.cs b/stardew-access/ModConfig.cs index d8530fd..fcd3ef7 100644 --- a/stardew-access/ModConfig.cs +++ b/stardew-access/ModConfig.cs @@ -87,7 +87,10 @@ namespace stardew_access public Boolean TrackDroppedItems {get; set;} = true; // Toggles detecting the dropped items. #endregion + public int MaximumFishingDifficulty { get; set; } = 999; // TODO Add doc + public int FixFishingMotionType { get; set; } = 999; + // TODO Add the exclusion and focus list too // public String ExclusionList { get; set; } = "test"; } -} \ No newline at end of file +} diff --git a/stardew-access/Patches/FishingMiniGamePatch.cs b/stardew-access/Patches/FishingMiniGamePatch.cs index e7fd725..dd543fb 100644 --- a/stardew-access/Patches/FishingMiniGamePatch.cs +++ b/stardew-access/Patches/FishingMiniGamePatch.cs @@ -4,18 +4,57 @@ using StardewValley.Menus; namespace stardew_access.Patches { internal class FishingMiniGamePatch { private static ICue? progressSound = null; + private static long previousBobberTargetUpPlayedTime = 0; + private static long previousBobberTargetDownPlayedTime = 0; - internal static void BobberBarPatch(BobberBar __instance, float ___distanceFromCatching, float ___bobberPosition, float ___bobberBarPos, bool ___bobberInBar, bool ___fadeOut, bool ___fadeIn) { + internal static void BobberBarPatch(BobberBar __instance, ref float ___difficulty, ref int ___motionType, float ___distanceFromCatching, float ___bobberPosition, float ___bobberBarPos, bool ___bobberInBar, int ___bobberBarHeight, bool ___fadeOut, bool ___fadeIn) { try { + if (___difficulty > MainClass.Config.MaximumFishingDifficulty) { + MainClass.DebugLog($"Fish difficulty set to {MainClass.Config.MaximumFishingDifficulty} from {___difficulty}"); + ___difficulty = MainClass.Config.MaximumFishingDifficulty; + } + + if (___motionType != MainClass.Config.FixFishingMotionType && + (MainClass.Config.FixFishingMotionType >= 0 && MainClass.Config.FixFishingMotionType <= 4)) { + MainClass.DebugLog($"Motion type set to {MainClass.Config.FixFishingMotionType} from {___motionType}"); + ___motionType = MainClass.Config.FixFishingMotionType; + } + handleProgressBarSound(___distanceFromCatching, ___fadeOut, ___fadeIn); - // MainClass.DebugLog($"dist: {___distanceFromCatching}\tbobPos: {___bobberPosition}\tbobbarpos{___bobberBarPos}"); + + handleBobberTargetSound(___bobberPosition, ___bobberBarPos, ___bobberInBar, ___bobberBarHeight, ___fadeOut, ___fadeIn); } catch (System.Exception e) { MainClass.ErrorLog($"An error occured while patching bobber bar:\n{e.Message}\n{e.StackTrace}"); } } + private static void handleBobberTargetSound(float bobberPosition, float bobberBarPos, bool bobberInBar, int ___bobberBarHeight, bool ___fadeOut, bool ___fadeIn) { + if (bobberInBar) return; + if (___fadeIn) return; + if (___fadeOut) return; + + DateTimeOffset now = (DateTimeOffset)DateTime.UtcNow; + long currentTimeInMilliseconds = now.ToUnixTimeMilliseconds(); + + if(bobberPosition < bobberBarPos && (currentTimeInMilliseconds - previousBobberTargetUpPlayedTime) >= 250) { + previousBobberTargetUpPlayedTime = currentTimeInMilliseconds; + int distanceFromBobber = (int)(bobberBarPos - bobberPosition + (___bobberBarHeight / 2)); + int calculatedPitch = distanceFromBobber * 4; + MainClass.DebugLog(calculatedPitch.ToString()); + Game1.playSoundPitched("bobber_target_up", calculatedPitch); + } + + if(bobberPosition > bobberBarPos && (currentTimeInMilliseconds - previousBobberTargetDownPlayedTime) >= 250) { + previousBobberTargetDownPlayedTime = currentTimeInMilliseconds; + int distanceFromBobber = (int)(bobberPosition - bobberBarPos - (___bobberBarHeight / 2)); + int calculatedPitch = distanceFromBobber * 4; + MainClass.DebugLog(calculatedPitch.ToString()); + Game1.playSoundPitched("bobber_target_down", calculatedPitch); + } + } + private static void handleProgressBarSound(float ___distanceFromCatching, bool ___fadeOut, bool ___fadeIn) { - if(Game1.soundBank == null) return; + if (Game1.soundBank == null) return; if (progressSound == null) { progressSound = Game1.soundBank.GetCue("SinWave"); @@ -29,7 +68,7 @@ namespace stardew_access.Patches { progressSound.Play(); } - if(___fadeOut && progressSound.IsPlaying) { + if (___fadeOut && progressSound.IsPlaying) { // Stop playing the sound on menu close progressSound.Stop(Microsoft.Xna.Framework.Audio.AudioStopOptions.Immediate); } diff --git a/stardew-access/assets/sounds/bobber_target_down.wav b/stardew-access/assets/sounds/bobber_target_down.wav new file mode 100644 index 0000000..629a584 Binary files /dev/null and b/stardew-access/assets/sounds/bobber_target_down.wav differ diff --git a/stardew-access/assets/sounds/bobber_target_up.wav b/stardew-access/assets/sounds/bobber_target_up.wav new file mode 100644 index 0000000..3514ca2 Binary files /dev/null and b/stardew-access/assets/sounds/bobber_target_up.wav differ