uint16 numblocks = read16()
uint16 numentries = read16()
uint32 filesize = read32()
uint32 zero = read32()
uint32 blockoffsets[numblocks]
uint32 tableoffsets[numblocks][numentries]
uint16 charcounts[numblocks][numentries]
uint16 textflags[numblocks][numentries]
string texts[numblocks][numentries]
for i from 1 to numblocks
blockoffsets[i] = read32()
for i from 1 to numblocks
seek(blockoffsets[i])
uint32 blocksize = read32()
for j from 1 to numentries
tableoffsets[i][j] = read32()
charcounts[i][j] = read16()
textflags[i][j] = read16()
for j from 1 to numentries
$encchars = [0]
$decchars = [0]
$string = texts[i][j]
seek(blockoffsets[i] + tableoffsets[i][j])
for k from 1 to charcounts[i][j]
$encchars.append(read16())
$key = $encchars[-1]
while $encchars
$decchars.append($encchars.pop() ^ $key)
$key = (($key>>3)|($key<<13))&0xFFFF
while $decchars
$char = $decchars.pop()
if $char is 0xFFFF
break
else if $char == 0xFFFE
$string += "\n"
else if $char == 0xF000
$string += SPECIAL($char)
else
$string += unichr($char)