diff --git a/Pal.Client/Pal.Client.csproj b/Pal.Client/Pal.Client.csproj
index b5fd1f1..e02eb36 100644
--- a/Pal.Client/Pal.Client.csproj
+++ b/Pal.Client/Pal.Client.csproj
@@ -3,7 +3,7 @@
net7.0-windows
11.0
- 2.1
+ 2.2
enable
diff --git a/Pal.Client/Plugin.cs b/Pal.Client/Plugin.cs
index a7ec563..8385f7b 100644
--- a/Pal.Client/Plugin.cs
+++ b/Pal.Client/Plugin.cs
@@ -14,7 +14,6 @@ using ECommons.SplatoonAPI;
using Grpc.Core;
using ImGuiNET;
using Lumina.Excel.GeneratedSheets;
-using Pal.Client.Net;
using Pal.Client.Scheduled;
using Pal.Client.Windows;
using Pal.Common;
@@ -613,7 +612,7 @@ namespace Pal.Client
private IList GetRelevantGameObjects()
{
List result = new();
- for (int i = 246; i < Service.ObjectTable.Length; i++)
+ for (int i = 0; i < Service.ObjectTable.Length; i++)
{
GameObject? obj = Service.ObjectTable[i];
if (obj == null)
@@ -621,6 +620,7 @@ namespace Pal.Client
switch ((uint)Marshal.ReadInt32(obj.Address + 128))
{
+ // traps as seen through pomander of sight
case 2007182:
case 2007183:
case 2007184:
@@ -628,16 +628,37 @@ namespace Pal.Client
case 2007186:
case 2009504:
result.Add(new Marker(Marker.EType.Trap, obj.Position) { Seen = true });
- break;
+ continue;
+ // hoard coffer, one is through pomander of intuition, the other as visible coffer
case 2007542:
case 2007543:
result.Add(new Marker(Marker.EType.Hoard, obj.Position) { Seen = true });
- break;
+ continue;
+ // silver coffer, visible
case 2007357:
result.Add(new Marker(Marker.EType.SilverCoffer, obj.Position) { Seen = true });
- break;
+ continue;
+ }
+
+ // Even with a pomander of sight, the BattleChara's position for the trap remains at {0, 0, 0} until it is activated.
+ // Upon exploding, the trap's position is moved to the exact location that the pomander of sight would have revealed.
+ //
+ // That exact position appears to be used for VFX playing when you walk into it - even if you barely walk into the
+ // outer ring of an otter/luring/impeding/landmine trap, the VFX plays at the exact center and not at your character's
+ // location.
+ //
+ // Especially at higher floors, you're more likely to walk into an undiscovered trap compared to e.g. 51-60,
+ // and you probably don't want to/can't use sight on every floor - yet the trap location is still useful information.
+ //
+ // For reasons unknown, you typically have more BattleChara for traps than actual traps on the floor,
+ // this may be traps in inaccessible rooms.
+ if (obj is BattleChara bc && (bc.NameId == /* potd */ 5042 || bc.NameId == /* hoh */ 7395) && obj.Position.Length() > 0.1)
+ {
+ var m = new Marker(Marker.EType.Trap, obj.Position) { Seen = true };
+ if (!result.Contains(m))
+ result.Add(m);
}
}