For 40d11, the CreatureVector so far has always been at 0x093016b0, which so far has always been .bss + 0x00af96b0. The .text segment starts at 0x08048000, and .bss at 0x08808000.
For most of the creatures, I can follow the chain to a string representation of the creature name:
CreatureVector:
.Start: [0x093016b0 (.bss + 0x00af96b0)] = 0x0a009ca8
.End : [0x093016b4 (.bss + 0x00af96b4)] = 0x0a00a05c
.Count: (0x0a00a05c - 0x0a009ca8) / 4 = 237
[0] : [0x0a009ca8] = 0x09d2a7e0
[233] : [0x0a00a050] = 0x0a11c840
At 0x09d2a7e0:
.FirstName = [0x09d2a7e0 + 0x00] = 0x09e3b784 -> TOAD\0
At 0x0a11c840:
.FirstName = [0x0a11c840 + 0x00] = 0x0a11bb64 -> CAVE_SWALLOW_MAN\0
.LastName = [0x0a11c840 + 0x38] = 0x0a11f5b4 -> cave swallow man hatchlings\0
.Profession = [0x0a11c840 + 0x88] = 0x088075bc -> NULL
.Race = [0x0a11c840 + 0x8c] = 0x088075bc -> NULL
The offsets I'm pulling from the memory layout used by 40d11 under Windows, but I'm 99% sure it's not right, for two reasons: a) the Race offset appears to be a pointer which is almost always NULL, but in rare cases points to a string, while I expected it to be an integer, and b) not one creature in the whole vector has a Race value matching the dwarven race index.
As far as the strings go, so far the short ones appear to point directly at a NULL-terminated char array, but I don't see anything near that address that looks like a string, and for longer ones (presumably the Dwarf names) the data doesn't make much sense. I know where the dwarf nicknames are in memory but I've tried following pointers from the nickname backwards and from the creature vector forwards and they never seem to meet in the middle.
I'll try to find somewhere to host my memory dumps, as I don't see a way to attach data to these posts.
--Mike