12 users online: alef, Boosius, BWGLite, Dispace, h.carrell, Kabaro, obiet, recam, Sarwex, SuperMarioFan2K3, themailman, Tulip Time Scholarship Games - Guests: 217 - Bots: 201
Users: 65,081 (2,311 active)
Latest user: zimbo86_

The Workshop™: all you need to know about custom graphics!

Welcome to The Workshop!

This is the place for learning everything you should know about custom graphics for SMW Hacking, including: knowledge on the fundamentals (what GFX and ExGFX are, how to insert them into your ROM, how to edit them, how to make or insert custom palettes and Map16), how to rip graphics from other media to use them for SMW, and various useful tips for making your own beautiful graphics and palettes!

If you need further help, then please make a thread in SMW Hacking Help if you're having problems related to Lunar Magic, or in this very forum if it's a more graphics-specific issue. Do not use this thread to ask for help! Make a thread about your issue instead, as it allows us to help in a case-by-case manner, and because your help post could get buried by other ones, leaving it unnoticed.

All users are free to contribute to this thread! Just post something you think others would find useful here (tools, tutorials, paletting/pixel art tips) and we'll add it to this post after moderator analysis! Paletting and Pixel Art tip authors will be credited, of course.

Table of Contents
Getting Started!

First of all, you'll need to know what "GFX" and "ExGFX" mean. To quote the Graphics F.A.Q. page:

"GFX" in the SMW Hacking scene is usually used as short for "Graphics", but GFX actually are the original 52 files of graphics from Super Mario World. ExGFX stands for Extra Graphics and are more graphics that can be added without overwriting the original graphics.

The process of using custom graphics basically involves editing SMW's original graphics (GFX) and/or creating and editing extra graphics for your hack (ExGFX), inserting them into your ROM, having Lunar Magic know which of those files you'll use in your level through the GFX Bypass dialogs, and finally arranging them depending on where they're going to be used: foregrounds, backgrounds, sprites, or Layer 3. You will also most likely find yourself making or importing custom colors and animations in the process.

This tutorial covers up pretty much everything you should know about GFX and ExGFX insertion (along with all other relevant files) and usage for foregrounds, backgrounds and sprites, as well as making your own ExGFX submissions. It's definitely recommended to give it a read for a clear understanding of the basics. The Graphics F.A.Q. page linked earlier also sheds some light to these and other topics, but in much less detail.

For tutorials that cover other topics, like custom colors (palettes), in-depth Map16, custom animations (ExAnimation), and Layer 3 backgrounds, check out the Tutorials section of this thread.

Recommended Tools

A list of various tools for different purposes you'll find yourself using:
  • Drawing/Editing Graphics:

    • YY-CHR.NET: unlike what its name implies, this isn't an online tool - it's a more up to date version of YY-CHR rewritten in C#. It adds some very welcome features, like save prompt when closing an unsaved project and window zoom for better viewing. It also comes with a separate, general-purpose palette editor, although it doesn't seem to do as much as the paletting tools we already have for SMW Hacking purposes.
    • Graphic Editor: a tool that emulates YY-CHR and adds a bunch of new features as well, such as an exact replica of Lunar Magic's palette editor built in the program. It is also specifically made for Super Mario World, unlike YY-CHR which is made for multiple titles. Unfortunately, the stamp tool in this one is somewhat broken, so you'll need YY-CHR around to do stamping.
    • YY-CHR: this is the legacy version of YY-CHR. It's a bit annoying to set up, but it gets the job done pretty well. Try using it in case the above tools are giving you problems. (Tutorial)

  • Transforming Graphics:

    • MassRotate: allows scaling and rotating SNES and GB (layer 3) graphics.

  • Ripping Graphics:

    • The Ultimate Background Ripping Tool (BG Ripping Tool) and Racing Stripe (SNES/GBA): BG Ripping Tool is a very versatile tool that rips graphics from savestates and PNG images, and automatically generates all the files you'll need for insertion. It's a bit outdated though, so it generates .bin Map16 files instead of .map16, but LM accepts .bin and exports .map16, so it's not really a problem. Racing Stripe allows you to edit ZSNES or VisualBoyAdvance savestates so you can tweak them before ripping with BG Ripping Tool. (Tutorial)
    • Graphic Editor + Lunar Magic: you can copy-paste images into Graphic Editor and grab colors from LM's Palette Editor to build ExGFX. (Tutorial)
    • Lunar Magic (Bitmap Pasting method): with this method you can rip BG's (and FG's, with some tweaks) from images, automatically set up and optimize ExGFX and Map16, and adjust to the amount of palette rows willing to be used up. Color reduction still needs work, though. (Tutorial)
    • SnesGFX: a tool that rips graphics, outputs all the files you'll need and also has a couple of versatile configuration options. However, it can't use more than one palette row without messing with the outputs, so it's advised to use another method when it comes to more complex rips.

  • Paletting:

    • Lunar Magic's Palette Editor #lm{pal}: rather easy to use and it's built in Lunar Magic (duh). Check the bottom-right corner of the window for instructions. Do note that it doesn't make good gradients most of the time, although making a single middle color out of two is usually (visually) safe. (Tutorial)
    • Palette Editor: it's very much like LM's Palette Editor, except it lets you choose between different color models (RGB, HSL, HSV, among others), including making gradients under those. It's basically a more powerful version of LM's.
    • .pal Generator: generates .pal files from screenshots of LM's Palette Editor. That essentially means you can, for example: take a screenshot of LM's Palette Editor, take it to an image editing program and apply a color filter to the palettes, and then generate a .pal file from it which can be imported to LM.

  • HDMA Gradients:

    Learn what HDMA is here (item A). You will need UberASM or UberASM Tool to be able to insert HDMA codes into your levels. Anyway, tools to make HDMA gradients:

    • GradientTool: a tool for making very nice multi-point color gradients.
    • Effect Tool: makes all sorts of HDMA gradients (color, scrolling, windowing). We recommend GradientTool over this one for color gradients though.


Here are some tutorials that you might find useful:
Paletting Tips

Pixel Art Tips
  • Common Beginner Mistakes (by Berk)

    - Poor outlines
    If you don't place every pixel one by one you will likely end up with messy outlines and bad curves, and these result in crude outlines.
    Fixing messy outlines is simple. Just trim your outlines where it looks thicker than it should be.
    To fix bad curves, you should pay attention to how your curve progresses. For example, in this image, we have a circle drawn using the circle tool and one drawn by hand. The circle tool's curve pattern is 2, 1, 2, 2, 1, 2, 3 and 5 pixels while the handmade curve pattern is 3, 2, 1, 1, 1, 1, 2, 3 and 5 pixels. See the difference? The smoother curve's pattern increases and decreases gradually while the other pattern less so (on the 2, 2 part) and it looks more lumpy.

    - Using the circle tool
    You want to draw a decent circle. You see there's a circle tool. Dope! Now you don't have to spend time trying to draw a decent circle... not. It might look like a neat shortcut, but the results will often have jaggies. However, that doesn't mean that you should absolutely never use the circle tool-- it can speed up the process after all. What you should do if you're going to use it, is retouch the result a little afterwards. Here's an example - Kirby was drawn only using the circle tool at first. Then he was polished further. Now he's happier!

    - Pillow shading
    Pillow shading is shading from dark to light starting from the outlines and ending with the center. It's frowned upon because it often doesn't convey the intended form. To fix this, you can try visualizing your object in 3D space and shading it with a light source in mind. Like this!
    Technically, it could make sense on something perfectly round where the lightsource is in front of it, but even then the outcome won't look very interesting. A different angle might look better as you can see.

    - Banding
    You might think that having buffers between your colors would help your art look smoother. But when your colors hug each other it will just lower your resolution. Not only does it lower your resolution, but it can also make your art look less interesting as shown in this example.

    - Too much detail
    Adding detail here and there is fun! But if you try to squeeze in every bit of detail you might lose readability, so sometimes leaving out some detail may be worth more clarity.
    Excessive outlining is part of this. Outlines are a good way to help something stand out but they're not all you can do. Since outlines take up space, they might waste what little space you have on smaller resolutions. So you might want to try something else, like contrast or saturation difference.

  • Dithering (by Berk)

    Dithering is, similar to hatching and crosshatching, blending colors through patterns. It's great for smoothening your color transitions with limiting palettes. You might have noticed it in some of SMW's backgrounds.

    Dithering patterns

    Hover over a pattern to see its name.
    Open an image in a new tab to zoom in.

    Checkerboard, vertical, and horizontal patterns are the least noticeable patterns. Why? Because as you increase the distance between your pixels, your dithering will become more noticeable. This also makes them the patterns you'll see the most often.
    If the patterns listed above aren't smooth enough, you can try smoothening the transition further by using the %12.5, %25, %37.5, %50, %62.5, %75, %87.5 pattern. Though the smoothness will cost space and distinguishabliity.
    Similar to gradients with limited colors (like these), when you cover more area with each layer of dithering, your transition will be less smooth. See example.
    Stylized dithering is very useful for creating texture. Here are some other examples of stylized dithering: 1, 2
    Random dithering is harder to control and results in a very noisy texture. I personally don't recommend this.
Big applause for PercentN for contributing with a whole document on Beginner & Intermediate Color Tips! 👏👏👏👏

It's been added to the first post and you can find it in Paletting Tips.
It has come to my attention that YY-CHR.NET has been receiving updates as of lately. For quite some time it's been missing the stamp tool (basically a selection tool that simultaneously duplicates the selection for you to drag and drop) from the original program, which they readded now! Additionally, the tool now also comes with a separate, general-purpose palette editor, although it doesn't seem to do as much as the paletting tools we already have for SMW Hacking purposes.

I changed's link in the first post to direct to the creator's page, where you can download the most recent version until it's submitted and accepted into our Tools section. You can find it in the Drawing/Editing Graphics subsection of the Recommended Tools section. And with that, the original YY-CHR has now become a true legacy tool and has been put aside.

Edit: it's now found in the Tools section, so I went ahead and edited the link!
One neat trick is that you can save a .bmp in YY-CHR.NET's File -> Save Bitmap, and then open it in GIMP. The current palette row you are viewing it in YY-CHR.NET will still be maintained when opening and exporting the .bmp in GIMP. Not only is GIMP smart enough for you to paste tiles in and have them automatically use the palette, but you can also draw in it as well. Afterwards, Open Bitmap and Paste in the same YY-CHR.NET menu.
it YY-CHR.NET has been