diff --git a/stardew-access/API.cs b/stardew-access/API.cs
index 550a6bf..d0fb713 100644
--- a/stardew-access/API.cs
+++ b/stardew-access/API.cs
@@ -65,7 +65,7 @@ namespace stardew_access.ScreenReader
/// Name of the object. Returns null if no object found.
public string? GetNameAtTile(Vector2 tile)
{
- return TileInfo.getNameAtTile(tile, null);
+ return TileInfo.GetNameAtTile(tile, null);
}
/// Speaks the text via the loaded screen reader (if any).
diff --git a/stardew-access/Features/DynamicTiles.cs b/stardew-access/Features/DynamicTiles.cs
new file mode 100644
index 0000000..cc50483
--- /dev/null
+++ b/stardew-access/Features/DynamicTiles.cs
@@ -0,0 +1,782 @@
+using Microsoft.Xna.Framework;
+using Netcode;
+using StardewValley;
+using StardewValley.Buildings;
+using StardewValley.Locations;
+using StardewValley.Objects;
+using StardewValley.TerrainFeatures;
+using static stardew_access.Features.Utils;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+
+namespace stardew_access.Features
+{
+ ///
+ /// Provides methods to locate tiles of interest in various game locations that are conditional or unpredictable (I.E. not static).
+ ///
+ ///
+ /// The DynamicTiles class currently supports the following location types:
+ /// - Beach
+ /// - BoatTunnel
+ /// - CommunityCenter
+ /// - Farm
+ /// - FarmHouse
+ /// - Forest
+ /// - IslandFarmHouse
+ /// - IslandLocation
+ /// - LibraryMuseum
+ /// - Town
+ ///
+ /// And the following Island LocationTypes:
+ /// - IslandNorth
+ /// - IslandWest
+ /// - VolcanoDungeon
+ ///
+ /// The class also supports the following named locations:
+ /// - Barn (and its upgraded versions)
+ /// - Coop (and its upgraded versions)
+ ///
+ /// The class does not yet support the following location types, but consider adding support in future updates:
+ /// - AbandonedJojaMart
+ /// - AdventureGuild
+ /// - BathHousePool
+ /// - BeachNightMarket
+ /// - BugLand
+ /// - BusStop
+ /// - Caldera
+ /// - Cellar
+ /// - Club
+ /// - Desert
+ /// - FarmCave
+ /// - FishShop
+ /// - JojaMart
+ /// - ManorHouse
+ /// - MermaidHouse
+ /// - Mine
+ /// - Mountain
+ /// - MovieTheater
+ /// - Railroad
+ /// - SeedShop
+ /// - Sewer
+ /// - Submarine
+ /// - Summit
+ /// - WizardHouse
+ /// - Woods
+ ///
+ /// The class does not yet support the following named locations, but consider adding support in future updates:
+ /// - "AnimalShop"
+ /// - "Backwoods"
+ /// - "BathHouse_Entry"
+ /// - "BathHouse_MensLocker"
+ /// - "BathHouse_WomensLocker"
+ /// - "Blacksmith"
+ /// - "ElliottHouse"
+ /// - "FarmGreenHouse"
+ /// - "Greenhouse"
+ /// - "HaleyHouse"
+ /// - "HarveyRoom"
+ /// - "Hospital"
+ /// - "JoshHouse"
+ /// - "LeahHouse"
+ /// - "LeoTreeHouse"
+ /// - "Saloon"
+ /// - "SamHouse"
+ /// - "SandyHouse"
+ /// - "ScienceHouse"
+ /// - "SebastianRoom"
+ /// - "SkullCave"
+ /// - "Sunroom"
+ /// - "Tent"
+ /// - "Trailer"
+ /// - "Trailer_Big"
+ /// - "Tunnel"
+ /// - "WitchHut"
+ /// - "WitchSwamp"
+ /// - "WitchWarpCave"
+ /// - "WizardHouseBasement"
+ ///
+ /// The class does not yet support the following IslandLocation location types, but consider adding support in future updates:
+ /// - IslandEast
+ /// - IslandFarmCave
+ /// - IslandFieldOffice
+ /// - IslandHut
+ /// - IslandShrine
+ /// - IslandSouth
+ /// - IslandSouthEast
+ /// - IslandSouthEastCave
+ /// - IslandWestCave1
+ ///
+ /// The class does not yet support the following IslandLocation named locations, but consider adding support in future updates:
+ /// - "CaptainRoom"
+ /// - "IslandNorthCave1"
+ /// - "QiNutRoom"
+ ///
+ public class DynamicTiles
+ {
+ // Static instance for the singleton pattern
+ private static DynamicTiles? _instance;
+
+ ///
+ /// The singleton instance of the class.
+ ///
+ public static DynamicTiles Instance
+ {
+ get
+ {
+ _instance ??= new DynamicTiles();
+ return _instance;
+ }
+ }
+
+ // HashSet for storing which unimplemented locations have been previously logged
+ private static readonly HashSet