I think if possible it would look much better to show the pages as grayscale palettes
I'll probably do that. The rainbow effect makes my head hurt, it was just a temporary way to see how it all worked. Makes me wonder how other BPP images work with tex pages though. are 16-bit images limited to 64x256?
Do you think atlases are helpful?
I honestly think atlases are great. Using them with a fixed function pipeline isn't good though, since you're mixing two things that really shouldn't go together, convenience and optimization. I control mine with a shader, by passing the texture 'x div w, y div h, w and h' in an array. That way I can generate/modify the texture coordinates, and since it's done in a vertex shader it's pretty fast too. I don't lose wrap functionality since I can control how the texture coordinates act with atlas parameters, like clamp or wrap or even more advanced modifiers like hscroll/vscroll. It's not really worth it if you're only using one or two textures, but if you've got more than a hundred in one scene it can be a real benefit, and it saves performance for even more shaders.
I think the best thing about them is being able to batch all static geometry into a few meshes, it's great for things like the KF2 tilemaps, since I can put them into chunks of 8x8 tiles and render the scene a lot more efficiently.
I'm so accustomed to SOM I forget that it combines objects/items into one. But I looked a number of the models in ITEM.T and I don't think I ever once came across an object looking one.
My mistake. Unfortunately finding out more about KF2 made some of the old data I'd collected invalid. I'm now 100% sure about both T Files, the texture data and static 3D models. But other data from the past should be double checked before committing to it. This is very much a massive puzzle, where one wrong piece may fit, but it'll make another hundred or so not until you figure out where you messed up.
I'd really like to get some more work done on the MO format, but I can't figure out what you were talking about with the deltas. Would you mind answering a few questions on them? Of course I don't think it will do much good until we figure out the rest of the header, and how exactly it works but it would be another step in the right direction. I'm feeling confident about the reversing so far, with the recent progress; and cracking the MO format really would be a cherry on top of the cake.
I think I remember looking at the RTIM.T files and thinking that they lined up. But for ITEM.T I'm not seeing any patterns. If your TPN values seem to match, please list a few for the first few models in ITEM.T.
Your textures are going to the right places, based on their TIM values. Looking over them, most of them don't have the same addresses, and when they do, they are almost always palette swaps. I've see the moon and clouds have the same address.
It seems to me that the RTIM file within FDAT.T is dumped into VRAM and doesn't get modified. Certain pages are definitely reserved for certain parts of the game, rather than data being all over the place. TPage 31 is reserved for the text images, which I don't think is too important. Honestly I think any good KF2 port would have to be re-translated or at the least brushed up, I think it's a great game but the Engrish drives me insane. Honestly though I can't actually recall seeing that cloud in game anywhere, it might've been intentionally overwritten with the moon.
As requested, unless you meant the texture coordinates, but if you need those for reference just multiply 64 by the index for the x. The Y will be less than 256.
TPNs:
Dagger (File_0 in ITEM.T): TPage # 10
Short Sword (File_1 in ITEM.T): TPage # 10
Knight Sword (File_2 in ITEM.T): TPage # 11
All of the other items are either 10 or 11 as the TPage, and every single texture is stored in memory at once.
Honestly I found that trying to load TMD data by writing out the packet structure yourself never works out quite right, so if you haven't gone low level with it yet I'd suggest it. I've taken to actually splitting the control flags and branching for each property, ever since I did TMD data has loaded a lot more effectively, and the code re usability increases by a large margin, since there's only 4 paths instead of however many primitive types there are. I think it could be made into just two as well. As a bonus, there's no worry of unknown primitives either.