Added the ability to choose between the original Sonic 3 alone object layouts and the modified Sonic 3 & Knuckles object layouts.
Added the ability to view and export
Plane B (background) layouts.
Fixed a bug when exporting maps while Zoomed in.
Added the ability to use the underwater palettes.
What is Sonic Extractor 3&K Mix, and what does it do?
Presently, it is a simple programme designed for a single purpose - to assemble and export PNG images of the Sonic 3 and Sonic & Knuckles Zone Layouts, complete with objects.
How do I use Sonic Extractor to make a useful image?
If you'll bear with a brief explanation of the Mega Drive data format as used in Sonic 3 and Knuckles, then I will explain the steps involved in using Sonic Extractor to its fullest. It's rather simple, really, so let's get to it.
Mega Drive cartridges admittedly hold very little memory - Sonic 1's 8 megabit cart, for instance, could be copied onto a floppy diskette. So how do they fit all those colourful graphics on there? A 24-bit bitmap image of any one Zone is already enormously larger than the entire cartridge capacity, and even in PNG compression it comes close. So they resort to breaking the image into little repeating tiles and using them over and over in clever ways to avoid people outright noticing how few elements are actually in use.
The above is actually pretty common knowledge, but the interesting fact is that the Zones aren't simply broken into tiles in one stage, but there are several layers of complication at work. First the Zones are cut into 128x128 pixel chunks (in Sonic 3&K, at least - other games use other sizes), which are in turn cut into 16x16 pixel chunks, which are in turn cut into 8x8 pixel chunks, which are in turn cut into 64 individual pixels with a palette index determining the colour of each. So there is compression at every level.
Obviously, the designers do not work backwards. Within reason, I imagine they create the 8x8 tiles first, from their palette, then assemble them into larger 16x16 tiles (which start to look like something at this size, like entire Totem faces, or streetlamps), and then make 128x128 portions from these. Finally, the 128x128 mappings are arranged into the level.
So anyone hoping to recreate a Zone from the raw data in the Mega Drive ROM will need to do the assembly in these very same stages, and that's what Sonic Extractor does. But there's a little hitch.
In Sonic 3&K, and many other games, the 8x8 tiles are compressed using a wily method, named Nemesis by the hacking community after the one who cracked it. Sonic Extractor could never hope to decompress the Nemesis format with any acceptable speed, and so relies on a workaround. Mega Drive emulators already decompress the tiles into memory by sheer virtue of having loaded the Zone, and so a savestate will contain the tiles uncompressed, and ready for use by Sonic Extractor.
Sadly, this means the user must actually supply Sonic Extractor with a Gens savestate made in the Zone they wish to map, and not a single ROM file of Sonic 3&K. But it's a small price to pay for increased speed. [Note : In levels with a cycling palette, it is recommended to pause the game when the palette reaches the desirable point (streetlamps are fully on, for instance), and then make the savestate.]
Now that this is understood, the use of the programme itself will be described.
Step 1: Tileset
When Sonic Extractor opens, there are four button in the top right-hand corner of the window - Open, Export, Layout, and Help. The Help Button opens this very document, which can also be done by pressing F1. Only the Open and Help Buttons can be accessed at programme start. Should you attempt to click the Export or Layout Buttons, they will implore you to first load a savestate.
Press Open to access the Open Savestate dialog box. Navigate to the savestate you want to load, and open it. A file called "Angel Island.gs" is supplied with Sonic Extractor - you can use it to practise with.
The centre of the screen should begin filling up with 16x16 tiles, if the savestate is of a compatible Gens format (I've tested a bunch of different versions, and they all work, but I'd recommend using Gens+ 0.0.9.61, as it is the best version anyway). If it is not compatible, Sonic Extractor will do its best to warn you, but the check for this is not completely infallible. If you load an incompatible file that Sonic Extractor is fooled into accepting (which I imagine would be incredibly rare, as that file's initial bytes would have to represent the ASCII for "GST" as Gens savestates do), unexpected errors may occur.
Anyway, if all goes well, the tiles will begin filling in. While this is happening, you cannot do anything else, but I have tried to make it as speedy as possible. You can however, at any time, press the Space Bar to cut the Tileset short. You might want to do this if you discover that you have accidentally loaded the wrong savestate, or if the relevant tiles have already finished loading.
You see, every Zone has a different number of tiles, and whereas the programme runs until it fills the whole Tileset canvas, if you see a couple of blank lines go by you can be confident that all of the tiles in use for the Zone are already in memory and you can stop the process early, speeding it up further (you can also stop it even earlier, before all the tiles are on the canvas, and compile the zone with those tiles missing, but that would only be good for a lark, if anything).
Now that you have a Tileset, the four buttons in bottom right-hand corner of the screen, the Palette Buttons, will have been filled in with colours. These are all the colours used in the Tileset. You can edit them by clicking on them to bring up the standard Windows colour dialog. However, the Tileset will not change to reflect your modifications unless you manually refresh it. How do you do this? With the Tileset Menu - just Right Click anywhere on the screen to bring it up.
"Change Background Colour" : Allows you to pick a colour of your choice, using the standard Windows colour dialog. Sometimes the default background colour from the Zone's own palette is just too dark for a pleasing map, and might need to be changed.
"Default Background Colour" : Returns the background colour to the original hue from the palette (the first colour on the third Palette Button down).
"Use Underwater Palette" : Recompiles the Tileset using the underwater palette found in the savestate. Only Angel Island, Hydro City, Carnival Night (Act 2), Ice Cap (Act 2), and Launch Base (Act 2) have water in them. Clicking this options also sets a flag so that the Objects in the Layout will be shown using the underwater palette, but some objects that are never below the water level in the real game will not reflect this (such as Robotnik Bosses). Using the “Recompile Tileset” option or opening a new savestate will reset this flag, so the Objects will be shown using their normal palette.
"Load Palette" : Allows you to open any ".tpl" palette file (the format used in the useful programme, Tile Layer Pro). The Tileset will immediately recompile using the new palette data.
"Save Palette" : Simply exports the palette in memory to a ".tpl" file.
"Recompile Tileset" : Does just what it says. Any modifications you've made to the palette using the Palette Buttons will be taken into account.
Should you choose to use this Tileset image in another programme, or just hang it on your desktop wallpaper for its inherent chaotic beauty, you can press the Export Button and export the image to a location of your choice. Otherwise, press the Layout Button, and it's on to Step 2 for you.
IMPORTANT NOTE: As of version 1.2, before moving on to the Layout Page, you will be prompted to choose between the original Sonic 3 alone object layout, or the modified Sonic 3 & Knuckles object layout (only for the 6 zones common between the two games, of course). When Sonic & Knuckles is locked on to Sonic 3, many of the objects have their positions revised. When you are met with the confirmation prompt, press “Yes” for the Sonic & Knuckles object layouts, or “No” for the unrevised Sonic 3 object layout. These object layouts can be selected irrespective of the game the savestate is from. Object layout data is NOT stored in Sonic 3 or Sonic 3 & Knuckles savestates – Sonic Extractor has the object layouts built-in. Therefore, if you load a savestate you made with Sonic 3, the object layout will still be the modified Sonic 3 & Knuckles version if you do not specify otherwise.
Step 2: Layout
You should be immediately met with a pretty faithful reproduction of the Zone you know and love from the Mega Drive.
By using the cursor keys, you can scroll through the Zone in 128 pixel chunks. Press Page Up to hop to the top of the Layout, and Page Down to hop to the bottom. Pressing Home and End will take you to the horizontal extremes of the Layout. Press Space Bar to zoom in and back out.
You may also use the Mouse to great effect on the Layout Page. Hover over any object (it will be highlighted blue when your cursor encounters it) to see a readout of its location in the upper left corner. Left-click drag an object to move it to a new location. This might be necessary in a number of cases. Though I have done my best to make the objects appear as faithfully as possible, some moving objects, such as Badniks, are always shown in their spawning location. Sonic games think nothing of spawning Badniks in the air, or even embedded in the ground, and then letting their own movement code snap them to a more favourable position before Sonic comes across them. So for someone making a map, some Badniks will almost surely need to be moved to better positions, and that is why I included the drag feature. However, should you regret where you have moved an object, just Right Click it to bring up its menu, and select "Restore Position" - it will obligingly return to its spawning location.
Other options on the object's Right Click menu include "Show", "Hide", "Show Type", and "Hide Type". Show and Hide turn the individual object on and off, so that it won't be visible upon export of the Zone Map. A shadow is left behind when you Hide the object, just so you can find it again to Show it, should you want to. But that shadow will not be seen on the final map or screenshots. Showing or Hiding Type does the indicated action for every object of the same type as the one you clicked - so that if you should feel it is not necessary to depict Angel Island's fires, Hydrocity's drips, or even Rings, on your final map, you can turn them all off easily. Remember, however, that object types may not be the same, even if they look the same. For instance, platforms may look identical, but exhibit distinct behaviour in the running game. This is undetectable on a map, of course, but bear in mind that if you Hide Type for a platform and they all don't obediently disappear, this is probably what is happening.
Next are "Flip Horizontal", "Flip Vertical". These simply reverse the image for that one object from left-to-right and from top-to-bottom, respectively. You can click "Restore Orientation" to return the object to its default appearance.
The final option on the object's Right Click menu is "Layer". You can choose between three layers - Back, Middle, and Front. This is because objects don't know which layer to be on (the data is just not accessible from the savestate, I'm afraid). For the most part, though, all objects are sandwiched in-between the low and high plane of the Zone tiles, but in some cases you may feel like changing the layer of the object to more accurately reflect the image as seen on the Mega Drive itself.
There is a second Right Click menu available in the Layout page, and it is accessed by Right Clicking on a blank area (i.e. not on an object). The first four options here are "Export Zone Map as BMP", "Export Zone Map as PNG", "Save Screenshot", and "Specify ImageMagick Directory", all of which will be covered in the next section. For now I'll describe the rest.
"Jump To..." lets you jump to any coordinate within the Zone Map easily.
"Go to Background" takes you the Plane B layout for the Zone. This is the Zone's background. This option is replaced with "Go to Foreground" if you are viewing the background already. Keep in mind that some backgrounds are augmented by sprites in the real game, and won't show up accurately.
"Zoom" does the same thing as hitting the space bar.
"Toggle Layers" lets you show only the planes of Zone Tiles that you wish to, and "Toggle Objects" shows or hides all the objects at the same time, regardless of their type. You'll want to use this when exporting the Plane B layout.
"Change Background Colour" and "Default Background Colour" perform the same functions as on the Tileset Menu.
"Count Rings" shows a message box with the number of Rings in the Act.
Finally, "Return" sends you back to the Tileset page. Be careful - pressing the Return option will cause you to lose all your changes to the Zone, as it is re-assembled each time you press the Layout tab. There is a confirmation prompt, though, so don't worry too much about hitting it by accident.
Step 3: Export the Zone Map
Once you have scrolled through the Zone Map (and tweaked whatever you felt was necessary), it's time to actually export the map. But which image format are you going to want to export it in? Sonic Extractor supports ".bmp" natively, since Game Maker can export in that format, but it sure takes up a lot of space. With a little help from the freeware command-line image manipulation tool, ImageMagick, though, Sonic Extractor can support ".png", as well. You just have to specify where the file "convert.exe" is stored in your Image Magick directory, so Sonic Extractor knows where to find it to make use of it. To do this you just bring up the Right Click menu and select "Specify ImageMagick Directory". If you don't want to install ImageMagick (though it really is a rather neat programme) you don't have to, of course, but you will be restricted to uncompressed bitmaps only.
If you're not using ImageMagick, then, select "Export Zone Map to BMP". Sometimes there is a need to only make an image of a partial Zone, so first you are allowed to specify the area of the Zone map you actually want to export. This is done by way of four input boxes - starting X and Y coordinates, and ending X and Y coordinates. As you enter each coordinate, press the "OK" button to move on to the next. Pressing "Cancel" on any of these four input boxes will disregard all coordinate inputs, and skip straight ahead to exporting the Zone map in its entirety.
Next, a message box will tell you the estimated disc cost, and you can cancel if you think it's too much. If you happen to be running the programme off a partition, or a USB drive, you could run into trouble. You'll just have to clear some space, drive hog!
If you are using ImageMagick, select "Export Zone Map to PNG" instead. The same Zone region input boxes will be shown, but there will be no disc cost message, since I can't predict how much the images will be compressed. The process only exports one bitmap at a time, usually 2048x2048 (if you have specified a smaller range, or the Zone's dimensions aren't perfectly divisible by 2048, the bitmap may be smaller). ImageMagick is used to convert each BMP chunk to PNG as it is made, unceremoniously deleting each BMP as it goes. Because of this, the Command Prompt window will appear several times, as necessary. The temporary bitmap can be up to 16 megabytes in size, so if you are operating on an extremely cramped drive, you might still want to make space considerations.
Because Game Maker has a size limit of 2048x2048 on exported images, when you export the Zone map you will be left with a series of chunks, and not one whole image. Sonic 3&K Zones are simply too large for even ImageMagick to handle, and it'll be up to you to decide how to concatenate them. You may want to break Zones into several maps, or even discard unnecessary chunks.
Finally, you can choose "Save Screenshot" to save a bitmap of just the current screen.
Notes on Sonic 3 & Knuckles
Though Sonic Extractor endeavours to make mapping Sonic 3 & Knuckles as easy as I can make it, there will still be a few little things to keep in mind. The programmers of the games were pulling out all the stops to push the Mega Drive to its limits, creating dynamic levels with cycling palettes and changing tiles. Whole chunks of the Zones move around during play, like in Marble Garden, Hydrocity, and Flying Battery. New tiles are loaded as you progress through the Zone, like in Angel Island. Even palettes change halfway through the Zones, like in Hidden Palace and Mushroom Hill. Thus, maps may have garbage, missing tiles, or tiles with the wrong palette. But there is a solution. Move through the Zone in Gens, taking savestates in each different area (such as in each of the seasons in Mushroom Hill Act 2, or each building interior in Launch Base). Then you'll be able to make more than one map of each Zone and put together the correct parts of each, to make a finished map that accurately reflects the Zone as it is played (using the screenshot feature or only exporting a partial map can be useful here). At least not all of the Zones are this tricky.
Annoyingly, Lava Reef is missing tiles. They aren't part of the normal Mega Drive backgrounds, but added on top as sprites. If each one was its own object, they could have been included, just like the columns and waterfalls in other Zones. But instead, some central object takes care of them all in some way that I don't yet understand. But certainly Lava Reef isn't unrecognisable for the lack of these few tiles. I'm just warning you so you won't think it's your savestate that's to blame, or some error in Sonic Extractor.
Finally, I haven't included Special Stage support, because the Esrael Sonic Editor II has a pretty nice Sonic 3 & Knuckles Special Stage Editor. It's the Zones that are difficult to get maps of, so that's what I concentrated on.
This programme is made entirely by me, Mercury - the contents, though (sprites, layouts, etc) are entirely the property of Sega. For this reason, I don't need to be given credit for any maps exported with Sonic Extractor. However, I wouldn't take too kindly to somebody redistributing the programme as their own work, or using it to violate anyone's copyright, so please be polite.
Keep in mind also that ImageMagick is protected by its own licences, and Sonic Extractor is coded to be compatible with ImageMagick. Thus it might be infringing upon them, as well, if somebody tried doing something unscrupulous.
And finally, don't try selling the programme for money or anything. Cos that'd be stupid.
If you have anything to say about the programme (bug reports, feedback, and whatnot), you can send them to firstname.lastname@example.org. Any serious bugs brought to my attention I will try to remedy in future updates, but don't expect any personal replies. I'm simply far too busy (and misanthropic ;p).