From b9a10e6039fadbb5bd2f5fe6c4c6832454cfc869 Mon Sep 17 00:00:00 2001 From: shoaib11120 Date: Wed, 19 Jan 2022 14:27:15 +0530 Subject: [PATCH] Play different sound if the object is up, left, etc. --- stardew-access/Game/Radar.cs | 46 ++++++++++- stardew-access/Game/ReadTile.cs | 4 +- stardew-access/ModEntry.cs | 105 +++++++++++++++++++++++--- stardew-access/Patches/MenuPatches.cs | 1 - 4 files changed, 141 insertions(+), 15 deletions(-) diff --git a/stardew-access/Game/Radar.cs b/stardew-access/Game/Radar.cs index d60125c..da885a3 100644 --- a/stardew-access/Game/Radar.cs +++ b/stardew-access/Game/Radar.cs @@ -39,6 +39,7 @@ namespace stardew_access.Game public async void run() { + MainClass.monitor.Log($"\n\nRead Tile started", StardewModdingAPI.LogLevel.Debug); isRunning = true; Vector2 currPosition = Game1.player.getTileLocation(); int limit = 5; @@ -48,6 +49,7 @@ namespace stardew_access.Game npcs.Clear(); findTile(currPosition, currPosition, limit); + MainClass.monitor.Log($"\nRead Tile stopped\n\n", StardewModdingAPI.LogLevel.Debug); await Task.Delay(3000); isRunning = false; } @@ -193,7 +195,7 @@ namespace stardew_access.Game } } - public void playSoundAt(Vector2 position, String? searchQuery) + public void playSoundAt(Vector2 position, String? searchQuery, bool isNPC = false) { // Skip if player is directly looking at the tile if (CurrentPlayer.getNextTile().Equals(position)) @@ -204,7 +206,47 @@ namespace stardew_access.Game if(MainClass.radarDebug) MainClass.monitor.Log($"Object:{searchQuery.ToLower().Trim()}\tPosition: X={position.X} Y={position.Y}", StardewModdingAPI.LogLevel.Debug); - Game1.currentLocation.localSoundAt("sa_poi", position); + int px = (int)Game1.player.getTileX(); // Player's X postion + int py = (int)Game1.player.getTileY(); // Player's Y postion + + int ox = (int)position.X; // Object's X postion + int oy = (int)position.Y; // Object's Y postion + + int dx = ox - px; // Distance of object's X position + int dy = oy - py; // Distance of object's Y position + + if(dy < 0 && (Math.Abs(dy) >= Math.Abs(dx))) // Object is at top + { + if (isNPC) + Game1.currentLocation.localSoundAt("npc_top", position); + else + Game1.currentLocation.localSoundAt("obj_top", position); + MainClass.monitor.Log($"Top", StardewModdingAPI.LogLevel.Debug); + } + else if (dx > 0 && (Math.Abs(dx) >= Math.Abs(dy))) // Object is at right + { + if (isNPC) + Game1.currentLocation.localSoundAt("npc_right", position); + else + Game1.currentLocation.localSoundAt("obj_right", position); + MainClass.monitor.Log($"Right", StardewModdingAPI.LogLevel.Debug); + } + else if (dx < 0 && (Math.Abs(dx) > Math.Abs(dy))) // Object is at left + { + if (isNPC) + Game1.currentLocation.localSoundAt("npc_left", position); + else + Game1.currentLocation.localSoundAt("obj_left", position); + MainClass.monitor.Log($"Left", StardewModdingAPI.LogLevel.Debug); + } + else if (dy > 0 && (Math.Abs(dy) > Math.Abs(dx))) // Object is at bottom + { + if (isNPC) + Game1.currentLocation.localSoundAt("npc_bottom", position); + else + Game1.currentLocation.localSoundAt("obj_bottom", position); + MainClass.monitor.Log($"Bottom", StardewModdingAPI.LogLevel.Debug); + } } } } diff --git a/stardew-access/Game/ReadTile.cs b/stardew-access/Game/ReadTile.cs index f19fae4..c77410b 100644 --- a/stardew-access/Game/ReadTile.cs +++ b/stardew-access/Game/ReadTile.cs @@ -1,6 +1,4 @@ - - -using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework; using StardewModdingAPI; using StardewValley; using StardewValley.Locations; diff --git a/stardew-access/ModEntry.cs b/stardew-access/ModEntry.cs index 03c82e0..1f1782a 100644 --- a/stardew-access/ModEntry.cs +++ b/stardew-access/ModEntry.cs @@ -357,21 +357,108 @@ namespace stardew_access collidingCueDef.SetSound(collidingAudio, Game1.audioEngine.GetCategoryIndex("Sound"), false); #endregion - #region POI sound - CueDefinition poiCueDef = new CueDefinition(); - poiCueDef.name = "sa_poi"; - SoundEffect poiAudio; - string poiFilePath = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/sound1.wav"); - using (FileStream stream = new(poiFilePath, FileMode.Open)) + #region Nearby NPCs sound + // Npc top + CueDefinition npcTopCD = new CueDefinition(); + npcTopCD.name = "npc_top"; + SoundEffect npcTopSE; + string npcTopFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/npc_top.wav"); + using (FileStream stream = new(npcTopFP, FileMode.Open)) { - poiAudio = SoundEffect.FromStream(stream); + npcTopSE = SoundEffect.FromStream(stream); } - poiCueDef.SetSound(poiAudio, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + npcTopCD.SetSound(npcTopSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Npc left + CueDefinition npcLeftCD = new CueDefinition(); + npcLeftCD.name = "npc_left"; + SoundEffect npcLeftSE; + string npcLeftFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/npc_left.wav"); + using (FileStream stream = new(npcLeftFP, FileMode.Open)) + { + npcLeftSE = SoundEffect.FromStream(stream); + } + npcLeftCD.SetSound(npcLeftSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Npc right + CueDefinition npcRightCD = new CueDefinition(); + npcRightCD.name = "npc_right"; + SoundEffect npcRightSE; + string npcRightFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/npc_right.wav"); + using (FileStream stream = new(npcRightFP, FileMode.Open)) + { + npcRightSE = SoundEffect.FromStream(stream); + } + npcRightCD.SetSound(npcRightSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Npc bottom + CueDefinition npcBottomCD = new CueDefinition(); + npcBottomCD.name = "npc_bottom"; + SoundEffect npcBottomSE; + string npcBottomFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/npc_bottom.wav"); + using (FileStream stream = new(npcBottomFP, FileMode.Open)) + { + npcBottomSE = SoundEffect.FromStream(stream); + } + npcBottomCD.SetSound(npcBottomSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + #endregion + + #region Nearby objects sound + // Object top + CueDefinition objTopCD = new CueDefinition(); + objTopCD.name = "obj_top"; + SoundEffect objTopSE; + string objTopFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/obj_top.wav"); + using (FileStream stream = new(objTopFP, FileMode.Open)) + { + objTopSE = SoundEffect.FromStream(stream); + } + objTopCD.SetSound(objTopSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Object left + CueDefinition objLeftCD = new CueDefinition(); + objLeftCD.name = "obj_left"; + SoundEffect objLeftSE; + string objLeftFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/obj_left.wav"); + using (FileStream stream = new(objLeftFP, FileMode.Open)) + { + objLeftSE = SoundEffect.FromStream(stream); + } + objLeftCD.SetSound(objLeftSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Object right + CueDefinition objRightCD = new CueDefinition(); + objRightCD.name = "obj_right"; + SoundEffect objRightSE; + string objRightFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/obj_right.wav"); + using (FileStream stream = new(objRightFP, FileMode.Open)) + { + objRightSE = SoundEffect.FromStream(stream); + } + objRightCD.SetSound(objRightSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); + + // Object bottom + CueDefinition objBottomCD = new CueDefinition(); + objBottomCD.name = "obj_bottom"; + SoundEffect objBottomSE; + string objBottomFP = Path.Combine(Path.Combine(this.Helper.DirectoryPath), "sounds/obj_bottom.wav"); + using (FileStream stream = new(objBottomFP, FileMode.Open)) + { + objBottomSE = SoundEffect.FromStream(stream); + } + objBottomCD.SetSound(objBottomSE, Game1.audioEngine.GetCategoryIndex("Footsteps"), false); #endregion Game1.soundBank.AddCue(dropItemCueDef); Game1.soundBank.AddCue(collidingCueDef); - Game1.soundBank.AddCue(poiCueDef); + Game1.soundBank.AddCue(objTopCD); + Game1.soundBank.AddCue(objLeftCD); + Game1.soundBank.AddCue(objRightCD); + Game1.soundBank.AddCue(objBottomCD); + Game1.soundBank.AddCue(npcTopCD); + Game1.soundBank.AddCue(npcLeftCD); + Game1.soundBank.AddCue(npcRightCD); + Game1.soundBank.AddCue(npcBottomCD); } catch (Exception e) { diff --git a/stardew-access/Patches/MenuPatches.cs b/stardew-access/Patches/MenuPatches.cs index 1136625..7a2a597 100644 --- a/stardew-access/Patches/MenuPatches.cs +++ b/stardew-access/Patches/MenuPatches.cs @@ -3,7 +3,6 @@ using stardew_access.Game; using StardewModdingAPI; using StardewValley; using StardewValley.Menus; -using StardewValley.TerrainFeatures; namespace stardew_access.Patches {