Again, I'm sorry if this has been explained before, but I thought it'd be good to still have a comprehensive guide on how to edit the title screen.
Not only is my goal to have a guide on how to do that, but also to cover all three de facto operating systems. All of this can be done for free on Windows, Linux and Intel Mac OS X, which I'll be using.
What you need:
and for Mac/Linux users, WINE
—A headered, verified good dump 1.0 (U) ROM of Yoshi's Island
—A Tile Editor
There are numerous tile editors, but I strongly suggest Tile Molester
—A graphics editor of choice.
One might suggest Adobe Photoshop, but for this, MS Paint is an equally powerful tool.
—A Hex Editor.
There are several, but the best one for Linux is Bless
, for Mac OS X it's 0xED
Windows users can debate on quite a few, but the most popular ones seem to be Translhextion
Begin by opening the image below in your graphics editor. If you have the chance, set up a grid of 8×8 pixels.
The green zones mean that the area can be mapped in its entirety with the tiles available in the graphics bank.
The purple zone means practically the same, but it's where the HDMA effect takes place, so plan around that. Regardless of what you put there will get the wavy effect like the original 'Yoshi's Island' text.
The darker parts in both color zones are just overlays of the original title screen's tiles (see this
Once you have a substantial plan
, start drawing your title screen. This is mine:
As you can see, I've kept and edited original graphics, but also done brand-new ones.
Bear also in mind that the title screen is 2bpp graphics, which means that we can not work with more than 3 colors + transparency. If you look at this
image, you'll notice that no tile breaks this 3-color rule.
I have also worked only with the colors used in the original title. We can edit those colors, but more on that later.
The way we'll get this physical image into the game itself is by a workflow of the following:
-Overwrite/edit appropriate graphics
-Set up the tilemap array to correspond your graphics and palettes
First off, decompress the graphics.
To ease things off, download decompress.bat
, a simple batch command file that can be used to decompress the graphics. To use this, you must have your ROM in the same folder as ycompress.exe. The ROM must also be named YOSHI.smc.
Windows users: Open the BAT file.
Mac users: Open the BAT file in WINE with an appropriate bottle. I used .winxp, and it works perfectly.
Linux users: I have never used a Linux distribution, so I do not know how to really work with them, but I am certain that you can run the file somehow with WINE. If anyone with Linux can give more info on this, I'd be glad to update this post.
Once you have your AllGFX.bin ready, do not open it in Tile Molester, but instead create a new Tile Molester document and set the size of the document to big enough, I used 64000. Be sure to set the codec to 16bpp RGB (565).
I apologize for some of the screenshots displaying false information. I accidentally used the 8bpp linear codec, but just imagine that it says "16bpp RGB (565)".
Then import your image into Tile Molester (Edit > Paste From...) and set the canvas to the appropriate size.
Once you're done, open your AllGFX.bin to Tile Molester as well.
After that, select "Palette > Import From > Another file..." and choose this
palette file. If you're not using Tile Molester, ensure your Tile Editor reads ZST files, at least.
Finally, head over to 0x6A400 and arrange the windows to a horizontal tile as shown in the image below.
Now begins a process where we remove most of the original tiles in the AllGFX file. What we WON'T remove are the things that we didn't remove while designing the new title either. These are the 'Super Mario World 2'-text and the (C)-symbol. Everything else goes. Well, almost. I will keep the special star graphics because they have a valid function. Eventually we'll get to this:
So now we're at a point where we've removed everything but the necessities. A thing you must also keep in mind is tile 22, which I've emphasized as a orange tile (Don't do this. Just keep it transparent). This tile must be left blank, as it serves as a transparent tile. Leave it as is; transparent.
So what we're going to do now is simple cut/pasting from the left window to the right one while keeping the correct palettes.
The trick here is to not have any duplicate tiles or mirrors of already-existing tiles. It might seem confusing but it will be worth it in the long run. We have so much to bring over, but so little room in the graphics page.
I'll start with the black/white/orange tiles. Setting the grid on might help some to concentrate.
This is how far I got:
Then I ran out of space. I had to sacrifice the "A ... -HACK" and the green stripe from the background. But that's what you get when you get too excited. We only have 128 tiles to work with. What a drag.
Regardless, save the AllGFX.bin.
Now to recompress the graphics back to the ROM.
file into the same folder with everything else. Running this will recompress the AllGFX file back to the ROM. Do it and check out the changes.
You should be left with a "What the hell man"
-feeling. But fear not, this is how it should look!
You see, whereas we've already inserted the graphics, the tilemaps must still be defined.
And thus begins the last step in this frustrating journey.
Open your Hex editor and head over to 0x7FE80 and set your row width to $40. You should see something on the lines of this
This might look confusing, but all in all it's a series of two-byte combos, each defining one tile.
Essentially what's being repeated is "tile to use, and property of it. tile to use, and property of it." over and over.
In the very beginning, you see only 22 27. I mentioned earlier that 22 is the tile that must be left untouched, and for this very reason. This is the 'empty' space tile. 27 however is 0010 0111 in binary, and that brings us to the property byte.
The property byte must be broken to bits to comprehend. The bits stand for the following:
If a bit is set, the property holds true:
v = vertical flip
h = horizontal flip
l = layer property(?)
p = palette bit
b = bank to use
For example, from 0x7FF08 starts a byte array of the following: 00 2B 01 2F 02 23 03 23 04 23 05 2B 06 2F 07 2F 08 23 09 2B 0A 2F, and it defines the upper part of the 'Super Mario World 2' text's tiles and palettes.
If you read every other byte, you'll notice it really says 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 0A. Exactly the tiles used by that part of the title.
But what about the properties? Break them all to binary and observe:
0010 1011 / 0010 1111 / 0010 0011 / 0010 0011 / 0010 0011 / 0010 1011 / 0010 1111 / 0010 1111 / 0010 0011 / 0010 1011 / 0010 1111.
For each unique palette is an unique bit combo on the ppp field. Maybe the image below will help you visualize.
But what we're really after here is replacing the title screen (new graphics, old tilemap) with ours (fixing the tilemap).
Carefully begin defining your tiles onto the field.
Tile 28 is the upper left corner of the "Y" in "Yoshi's", so that's where I'll begin. By comparing the byte array to the original sketch I made in Photoshop, I know where to put it.
Now, here I've defined a few of the new tiles, extended the "(C) 2010 Naulahauta" and kept the "Super Mario World 2"-text as is:
CLICK FOR MASSIVE IMAGE
What I've done through these images is looked at the hex editor's byte array, compared it to the new title in Photoshop, looked at Tile Molester's AllGFX and typed back in to the Hex editor the tiles to use. Through trial and error, I got it done.
Not much of palette defining was needed, but I did need to flip some tiles vertically and/or horizontally.
Nonetheless, the final product is here.
I understand that this guide may not help some, as it indeed is
kind of confusing, but if anyone has ANY questions, please ask. I'd be happy to help.