The good and bad thing is there is not much to work with..

The data for a planet includes the following:

leading zeros (occasionally not blank, for certain homeworlds) but those characters have no obvious properties. I've changed them several times to no effect.

Planet size/type field. (changes planet type, sizes, and fields as seen above)

10 blank spaces (never used)

two pointers, little endian format, pointing to values exactly 15h or 21 values different.

Changing the pointers from one planet to another causes the game to lock up when that system is entered..

....

However, remember that in machine code, values are relative. Pointers usually say to "move down x positions, move up x positions" (to simplify a bit). Since each subsequent pointer is exactly 21 values apart, and each planet has EXACTLY 21 offsets, maybe they are all pointing at the same thing.

To correct that, all planets in the same system seem to be pointing at the same thing, move to a different system, and the pointers jump a bit.

Difference between 199,82 and 198,154
01E230 - 01E1C9 = 67h

Difference between 200,108 and 199,82
01E26E - 01E1F2 = 7ch

So each planet in the same system points to the same address? If the address increases in value from one planet to the next, my guess is it's pointing at either one fixed address per system above it, or each planet is pointing at a table below it that's different per planet and exactly 42 bytes in length.

I need to get to bed tonight, but what about taking the top planet in the table:

C7        B7        01        00        B8        01

And try moving either 01b7c7h / 112583 bytes above it? or take the second address and try moving 01b800 / 112640 bytes above that?

I'll play around with planet types this weekend, and I'll leave reverse engineering to Jason for now..