I HAVE MADE PROGRESS. I am nowhere near the point where I can start implementing my desired changes, but I have started to understand how to piece together images from the information in this ROM. As before there are no spoilers for the game, I am purely looking at assets.
The big breakthrough was realizing I have been operating on a completely false premise. (The other big breakthrough was figuring out how to modify matrix width in CrystalTile2.)
In my last post I mentioned that I was able to view the Ghost Trick logo with the “GBA 4bpp” tile form, so I used that tile form to try and look at the rest of the data on it.
Boy howdy was that a huge mistake. I think that image in particular might have been made for that tile form [possibly as a preview image or something, not going to worry about it], but uh, everything else? Well, it turns out... not so much.
I was taking another look at the content right below that logo because it looked promising but refused to actually turn into anything obvious:
And on a hunch, I decided to just... toggle the tile form to something else. I tried GBA 8bpp. And.... immediately felt like an idiot. Lo:
It’s a bit out of order, but that is CLEARLY text... and what’s more? I scrolled down to the other patterns I was looking at before, which had previously looked like this:
...however, with the GBA 8bpp tile form, suddenly all that visual gibberish became CLEAR BLOCKS AND LINES OF SOLID COLOR:
LOOK AT THIS!!!!
Sure it’s still completely unintelligible, but there are distinct patterns and, more importantly, BIG BLOCKS OF COLOR which is what one would expect for actual sprites and not just garbage data. I spent a very long time experimenting with matrix sizes (or in other words, how many tiles until it starts drawing the next line of tiles) in order to get the blocks to line up in ways that revealed actual shapes. It became clear that there WERE patterns, and some things I could almost recognize, but I was still completely unable to get any clear images of any particular objects. I eventually came to accept that the tiles are absolutely not in order and that I was going to have to figure out how to manually put them in the order they should be. That... would be a massive undertaking, but I decided to start with Literally Anything that I could - by some amount of matrix tweaking - get to approximate an image.
I went with this. The first brown pixel is located at 4E2D600, and it must be viewed at a matrix width of 208 tiles to get anything resembling an image (enormous, considering the width of the brown area is 65 tiles...)
(I named the file “animationquestionmark” because I thought maybe it was showing, like, frames of animation somehow.... but, that was not the case.) There were obvious vertical sections, so i started isolating them:
When put all back together I got two images:
At this stage, it became clear that there were HORIZONTAL cross-sections as well. So I set to work splicing them back together line by line:
....there it is. AN IMAGE. The palette is wrong, but THAT RIGHT THERE is A COMPLETE IMAGE assembled from accessible data in the ROM.
Going to just... appreciate this some more:
No, it’s not the image I was looking for, but it IS a win. This tells me that even if the tiles are out of order, if I can determine what the original order was, then I’ll be able to re-write them to hard code new/different images in their place.
Here’s a visual breakdown of the transformation (if you can read the tiny numbers):
So the key to transforming the tiles into the correct order, is first determining the matrix width (in this case, 208; basic experimentation implies it won’t be the same across the board, because of course not), and then once you have everything grouped together like this, you select 2 tiles, skip the next 2, select 2 more, skip the next 2, etc etc for the full width of the matrix, then the next line is filled with the tiles you skipped.
I have a lot of questions... first, are there any common matrix widths to make going through all this easier (I sincerely hope so); second, is there a straightforward way within CrystalTile 2 to “automate” this (it’s possible but not holding my breath); third, are all of the assets in the form of “choose two skip two” or does that vary (I sincerely hope not); finally, now that I know there ARE images in here, can I find the particular asset I’m actually looking for?
I don’t know. Now that I’ve done this much, though, I think it’ll make it easier to find other things since I know what sort of weird algorithm is required to put the images back together. I know I’m not looking for a complete image, but a group of pixels that resemble something if organized a certain way.
This isn’t going to be easy, but it is starting to look possible, and that’s a lot better than where I was just a couple days ago. :)