SMW hacking is one of the easiest ways to make a game! However, it’s quite different from
other game-making tools (like Mario Maker or game engines like Unity). We’re working with a
game for the Super Nintendo Entertainment System, so everything has a special format: graphics aren’t just PNG, music isn’t
just MP3, and so on. It also means you can’t do everything you may want to – the SNES just
isn’t as powerful as a modern computer.
Some parts of SMW hacking are pretty easy, others are strangely hard, and getting the hang of
it all can take some time. But once you do, you have a lot of creative freedom!
Lunar Magic
The level editor for Super Mario World is called Lunar Magic
(LM). It can open Super Mario World ROMs, and it lets you edit levels,
overworld maps, and more.
(Some people say “Lunar Magic” when they mean “SMW hacking” as a whole, but there are a lot
more tools involved than just Lunar Magic.)
Two terms you’ll hear a lot are “objects” and “sprites”. Objects are things in the foreground that are fixed to a rigid grid (like ground, pipes, coins and question blocks). Sprites
are things that can move independently of everything else (like enemies, powerups and
platforms).
(Elsewhere, you might have heard “sprites” to mean just graphics, and “objects” to mean
independently moving things. That’s also true, but it’s not what we’ve come to use in SMW
hacking. Don’t get confused!)
Not all objects and sprites will look right! For example, Thwomps only look right in castle
levels, and glitched in others. That’s normal in SMW. It’s because the SNES has limited
graphics space: the game can’t have all graphics available at the same time, so each level
has its own small set of graphics. That means you can never use all kinds of sprites in the
same level – some of them will always look glitched.
Graphics
Graphics in SMW hacks don’t come in modern image formats like PNG or JPG. Instead, they’re
.bin files.
To edit the game’s graphics, extract them from the ROM using Lunar Magic, then edit the GFX
files with a tile editor, such as YY-CHR or Graphic Editor.
Then, re-insert the graphics back into the ROM using Lunar Magic.
If you want to add new graphics to the game, use Extra Graphics (ExGFX).
ExGFX give you more GFX files to work with, so you can add new graphics without affecting
the graphics that are already there. Of course, for each individual level, you can still
only use a limited amount at a time.
The SMW Graphics section
has a whole lot of ExGFX packs you can download and insert.
Check the ExGFX guide for more
info on how graphics work and how to insert them.
ASM
ASM (short for Assembly) is the SNES’s programming language. It’s the
language that Super Mario World was programmed in, and all custom
blocks/sprites/patches/etc. are also programmed in ASM.
You do not need to know ASM to insert things that other people have made. ASM knowledge is
only needed if you want to write your own, new code.
(There are many other kinds of Assembly languages, but in SMW hacking, we use “ASM” to mean
just SNES ASM.)
Blocks
Levels are made of 16x16 tiles called blocks. Custom blocks let you give new
behaviors to tiles. For example, you can have a block that gives the player 10 coins, or a
block that’s solid to the player but passable for enemies.
To insert custom blocks into your ROM, use a tool called GPS. A tutorial on
how to use it can be found here.
The SMW Blocks section has a
whole lot of custom blocks you can download and insert. There’s also a tool called Blockreator that
lets you make your own blocks without needing to know ASM.
Custom blocks don’t come with graphics! Block behavior is separate from graphics, so when you
insert a custom block to your ROM, it won’t look any different. Giving it graphics is a
separate step (see “Graphics”).
Custom blocks can’t move! They’re part of the foreground. If you want something that can
move, it will have to be a sprite.
Custom blocks are only active when the player (or a sprite) is touching them! To apply a more general effect to a level, try UberASM code.
Sprites
Sprites can move independently of the foreground and can be active even when the
player isn’t touching them. Custom sprites can be new enemies, bosses, platforms, carriable
items, and more.
To insert custom sprites into your ROM, use a tool called PIXI. A tutorial on
how to use it can be found here.
The SMW Sprites section has
a whole lot of custom sprites you can download and insert.
Sprite behavior is separate from graphics, so when you insert a custom sprite to your ROM, it
won’t automatically look right. Sprites from the Sprites section usually come with graphics,
but it’s your job to insert those graphics into the ROM and load them in the level (see “Graphics”).
Patches
Patches are code that rewrites parts of the ROM. You can apply a patch to your ROM
to change the way the game works. For example, patches can give you multiple checkpoints per
level, disable the status bar, give the player a health bar, and more. Patches are also used
for very simple tweaks, like changing the amount of coins needed for a 1-Up, or fixing bugs
in the original game.
To apply patches to your ROM, use a tool called Asar. A tutorial on
how to use it can be found here. These patches come in the form of .asm files.
Be aware: in SMW hacking, the term "patch" can have one of two meanings – it can refer to an .asm file that changes a part of the game, or to a .bps file used to distribute a full hack. Both are correct, though the two formats are used differently:
- .bps patches have to be applied to clean ROMs; .asm patches can be applied to ROMs that
have already been edited.
- .bps patches are applied with FLIPS; .asm patches are applied with Asar.
- .bps patches aren’t human-readable; .asm patches are text files containing ASM code you
can read and edit.
The SMW Patches section has
a whole lot of patches you can download and apply.
UberASM
UberASM code is special code that can be run during specific parts of the game. For example, UberASM can be used to give the player a new ability that can be used in any level, change the player's gravity in one specific level, or display graphical effects when on the overworld map.
To add UberASM code to your ROM and set when it's run, use UberASMTool.
Unlike patches, UberASM code doesn’t rewrite part of the game – UberASM code is added on top of the game, and you can control where it runs.
The SMW UberASM section has a
whole lot of uberASM code you can download and add to your ROM.
Music
Music for Super Mario World doesn’t come in modern audio formats like MP3 or WAV.
Instead, music is written as text files that have note information.
To insert custom music into your ROM, use a tool called AddmusicK. A
tutorial on how to use it can be found here.
The SMW Music section has a
whole lot of custom music you can download and insert into your ROM.
AddmusicK also generates .spc files, which is the SNES’s music format. They’re not important
for hacking, but you can listen to them. (Text files are for inserting, .spc files are for
listening.) You can play them in an SPC player, such as the SNES SPC700
Player.
(Your computer may tell you .spc files are “PCKS#7 certificates”, but in SMW hacking, that’s
wrong – it’s confusing them with a different file format also called .spc.)
SA-1
The SA-1 is a special chip inside the game cartridge that enhances the performance of the
console. It was included in some SNES games, such as Super Mario RPG.
There’s a patch called the SA-1 pack that makes
your ROM use the SA-1 chip. This lets you use more sprites at the same time with no lag, and
more. It’s also a very complex patch that makes major changes to the game, so every
block/sprite/patch/tool etc. has to be adapted to work with SA-1 ROMs. Luckily, almost
everything on SMW Central is now made in such a way that it automatically detects if your ROM is using the SA-1 chip or not, and works either way.
Unlike other .asm patches, the SA-1 pack has to be applied to a clean, unmodified ROM. It
comes with detailed instructions on how to use it.
If you’re just starting out, you don’t need the SA-1 pack. It’s mostly for large hacks that
have a lot going on and suffer from lag. So if you’re confused about how to work with it, or
wondering if you have to use it, don’t worry, you don’t need it!
Some other common terms
- Vanilla: A vanilla hack is a hack that uses very few or no custom
resources, such as sprites, patches, music etc. The exact definition of vanilla varies from person to person, but a common definition is to use only Lunar Magic on the ROM (and no other tools). The opposite of this is chocolate: a hack that uses custom resources not in the original game.
- Porting: Porting has two meanings – 1) converting an existing song to
the SMW format (i.e. a text file), or 2) starting your hack over with a new clean ROM
and transferring all old levels/graphics/etc. over to it (sometimes necessary when
something breaks your ROM and you need to start fresh).
- Ripping: Converting existing graphics (either from SNES games or from
other sources) to a format that’s ready for Lunar Magic to insert.
- ROM: ROM has two meanings: 1) the game as a computer file, or 2) the
contents of the game’s memory that don’t change during gameplay (all the code, graphics
etc.). The SMW ROM
Map lists all the parts of the ROM, and at which memory location they are. This
is useful for making patches that change the ROM.
- RAM: The part of the game’s memory that can change during gameplay
(like the coin count, the player’s position on the screen etc.) While the game is
running, it constantly changes the RAM. The SMW RAM
Map shows how Super Mario World uses the RAM.
- Freespace: Unused parts of the ROM where patches can put their own
code.
- Free RAM: RAM addresses that aren't used in the original game, that custom blocks/sprites/patches/etc. can use for their own purposes. Most resources that use free RAM say so at the top of the file. Be careful not to set two different resources to use the same free RAM address!
Submitting your hack
First things first: don’t submit ROMs to SMW Central! Your hack has to be a .bps patch.
Use FLIPS to create a
.bps patch from your ROM:
- Click “Create Patch”.
- Select a clean (unmodified) ROM of Super Mario World. To check if it’s really clean, use
the ROMclean tool.
- Select the ROM of your hack.
- Choose where you want to save the final .bps patch.
The .bps file you got in step 4 is the patch you submit! Compress it into a .zip file, then
upload that .zip file to the
SMW hacks section.
Make sure to read the submission guidelines on the page! If your hack doesn’t follow these
guidelines, it might be rejected. You can still upload it elsewhere, such as your personal
File Bin.
Generally, it’s not a good idea to submit your very first hack. SMW hacking takes time to learn, and your first attempt is often not as good as you might think it is. You'll learn a lot as you go, so it's wise to make your first hack just be a “trial run” for yourself.
SMW Central has a Works In Progress forum where you can share your work without officially submitting it. Getting other people's feedback is a great way to improve your skills!
Where to go from here?
This guide is meant to introduce you to the very basic concepts of SMW hacking. If you want
to learn more, please check out these links:
- ➔ SMW Central’s F.A.Q.
page has lots of answers to beginners’ questions. It’s a good idea to give
it a quick read. Whenever you have a question, come back to it and see if it already has
the answer.
- ➔ There’s also a Glossary
page that explains many more commonly-used terms.
- ➔ The Tutorials
forum has detailed instructions on common hacking tasks (how to use tools,
how to make your own resources etc.) If your question is “how do I use […]?”, check if
there’s a tutorial for it!
- ➔ The Help
forum is a place on the forums where you can ask beginner questions. It’s a
good idea to check the above links before posting your own question!
- ➔ SMW Central also has a Discord server
with a #help channel where you can ask all kinds of hacking questions. Again, it’s a
good idea to check the above links before posting your own question!
Happy hacking!