Around Thursday evening I reached the end-phase of a play-through of Suikoden that I was doing so I could test the Suikoden II save import. After completing Shasarazade, I decided I didn't want to spend a couple of hours manually sharpening weapons or using debug codes to get people in the state I wanted. I'd rather write a save-game editor so I can just click a few buttons and make people level 20 or level 99 with all the bells and whistles. Then I can test whatever scenarios I like quickly and easily.
I opened up the memory card file, thought about just grabbing the data I needed, and writing an editor for that alone, but it occurred to me that it would be useful to have a library for parsing memory cards. I went looking on Google, and finding none, decided to write my own. It isn't too difficult to parse them, and I got to the point where I had all the data streaming in and encapsulated in useful containers fairly quickly. Then I decided I'd like to try snagging the save icons and drawing them to the screen just to see how it looked.
I dragged out the old Windows snippets and documentation, and compiled the raw frames and palette data into device-independent bitmaps in memory, drew them to the screen, and was greeted by nothing by black squares. "What the hell," I thought, "I must have not copied in the data correctly." So I watched in the debugger and nothing seemed wrong. I added a few functions to retrieve the data back from the drawing area, and nothing looked amiss. I haven't done this for a while, so I thought maybe something had changed or been deprecated and started looking for samples and references and different methods. I could load bitmaps from files just fine, but nothing I did with the data from the memory card would produce anything but black squares.
I was losing my mind. I dragged out the Petzold Bible for the Win32 API, combed over MSDN, did dozens of Google searches, swore loudly, and contemplated various murders. Then, just as I was about to quit "forever", which might be as long as a couple of weeks, I looked at the code I'd written for compiling the palette, and realized I'd mapped the color values without any modification. Sony handles color values a little differently, so the difference between setting red to 1 and 2 is about 8 times more significant on a Playstation. It also means the maximum value for a color channel is 1/8th what you'd see on Windows and elsewhere. Setting the palette up that way, the best I could hope for is somewhere between a muted blue barely distinguishable from black, and a deep brownish color similarly close to black. If the icons were 1920x1080, I might have seen the different shades, but at 16x16, it's just black. I spent a total of maybe 12 hours trying to figure this out over the last few days, and the entire problem was, "don't forget to multiply, stupid."