tpwo.github.io

A personal blog

Playing Super Mario World in 2024

Written on (updated )

Thank you Mario! But our princess is in another castle!

Super Mario World is one of my childhood games I remember really well. It was released in 1990 but recently I found out that we can still play it today on modern platforms with widescreen support enabled!

Super Mario World Cover
Cover of the US version of Super Mario World

The base to do it is bsnes, a multi-platform SNES emulator. There is a fork of it which supports HD video features called bsnes-hd, and we’ll be using it.

Super Mario World Widescreen project is a fan-made patch which can be found in wide-snes GitHub repo.

We also need a patcher. According to sneslab.net manual we can use either FLIPS or beam. They host FLIPS directly on their site: https://sneslab.net/tools/floating.zip.

Now, the only missing piece is ROM with the original game. I found a copy of it on archive.org which seems to be a pretty reasonable source. If it’s there, Nintendo probably doesn’t have anything against it, or at least no longer cares.

Patching the ROM

After downloading the files, you should have something like this (we’re skipping emulator for now):

├── smw-widescreen.bps           1
├── Super Mario World (USA).sfc  2
└── floating
    ├── boring.zip
    ├── flips-linux
    ├── flips.exe                3
    ├── license.txt
    └── src.zip
  1. Patch file
  2. ROM file
  3. FLIPS patcher

Run FLIPS <3> and click Apply Patch. At first it asks you for the patch file, then for the ROM file, and then for the filename to save the patched ROM.

FLIPS patcher

You can notice that the patched file is twice the size of the original:

$ du -sh *
1.0M    Super Mario World (USA) Widescreen Project.sfc
512K    Super Mario World (USA).sfc

Creating widescreen configuration file

bsnes-hd requires a bso configuration file in order to correctly run the game in a widescreen mode. Thankfully, you don’t have to download it, as the file is very short and simple, and you can create it with this command:

echo 'w1s1W48S2i0o1p1b1B1c1' > 'Super Mario World (USA) Widescreen Project.bso'

The content of the file is taken from wide-snes GitHub repo. I guess it uses special quirky syntax to tell the emulator how it should behave when dealing with the patched ROM.

Running the game

Now, you can unzip bsnes-hd and run it. To make the game look better, make sure to select Settings > Shader > None. By default it’s set to Blur which makes the game very…​ well, blurry. You can later switch these options on the fly, maybe you’ll like it.

To start the game, either select System > Load Game or drag and drop patched sfc file into the window. Super Mario World should start in widescreen mode!

Super Mario World in widescreen mode

Configuring controller

I found the game to be much more enjoyable while playing it with a game pad. Fortunately, bsnes allows for that. Select Settings > Input to configure mappings for your device.

I’m using Xbox 360 controller, and it works like a charm. Here are my settings:

Input settings for Xbox 360 controller

These are pretty much defaults, as much as you can tell that about SNES → Xbox 360 conversion, but I added another mapping for X which is used to run faster in the game.