Saturn 15bpp tool tutorial

Malenko

Established Member
Saturn 15bpp tool (RAW to BMP and BMP to RAW)

A lot of graphics on other systems use 16bpp but Saturn is a little special and uses 15bpp.
When you open some Saturn tiles in programs like CrystalTile the image is there but it looks a little bit “off” Thats where these tools come in handy, they change the 15 bit tiles into usable bitmaps, then they can convert those bitmaps back into 15-bit data the Saturn can display.

Before we get started , let’s make sure we can use the software.
After downloading them from: https://github.com/DerekPascarella/Saturn-15bpp-Graphics-Converter


Extract them to a folder. Now we need to right click the files and go to properties to make sure
windows isn’t blocking them
AD_4nXcy1HBbNbPLnQqAw15YgEzXeaRUE2oHsQtLATUWPt7zOTPiZciikHbVjdIz-PncydIVqVGEJoCSArduwIhVYSC9aerW_WJhevWSC9EeSucgDq6hhmCvnLYBKgm-NPuV6VKMIfjC3qRclHoBRRt2FP59FqM


If this is on the screen, check “unblock” then hit OK.




Now, find your data. You can use the “Lets replace Saturn Graphics” tutorial to give you the basics; that’s not the point of this tutorial.

In the game “Logic Puzzle Rainbow Town” the title screen with the logo and text is located in TITLE2.SBM
Opening the file in a hex-editor will show you where all the header data is:
AD_4nXeYvnYbJryBPZsElOvFQk2OZ0I_ROAoWfQhgr5fXYsCpB9huJjgfeBUUHVFF04ZkdvFm0zuDU66fhrrWo6-_BtYSrOu8k-iG4hh_sDik7vImXpLTEGD3mAlhy33vsTly3q2LaPLcR9GUkHCiVY3urSsF1WV

You can see the actual image doesn’t start until 0X0220
For this game all the images are 240 pixels tall but the width value in at 0x01C , in this case its the hex value of 140, which is 320 in decimal

We can open the file in Crystal tile, set the dimensions to width = 320 and height to 240
Then we change the offset to 220, which is where the data started.
AD_4nXfRG495XALJa0BxJBci-zj5R8_iSUxCjobmFRA7OWX1j3m0XpzuelclDVsXkO2Ut_NuO2Z4u8Q5aoBJcjHq5WBFqe9tRu_hzF3qTLW-X6wUU56d0MJ9Y9fnXilqw0b5dMDt7P40OEd050gsuTa3k5gZUQk


It looks zany and I believe this is a quirk of CT, the fix is easy and just increase the offset by 1
The image should now look like this:
AD_4nXc60JXwGerxOxNvOqZANULGivTlRLIkrqq-S_vuGwUqWQjiZ7bgDpxsB5kwM51HjGn-BeKZfX6P3bYUu5RDG6wksLTLTNiTzcGonT-fYkhTNncfO4gsjF9aEXbaYpsgFbyXeDTWCZAegtb0-6DSepIlZ2p8



For reference, this is the in game title screen:
AD_4nXeE0g85McR-v9UJ1wHip42J0Z42M7NJZNhQ0iYMv9IcjDnL4OlMU10aArOUFgfffYO2HgdS3qvOTjzng_w-tMwtY6c8QDP_oOfrnEK_dub_Ai2fD1MCO4sNVi-T-jhfK29RopBzMSzMds620vNbglCzpM0


Just at a glance you can see the odd color banding especially on the rainbow and the map. This is an issue with how Crystal tile displays the 15 bit images from Saturn games. That’s part of the reason for this tool, you can't just paste into crystal tile directly, you need these tools to convert the data.

The 15bpp tool does a proper conversion of the data into a BMP. You can then edit the bitmap in your editor of choice, then reconvert the BMP back into 15bpp Saturn compliant data. The banding will reappear in crystal tile after the conversion.This is all done so the graphics display properly in game despite how they look in CrystalTile.

The first thing we need to do is copy out the RAW image data. We start by opening the file in a hex editor. I will be using wxMEdit, but they all basically function the same.

I will then go to position 0x0220 , then copy the data from there till the end of the file.
AD_4nXdLmcWqTBe4_nsy2mNhv96V6CblPyaV_hMOtSRU3t58knrz4Vyq92nhV_56g5cfeJEIpA8Jp7Nxd-Y1lEvMaHAlD1JNCVt28vYIUJ6k2iOotXLSsAUaHUMf3GvbTXfr9FmOqPUnpAtj6sY-3RRPWSjYXfY


Then paste into a new file:
AD_4nXco-KTSeVoLS7TjOMJMRDdh0HwQMUowzMjL74zZ1Hehiy6-l6OGCTps_r2xSW-yL2GgfRf1uub8aO_M9BtSuHjL-7o3VxOYirGtsnSyy0xiXFpaLEIqTLdaD4YErQQ6fBHRj46la_E9urZv2GCnjZKQ3aBq


This is the exact same data but excludes anything that isnt image data. In this particular case its just stripping out the header, but in other use cases it will basically isolate the image data you need from any other data like headers or other images.

I have saved the data as “TitleScreenRAW.bin”


For simplicity's sake I am putting the raw data, and the 2 15bpp executables in the same folder:
AD_4nXf_PLwowBCqM7qLbKAj1YV0bUkAV726HVTURl6K_gLZKUNyskiRn19z4epX1iqIMH5CK6iuM87vqel2CJvGiUDaUEOGBdv5oXpFZbPS712YeEQCWUVQ25WkyW18Bq4jLUttagVrbWuuXOcZqwUEzAe9XaU


Next we convert that raw data to a BMP that we can easily edit in a program like Photoshop.




Looking at the image in crystal, we can see we need to use the dimensions of 320x240
AD_4nXeuabfdFxDc2BQg0hMAHGyDmmanSKSTEJKXu3fxReR_UcINaG8mSV3xcTBzcmza_4YSgLz-Z4v67hvkgOSy7SoO07lHZAV7myZwQY6N3sJtc9VCj8xDeKQjnHEj9vV7yRFyJYsbFTUMXItednKwDFIEiRRp


Open a command prompt / powershell and run the following:
15bpp-2-bmp <15BPP_FILE> <WIDTH> <HEIGHT>
Or in our case:
AD_4nXe8H5XNKpoguHTILoMHFOUdVssOVv1JYEnV5FCftJ1DjrvVCUdSmiYR99VJF4h_2OxOFV8yk8oJYlpI1CAlrtxbkqQWqtxuHeVLryQkRRqQiXkL6CBXZHcOdFDYplDMRibXRFv4ME-158qtpPfbEQT141MI








That will output this BMP:
AD_4nXfUZL6nQurx6CkLiDxqLPDwWoGQ6jmLJBwL-cuLMa6FZf-z8wg6fgf6y7Cst3IoaoVopMunaQzank3WGJFn-OlEVZVVMClvqiQqqOabrYspsbAb0_DX0Muw0DK_cB2K1fqfKJN2meLHp20fil9zuDiUOKQ

Notice the file name is what we named the raw data with a BMP at the end and that the weird banding is gone.

We open that up in our favorite graphics editor, and create the replacement art:
AD_4nXdkCycNnMLQkp_wCx3u7IJt7WV1Md-rKHxuzUHPbTGjCyxL5-fYq8rVYmem898NaAuq6ZChD9OAD23l9ZR0JUGnE8RPAeAzgs7g7sX29qyo9GARCOjEXIW3ivK2QpgTSgU274fZHjTwaoLNkkpsxfw3puBp


This tutorial does NOT cover how to make art. Sorry, I’m not that good

If there is a dialog box about what format to save it into, select 24 bit for windows.

AD_4nXetrddFsTAOvmw0lultPwAGVq-IHO533om5vU9wkFvwRK1Du6S0GBuzDa2RtU1ug4xX1RvIE-mTSxOP958pEY9qg9wOWe3G9EiZF2e71ed7xnU2oDafMmX4t-xLV8hAVIaBSEbvs5r8nqn1NM6It3yYnKmT

In GIMP, you need to save as a 24-bit BMP with color space enabled

Use the other exe to convert the BMP back to RAW
AD_4nXdw_QmTv1jW_AsshXQgRSJw1Ok2ZXUZ6x8vQbWRumPpTlqDwZ4ojK7zwRrQDCUM9-9NCuLawHsatS6n9J3QlkDNVH41uNOht_02v9KmmHbjosiZ1RHYYq4BIPsNPXEKvttHpN0cm19oqLn8PUTW2bXObUk-



And open that up in CT to check it.
AD_4nXcIMKOGv-4JY0qp4wtRI0n-GSzEppCwREcbFtmHvkEyLAlTiOmr33ebGlnPi30EmH_nmOfTFaPUkzTf4QAQ3AnjUlz8TXtqXJzyqa9KjOvOw_qxxegakOzrt_acHWEsxHwuX9kj22HbbZHyQXbdyGyDg6zZ


As long as it looks ok, the next step is to copy that raw data in a hex editor….
AD_4nXc0dLurbUoDV9G7wyBEaR6WrDEgWUygKYPX4mPXA7ZAbDXN-3sELScrlNl5SITVUydDx1XzjW12SSVRTrn1GUfBWrauE5Co3gF6d_idqo57anV_tr8x88ljrGoJTWnuAupC3FagijzJkJKLQy9zsyiW2ULO


And Paste (with over writing) at 0x220 (because the header goes up to 21F)
AD_4nXcF_9rHFnGUtqGVvZBq8H-TjWNhzEXWVWmAqes94CAvwTfDnc5eELhkxvihs4Bd1TzGpLZGErbTl1D_cmN63Ev4T4FBZn4MDg62J8iQKu3toXKItsEWQokrHWruQTaui9mjSku1U2vSW5HiQ6enKRC0VVw_


After you save the edited file (I save in a folder called edited files, so I don’t lose the originals); you can inject it into the game and give it a test!
AD_4nXcRAQQ3kRRfgS-pwynYS7KTUiy1GMc-3m-nYvJD7EFmEtbvCWVmaxhuwAx6XTL38srmfllFKY2P5Fcnac25twGpwOFbT9b2VyvbZmIy_niS2yf_ZC6wxXRYwh12L1DSM8aw-LZ9T9eFV7YTpzp6uf1NcKnT


As long as it looks good, you are done. On to the next image!

To note, this is a tutorial by an end user of the software not the programmer. Any screen grabs may be of work in progress images (ie that’s probably not the final version of the title screen) use at your own risk, and good luck.
Also to note, this tool was used in both Jung Rhythm and Logic Puzzle with no issues, but YMMV.
 
Last edited:
So I just want to point out that the root cause of the issue here is that Saturn 15-bit RGB data is Big Endian vs the Little Endian that most other systems expect. So just swapping the endianness of the image data will make it look correct on your computer to edit it, and switching it back will make it look correct on Saturn.
 
So I just want to point out that the root cause of the issue here is that Saturn 15-bit RGB data is Big Endian vs the Little Endian that most other systems expect. So just swapping the endianness of the image data will make it look correct on your computer to edit it, and switching it back will make it look correct on Saturn.

Ah, very interesting! Thanks for sharing. Guess I went overboard in writing a dedicated tool to do conversion to/from BMP.
 
Back
Top