Currently, here is the spawn header structure from the WorldStructs.xml file:
Code: Select all
<Struct Name="WS_SpawnStruct_Header" ClientVersion="1">
<Data ElementName="index" Type="int8" Size="1"/>
<Data ElementName="spawn_id" Type="int32" Size="1"/>
<Data ElementName="unknown" Type="int16" Size="1"/>
<Data ElementName="unknown2" Type="int32" Size="1"/>
<Data ElementName="unknown3" Type="float" Size="1"/>
<Data ElementName="unknown4" Type="int8" Size="1"/>
<Data ElementName="default_command" Type="EQ2_16Bit_String" Size="1"/>
<Data ElementName="max_distance" Type="float" Size="1"/>
<Data ElementName="group_size" Type="int8" Size="1"/>
<Data ElementName="group_array" Type="Array" ArraySizeVariable="group_size">
<Data ElementName="group_spawn_id" Type="int32"/>
</Data>
<Data ElementName="unknown6" Type="int32" Size="1"/>
</Struct>
Unknown4 is a "command count", which indicates the number of commands a ghost has. Each command has a max_distance, and is stored as two strings. I suspect this is where the language translation comes into play -- I am betting one of the strings is "send this to the server" and the other is "display this to the user."
Here is an example:
Code: Select all
2b Index
9c ef 3e 00 spawn_id
ff ff Unknown<16>
00 00 00 00 Unknown<32>
d7 b7 c8 a1 Unknown<16>
04 num_cmds
0e 00 62 75 72 6e 69 6e 67 20 65 6d 62 65 72 73 <15>burning embers
00 00 a0 40 max_distance
00 00 Unknown<16>
0e 00 62 75 72 6e 69 6e 67 20 65 6d 62 65 72 73 <15>burning embers
07 00 70 75 74 20 6f 75 74 <7>put out
00 00 a0 40 max_distance
00 00 Unknown<16>
07 00 70 75 74 20 6f 75 74 <7>put out
0c 00 72 6f 61 72 69 6e 67 20 66 69 72 65 <12>roaring fire
00 00 a0 40 max_distance
00 00 Unknown<16>
0c 00 72 6f 61 72 69 6e 67 20 66 69 72 65 <12>roaring fire
09 00 77 61 72 6d 20 66 69 72 65 <9>warm fire
00 00 a0 40 max_distance
00 00 Unknown<16>
09 00 77 61 72 6d 20 66 69 72 65 <9>warm fire
09 00 77 61 72 6d 20 66 69 72 65 <9>warm fire
00 00 a0 40 max_distance
00 1b 09 4d 90
46 00 00 00 (70 bytes of zero-suppressed data follow)
ff 3e 5a 9c ... 7f 7f 7f 13 (zero-suppressed data)
14 00 4e 61 74 75 72 61 ... 65 61 72 74 68 <20>Natural Stone Hearth
00 00 00 00 00 00 00 00 Unknown<32*2>
00 Unknown<8>
00 00 <0>
00 Unknown<8>
After the commands comes the default command's length<16> and string, its max_distance, and then 5 unknown values.
Next is a zero-suppressed "Substruct_SpawnVisualizationInfoStruct" structure. I've not started looking into this just yet.
Then follows the "footer" portion, as far as I can tell exactly as it should be.
Interesting to note is that some of the ghosts have a default command but no command list. This seems normal. Some have a default command and a list of 2 or more commands. Once again, normal. However, some have only one command listed, which is identical to the default command. I wonder why...