Compare commits

..

4 Commits

Author SHA1 Message Date
Talon c3cec1a490 Merge remote-tracking branch 'github/fishing' 2023-03-26 23:24:52 +02:00
Mohammad Shoaib Khan 5fa9fd5eca
Merge branch 'master' into fishing
Conflicts:
	stardew-access/CustomSoundEffects.cs
2023-03-10 15:44:12 +05:30
Mohammad Shoaib Khan d17974e3f5
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
2023-02-12 21:16:48 +05:30
Mohammad Shoaib Khan b89a8f205d
Added progress sound when catching a fish 2023-02-12 15:14:46 +05:30
6 changed files with 89 additions and 0 deletions

View File

@ -24,6 +24,9 @@ namespace stardew_access
soundEffects.Add("colliding", TYPE.Sound);
soundEffects.Add("invalid-selection", 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);
soundEffects.Add("npc_left", TYPE.Footstep);

View File

@ -275,6 +275,12 @@ namespace stardew_access
original: AccessTools.Method(typeof(GrandpaStory), nameof(GrandpaStory.draw), new Type[] { typeof(SpriteBatch) }),
postfix: new HarmonyMethod(typeof(GrandpaStoryPatch), nameof(GrandpaStoryPatch.DrawPatch))
);
harmony.Patch(
original: AccessTools.Method(typeof(BobberBar), nameof(BobberBar.update)),
postfix: new HarmonyMethod(typeof(FishingMiniGamePatch), nameof(FishingMiniGamePatch.BobberBarPatch))
);
#endregion
harmony.Patch(

View File

@ -89,6 +89,9 @@ namespace stardew_access
public Boolean DisableInventoryVerbosity {get; set;} = false; // If enabled, does not speaks 'not usable here' and 'donatable' in inventories
#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";
}

View File

@ -0,0 +1,77 @@
using StardewValley;
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, 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);
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 (progressSound == null) {
progressSound = Game1.soundBank.GetCue("SinWave");
}
progressSound.SetVariable("Pitch", 2400f * ___distanceFromCatching);
// progressSound.SetVariable("Volume", 300f);
if (___fadeIn && !progressSound.IsPlaying) {
// Start playing the sound on menu open
progressSound.Play();
}
if (___fadeOut && progressSound.IsPlaying) {
// Stop playing the sound on menu close
progressSound.Stop(Microsoft.Xna.Framework.Audio.AudioStopOptions.Immediate);
}
}
}
}