diff --git a/RemoteAgents/AgentDeepDungeonStatus.cs b/RemoteAgents/AgentDeepDungeonStatus.cs
index f40c1b9..8900cc6 100644
--- a/RemoteAgents/AgentDeepDungeonStatus.cs
+++ b/RemoteAgents/AgentDeepDungeonStatus.cs
@@ -4,16 +4,31 @@
namespace LlamaLibrary.RemoteAgents;
+///
+/// Remote agent for tracking the player's Deep Dungeon status, progression, and state.
+/// Handles accessing variables and vtable pointers specific to Deep Dungeons (such as Palace of the Dead, Heaven-on-High, and Eureka Orthos).
+///
public class AgentDeepDungeonStatus: AgentInterface
{
+ ///
public IntPtr RegisteredVtable => AgentDeepDungeonStatusOffsets.VTable;
private static AgentInterface? _instance;
+ ///
+ /// Gets the raw Agent ID of the Deep Dungeon status agent.
+ ///
public static int IdRaw { get; } = AgentModule.FindAgentIdByVtable(AgentDeepDungeonStatusOffsets.VTable);
+ ///
+ /// Gets the singleton or active instance of the remote agent.
+ ///
public static AgentInterface Instance => _instance ??= new AgentDeepDungeonStatus(AgentModule.AgentPointers[AgentModule.FindAgentIdByVtable(AgentDeepDungeonStatusOffsets.VTable)]);
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentDeepDungeonStatus(IntPtr pointer) : base(pointer)
{
}
diff --git a/RemoteAgents/AgentGoldSaucerInfo.cs b/RemoteAgents/AgentGoldSaucerInfo.cs
index 20c9be5..b725052 100644
--- a/RemoteAgents/AgentGoldSaucerInfo.cs
+++ b/RemoteAgents/AgentGoldSaucerInfo.cs
@@ -5,11 +5,19 @@
namespace LlamaLibrary.RemoteAgents
{
+ ///
+ /// Remote agent for the Gold Saucer information tracking system.
+ /// Manages client-side state and data queries relating to Gold Saucer currencies, stats, and mini-games.
+ ///
public class AgentGoldSaucerInfo : AgentInterface, IAgent
{
+ ///
public IntPtr RegisteredVtable => AgentGoldSaucerInfoOffsets.VTable;
-
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentGoldSaucerInfo(IntPtr pointer) : base(pointer)
{
}
diff --git a/RemoteAgents/AgentHousing.cs b/RemoteAgents/AgentHousing.cs
index 65d3631..8b509c8 100644
--- a/RemoteAgents/AgentHousing.cs
+++ b/RemoteAgents/AgentHousing.cs
@@ -5,12 +5,19 @@
namespace LlamaLibrary.RemoteAgents
{
+ ///
+ /// Remote agent for the main housing interface and system state.
+ /// Manages client-side interaction with general housing features, purchase windows, and estate setup.
+ ///
public class AgentHousing : AgentInterface, IAgent
{
+ ///
public IntPtr RegisteredVtable => AgentHousingOffsets.VTable;
-
-
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentHousing(IntPtr pointer) : base(pointer)
{
}
diff --git a/RemoteAgents/AgentHousingSelectBlock.cs b/RemoteAgents/AgentHousingSelectBlock.cs
index 210c4aa..c4c136d 100644
--- a/RemoteAgents/AgentHousingSelectBlock.cs
+++ b/RemoteAgents/AgentHousingSelectBlock.cs
@@ -6,21 +6,38 @@
namespace LlamaLibrary.RemoteAgents
{
+ ///
+ /// Remote agent for the housing ward selection interface.
+ /// Manages the housing ward selection UI, tracking selected ward numbers and plot status data.
+ ///
public class AgentHousingSelectBlock : AgentInterface, IAgent
{
+ ///
public IntPtr RegisteredVtable => AgentHousingSelectBlockOffsets.VTable;
-
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentHousingSelectBlock(IntPtr pointer) : base(pointer)
{
}
+ ///
+ /// Gets or sets the selected ward number index.
+ ///
+ /// The zero-based ward index in the housing area selection.
public int WardNumber
{
get => Core.Memory.Read(Pointer + AgentHousingSelectBlockOffsets.WardNumber);
set => Core.Memory.Write(Pointer + AgentHousingSelectBlockOffsets.WardNumber, value);
}
+ ///
+ /// Reads the status of housing plots for the selected ward block.
+ ///
+ /// The number of plots to read status for (usually up to 30 or 60 depending on ward size/subdivision).
+ /// A byte array representing plot availability/purchase status in the current ward block.
public byte[] ReadPlots(int count)
{
return Core.Memory.ReadArray(Pointer + AgentHousingSelectBlockOffsets.PlotOffset, count);
diff --git a/RemoteAgents/AgentMinionNoteBook.cs b/RemoteAgents/AgentMinionNoteBook.cs
index 0b2a979..d598f30 100644
--- a/RemoteAgents/AgentMinionNoteBook.cs
+++ b/RemoteAgents/AgentMinionNoteBook.cs
@@ -9,17 +9,32 @@
namespace LlamaLibrary.RemoteAgents
{
+ ///
+ /// Remote agent for the Minion Guide (Notebook) interface.
+ /// Manages the display and querying of acquired minions and their names.
+ ///
public class AgentMinionNoteBook : AgentInterface, IAgent
{
+ ///
public IntPtr RegisteredVtable => AgentMinionNoteBookOffsets.VTable;
+ ///
+ /// Gets the raw memory address of the minion list.
+ ///
public IntPtr MinionListAddress => Pointer + AgentMinionNoteBookOffsets.AgentOffset;
-
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentMinionNoteBook(IntPtr pointer) : base(pointer)
{
}
+ ///
+ /// Retrieves the list of currently owned or displayed minions from game memory.
+ ///
+ /// An array of representing the player's minion notebook list.
public MinionStruct[] GetCurrentMinions()
{
var address = Pointer + AgentMinionNoteBookOffsets.AgentOffset;
@@ -28,6 +43,11 @@ public MinionStruct[] GetCurrentMinions()
return Core.Memory.ReadArray(address1, (int)count);
}
+ ///
+ /// Resolves the in-game name of a minion by its database index.
+ ///
+ /// The internal database or row index of the minion companion.
+ /// The UTF-8 string name of the minion, or an empty string if not found.
public static string GetMinionName(int index)
{
var result = Core.Memory.CallInjectedWraper(AgentMinionNoteBookOffsets.GetCompanion, index);
@@ -35,12 +55,21 @@ public static string GetMinionName(int index)
}
}
+ ///
+ /// Represents a 4-byte memory mapping for a minion entry in the player's collection.
+ ///
[StructLayout(LayoutKind.Explicit, Size = 0x4)]
public struct MinionStruct
{
+ ///
+ /// The unique ID of the minion companion.
+ ///
[FieldOffset(0)]
public ushort MinionId;
+ ///
+ /// An unknown/alignment field.
+ ///
[FieldOffset(2)]
public ushort unknown;
}
diff --git a/RemoteAgents/AgentWorldTravelSelect.cs b/RemoteAgents/AgentWorldTravelSelect.cs
index 641330f..eefc743 100644
--- a/RemoteAgents/AgentWorldTravelSelect.cs
+++ b/RemoteAgents/AgentWorldTravelSelect.cs
@@ -9,45 +9,97 @@
namespace LlamaLibrary.RemoteAgents
{
+ ///
+ /// Remote agent for the World Travel selection interface.
+ /// Manages cross-world visit options and retrieves available target worlds.
+ ///
+ ///
+ /// In other regions, a skip logic (MaxSkip = 1) is used to filter out the player's home world from the target choices,
+ /// while for the Tencent version (RB_TC), no home world skipping is applied (MaxSkip = 0).
+ ///
public class AgentWorldTravelSelect : AgentInterface, IAgent
{
+ ///
public IntPtr RegisteredVtable => AgentWorldTravelSelectOffsets.VTable;
#if RB_TC
const int MaxCountOffset = -1;
-const int MaxSkip = 0;
+ const int MaxSkip = 0;
#else
const int MaxCountOffset = -1;
const int MaxSkip = 1;
#endif
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The memory address of the agent.
protected AgentWorldTravelSelect(IntPtr pointer) : base(pointer)
{
}
+ ///
+ /// Gets the ID of the current world the player is physically on.
+ ///
public ushort CurrentWorld => Core.Memory.NoCacheRead(ChoicesPointer + 0x4);
+
+ ///
+ /// Gets the pointer to the world choices data structure array.
+ ///
public IntPtr ChoicesPointer => Core.Memory.NoCacheRead(Pointer + AgentWorldTravelSelectOffsets.ChoicesOffset);
+ ///
+ /// Gets the ID of the player's Home World.
+ ///
public ushort HomeWorld => Core.Memory.NoCacheRead(ChoicesPointer);
+ ///
+ /// Gets the total number of worlds in the current logical data center/choices list.
+ ///
public int NumberOfWorlds => Core.Memory.NoCacheRead(Pointer + AgentWorldTravelSelectOffsets.MaxWorldOffset) + MaxCountOffset;
+ ///
+ /// Gets the collection of available worlds for cross-world travel.
+ ///
+ ///
+ /// Filters out the Home World in standard configurations using MaxSkip.
+ ///
public WorldChoice[] Choices => Core.Memory.ReadArray(ChoicesPointer + 0x8, NumberOfWorlds).Skip(MaxSkip).ToArray();
}
+
#if RB_TC
+ ///
+ /// Represents a world travel destination choice for the Tencent game client.
+ ///
[StructLayout(LayoutKind.Sequential)]
public struct WorldChoice
{
+ ///
+ /// The unique ID representing the destination game world.
+ ///
public ushort WorldID;
+
+ ///
+ /// An unknown field alignment/metadata value.
+ ///
public ushort Unk;
}
#else
+ ///
+ /// Represents a world travel destination choice.
+ ///
[StructLayout(LayoutKind.Explicit, Size = 0xC)]
public struct WorldChoice
{
+ ///
+ /// The unique ID representing the destination game world.
+ ///
[FieldOffset(0x4)]
public ushort WorldID;
+ ///
+ /// Gets the corresponding strongly-typed enum representation for the world ID.
+ ///
public World World => (World)WorldID;
}
#endif