Quote from: Pennywise on April 07, 2011, 04:49:21 pm
Under normal circumstances, just a simple check for FF. However, the text I'm talking about is a little complicated and it doesn't appear to use an end of string control code. So far the only thing I've been able to determine that the non-text data starts when a value in the script is in the C0-E0 range then it will read a some more non-text data then without stopping it will switch the pointers. As an example we have $C2 $98 $01 $EB $03
As I mentioned before any value between C0-E0 seems to trigger the non-script data and $03 is how many pointers to skip to get to the desired pointer in the table. I haven't yet messed with other strings to see if after $C2, the end is 4 values away.
I did some more messing around and there's another control code that seems to correspond to presenting choices from you to pick from. The number of choices available is specified in the non-script data and so the more choices available, the longer the data.
As I mentioned before any value between C0-E0 seems to trigger the non-script data and $03 is how many pointers to skip to get to the desired pointer in the table. I haven't yet messed with other strings to see if after $C2, the end is 4 values away.
I did some more messing around and there's another control code that seems to correspond to presenting choices from you to pick from. The number of choices available is specified in the non-script data and so the more choices available, the longer the data.
It seems as though there is insufficient data to dump this properly even if you were to make a custom dumper. You need to figure out what those game commands are doing more specifically. You know the end result is a pointer switch, but you don't know exactly how that occurs. So, how would you be able to dump based only on what you know so far? It helps to examine the game code in these cases.
Whatever you discover is going to be pretty game specific. It would probably still need a custom dumper. The way I would envision something like this working in a generic tool is figuring out more about those data commands and sticking them in the table as linked entries. You just need to know how many bytes, if any, are associated with each and not necessarily what they all do. We just need to be able to parse properly and not falsely hit parameter bytes. Then define the few that change the pointer or end the string to the dumper. So basically, it will dump until it hits a defined linked entry. I think you need to know most of this to dump the script anyway using any tool unless you do it the way you have with lots of overlap and garbage.
These types of scripts with embedded game commands require the most knowledge about the text system to be able to dump and insert. You typically need to know enough to be able to extract only the text, or parse or skip the commands. Insertion can be even trickier without knowing more about the commands. In most cases for insertion I end up adding a new relocation control code in the original blocks where the original text was so I don't have to alter any of the game commands.