So, out of a sense of masochism I'm in the process of trying to find the structure in D3 memory for mapping known ids for things like LevelArea names (i.e. 0x4deb for A1_trOUT_NewTristram) to the translated strings that come out of the StringList SNOs (i.e. "New Tristram" for en_US).
The StringList SNO structure is pretty simple, and gets the map from "A1_trOUT_NewTristram" to "New Tristram", just using string1Ptr -> string2Ptr in the following struct:
Code:
typedef struct {
uint32_t string1Ptr;
uint32_t unknown_004;
uint32_t string1Offset;
uint32_t string1Length;
uint32_t string2Ptr;
uint32_t unknown_014;
uint32_t string2Offset;
uint32_t string2Length;
uint32_t string3Ptr;
uint32_t unknown_024;
uint32_t string3Offset;
uint32_t string3Length;
uint32_t string4Ptr;
uint32_t unknown_034;
uint32_t string4Offset;
uint32_t string4Length;
uint32_t unknown_040;
uint32_t unknown_044;
uint32_t unknown_048;
uint32_t unknown_04C;
} StringListEntry_t;
What I'm having a really hard time finding a static pointer for, is the 0x4deb -> "A1_trOUT_NewTristram" portion.
If you scan for that string (or any other non-localised string) in memory, you can easily find a linked list of nodes that look like this:
Code:
typedef struct {
uint32_t type;
uint32_t entryId;
char name[128];
uint32_t unknown_1;
uint32_t unknown_2;
uint32_t unknown_3;
uint32_t prevPtr;
uint32_t nextPtr;
} fooNode_t;
where LevelArea seems to have type 0x16, and in my example entryId would = 0x4deb.
The problem is that if you traverse back to the head of this list (entry type 0x1, id 0x131, "a2dun_spider_web_cloth_round_A" if you have just zoned in on the first A1 quest), there doesn't seem to be any structure to latch onto, and nothing nearby seems to be linked to by any of the map entries (scene, actor, acd, etc) in the object manager (that I've been able to find, anyway).
Has anyone else looked into this at all, or is everyone just dumping this linked list once every patch and leaving it hardcoded?