import pymem

pm = pymem.Pymem(43084)
base = 0x7ff6afc20000
igs = pm.read_ulonglong(base + 0x4430108)
area = pm.read_ulonglong(igs + 0x290)
if not (0x10000 <= area <= 0x7fffffffffff):
    area = pm.read_ulonglong(igs + 0x2a0)

print(f"AreaInstance: {hex(area)}")
data = pm.read_bytes(area, 0x2000)
keywords = ['ritual', 'breach', 'shrine', 'delirium', 'boss', 'pit', 'deserted', 'checkpoint', 'marker', 'icon', 'poi', 'tracker', 'objective']

for off in range(0, 0x2000, 8):
    val = int.from_bytes(data[off:off+8], 'little')
    if 0x100000000 <= val <= 0x7fffffffffff:
        try:
            raw = pm.read_bytes(val, 64)
            s_asc = raw.split(b'\x00')[0].decode('ascii', errors='ignore')
            if len(s_asc) >= 4 and s_asc.isprintable() and any(k in s_asc.lower() for k in keywords):
                print(f"+0x{off:x} -> {hex(val)}: ASCII \"{s_asc}\"")
            s_u16 = raw.split(b'\x00\x00')[0].decode('utf-16le', errors='ignore')
            if len(s_u16) >= 4 and s_u16.isprintable() and any(k in s_u16.lower() for k in keywords):
                print(f"+0x{off:x} -> {hex(val)}: UTF16 \"{s_u16}\"")
        except:
            pass
