Added sound cues when the bobber is above or below the bar

The pitch of the sound cues also increase with the increase in distance of bobber from bar
Also added a progress sound effect
Added config options to fix the maximum difficulty and motion type
master
Mohammad Shoaib Khan 2023-02-12 21:16:48 +05:30
parent b89a8f205d
commit d17974e3f5
No known key found for this signature in database
GPG Key ID: D8040D966320B620
5 changed files with 50 additions and 5 deletions

View File

@ -22,6 +22,9 @@ namespace stardew_access
soundEffects.Add("drop_item", TYPE.Sound); soundEffects.Add("drop_item", TYPE.Sound);
soundEffects.Add("colliding", 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_top", TYPE.Footstep);
soundEffects.Add("npc_right", TYPE.Footstep); soundEffects.Add("npc_right", TYPE.Footstep);

View File

@ -87,7 +87,10 @@ namespace stardew_access
public Boolean TrackDroppedItems {get; set;} = true; // Toggles detecting the dropped items. public Boolean TrackDroppedItems {get; set;} = true; // Toggles detecting the dropped items.
#endregion #endregion
public int MaximumFishingDifficulty { get; set; } = 999; // TODO Add doc
public int FixFishingMotionType { get; set; } = 999;
// TODO Add the exclusion and focus list too // TODO Add the exclusion and focus list too
// public String ExclusionList { get; set; } = "test"; // public String ExclusionList { get; set; } = "test";
} }
} }

View File

@ -4,18 +4,57 @@ using StardewValley.Menus;
namespace stardew_access.Patches { namespace stardew_access.Patches {
internal class FishingMiniGamePatch { internal class FishingMiniGamePatch {
private static ICue? progressSound = null; 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 { 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); handleProgressBarSound(___distanceFromCatching, ___fadeOut, ___fadeIn);
// MainClass.DebugLog($"dist: {___distanceFromCatching}\tbobPos: {___bobberPosition}\tbobbarpos{___bobberBarPos}");
handleBobberTargetSound(___bobberPosition, ___bobberBarPos, ___bobberInBar, ___bobberBarHeight, ___fadeOut, ___fadeIn);
} catch (System.Exception e) { } catch (System.Exception e) {
MainClass.ErrorLog($"An error occured while patching bobber bar:\n{e.Message}\n{e.StackTrace}"); 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) { private static void handleProgressBarSound(float ___distanceFromCatching, bool ___fadeOut, bool ___fadeIn) {
if(Game1.soundBank == null) return; if (Game1.soundBank == null) return;
if (progressSound == null) { if (progressSound == null) {
progressSound = Game1.soundBank.GetCue("SinWave"); progressSound = Game1.soundBank.GetCue("SinWave");
@ -29,7 +68,7 @@ namespace stardew_access.Patches {
progressSound.Play(); progressSound.Play();
} }
if(___fadeOut && progressSound.IsPlaying) { if (___fadeOut && progressSound.IsPlaying) {
// Stop playing the sound on menu close // Stop playing the sound on menu close
progressSound.Stop(Microsoft.Xna.Framework.Audio.AudioStopOptions.Immediate); progressSound.Stop(Microsoft.Xna.Framework.Audio.AudioStopOptions.Immediate);
} }