Wiki

Clone wiki

CaVE / Mods / Full Unlock

About

The Full Unlock mod is one for currently just the SNES/SFC apps.

It comes in 3 forms, with one of those discontinued as it was replaced with the other 2.

Of the 2 active versions, the main distinctions are that one is normal, and the other is + (plus).

General

As the Full Unlock now exists in C++ code form, it could be said that that itself constitutes some features. At its core, it allows me to do things with it that I could not do with patching alone. Like hooking functions, and adding in my own code. That is something most of the following features heavily leverage.

There is however another feature with it now being code. I call it Dynamic Patching. Basically, I have coded the mod to do Static Patching, with is pre-found addresses to edit. Thats effectively the same as IPS patching. Dynamic Patching however, does not know where the address to code that needs to be patched exists. It scans for the code, finding it at an unknown address, then patches it. This is relevant for future versions of the app. For example, at this time v5.1 is the latest version. When v5.2 of the app is released, the Full Unlock mod "should" remain working by using Dynamic Patching. It will still be updated, but will require it less immediately.

That said... Not all features are currently supported with Dynamic Patching. Currently Cheat Code support isn't. Just... because its a pita to set up, and Cheat Code support took a LOT more work than any other feature to begin with.

Disable the SFROM signature file check. (Both Versions)

The SNES/SFC NSO/Classics app is unique in that it tried some form of protection against using custom ROMs. It added a .sfromsig file to every game, and that sig file is used to validate if the game is legit or not.

Rather than trying to make a valid .sfromsig file... This just skips that file check altogether!

Enable all GameCode's beyond just those belonging to stock games. (Both Versions)

Until v2.4, there was an extra layer of protection against using non-stock games in the form of restricting the valid GameCodes (a 2 byte ID value in the footer) to those of the stock games. The code supports MANY more GameCodes, inherited from the previous generations of Virtual Consoles. They were simply excluded.

This enables those extra GameCodes as valid to use in v1.0-v2.3 of the app.

After v2.4, this protection was removed/forgotten about and thus is no longer necessary to negate.

Enable SNES Classic format SFROM support. (Both Versions)

The SNES Classic, a.k.a. SNES Mini, had a different format of .sfrom file. Put simply, it used a 48 byte header and similar sized footer to append extra information into the ROM file for the emulator to be better focused on its task. With the Switch NSO Classics apps, they changed the format but kept the extension.

This feature allows SNES Classic SFROM's to work on the NSO Classics app. In v1.0 of the app, this actually did exist officially, but was removed by v1.1. Then the IPS patch version of the Full Unlock did make a minor change to it to enable use of a wider array of sfroms, since the sanity check of the Product ID to make sure it was a valid SNES Classic sfrom... was flawed. This feature uses my improved sanity check, checking just the Magic Number and the J in WUP-JXXE, RVL-JXXE, KTR-JXXE instead of the W in just WUP-JXXE.

Though SNES Classic SFROM's are supported, this is largely just for reduced compatibility issues. There is no benefit to using a SNES Classic SFROM with the Switch app. But there is a benefit to using the Switch format SFROM. So use that.

Enable ExHiROM game support (Both Versions)

The emu code (canoe) is a surprisingly compatible emulator. It's not perfect, and does not support everything. But it supports 99% of the SNES catalog, and does so at a good speed, and has few issues.

But... One of its most glaring issues is the absence of ExHiROM support. Such games are over 4MB (32Mb). Officially, there are 3 ExHiROM games, semi-officially 1 more, and unofficially several ROM hacks.

Officially, there is Tales of Phantasia, Tengai Makyou Zero, and Daikaijuu Monogatari 2. Of those... Only Tales of Phantasia does not use a unique special chip that is not supported at this time.

Semi-officially is Trials of Mana. Officially released as a game, but is an ROM expansion hack, never released on cartridge in its translated state.

Un-officially, there are ROM expansion hacks like Crimon Echoes/Flames of Eternity (Chono Trigger hacks), and Return of the Dark Sorcerer (Final Fantasy 6 Hack).

Canoe simply did not support these. It lacked the code. But... I added the code it lacked. An entire ExHiROM mapping routine! This mod supports all of those except for TMZ/DM2, as those require additional special chip support. Even Return of the Dark Sorcerer, which notably expands the rom size to the ExHiROM formats limits, beyond what is technically official.

Soft-Patching support (Plus Version Only)

This feature allows you to place a IPS file on your SD card, and non-permanently patch the intended game every time its run. This is useful for testing out in-development patches, optional enhancement patches and maybe randomizers.

Better yet, this patch is made optional at runtime! You can hold the R trigger button when selecting the game to boot the original, unpatched ROM instead! Giving you 2 games for the price of one in some cases.

To help distinguish which version, patched or unpatched is loaded, a rumble plays on load of the PATCHED version.

Usage:

  • Right Click the desired game in CaVE, and select "Open Game Folder" to open the games folder in explorer. If the option is greyed out, it's because that is a stock game and the game folder does not exist. So you have to make one.
  • (Skip if you are not dealing with a stock game) Go to Edit->Open Database Folder and click. This opens an explorer window. Navigate down to "romfs/titles/". Back in CaVE, note or copy the Code value of the game, then create a new folder in the "/titles/" folder, giving it the name of that Code value. Then open that folder.
  • Now copy the IPS file you want to use to this folder. Back in CaVE, note or copy the Code value if you already have not, and rename the IPS file to that Code with the extension remaining ".ips". For example, "S-2024_e.ips".
  • That's it! Sync your database to your SDcard/Switch, and load that game. You will feel a rumble to assure you that the patch is applied!

Cheat Code support. (Plus Version Only)

fup_cheat_codes-thumb.png

There are many cheat code formats for the SNES and its various emulators. I chose the SNES9X v1.57 .cht format... simply because it suited my needs the most.

The cheat codes use a format like:

cheat
  name: Infinite Lives
  code: 809B59=AD

I additionally expanded the format in various ways, for some extra compatability with revisions of the format. Multi-line cheats are supported via either an entirely new entry, just with a "(# of #)" tag at the end of the name (i.e. "Infinite Lives (1 of 3)"), or using a '+' or ',' to separate the codes on a single line.

Example:

cheat
  name: Jump In Midair (1 of 3)
  code: 818576=00

cheat
  name: Jump In Midair (2 of 3)
  code: 81857F=F2

cheat
  name: Jump In Midair (3 of 3)
  code: 818580=95

Or...

cheat
  name: Jump In Midair
  code: 818576=00+81857F=F2+818580=95

Despite being the best... I think the format is ugly and poorly designed, which is why I added other delimiters as options, like:

cheat
  name: Jump In Midair
  code: 818576:00,81857F:F2,818580:95

This format may be changed in the future. I'm not sure. Im just not planning on it right now

Additionally, you can input cheat codes at runtime by pressing X on the cheat code list (requires at least 1 cheat code to exist already). There you will see a series of input prompts for the codes address, value and name. This only supports (# of #) Multi-line codes for now.

Usage:

  • You need to access your SD card directly, and create a "cheats" folder in the root of the drive. I.E. "sd:/cheats/".
  • Copy the .cht file there, and in CaVE get the Code value of the game. Rename the cheat file to that code. I.E. "S-2024_e.cht".
  • Alternatively, the renamed cheat file can be placed in the games folder along side the sfrom, images and maybe ips patch. Doing so will not work with adding cheats at runtime though. The only benefit of using this option is that the .cht can be Synced over to your switch, instead of requiring you to manually copy it over.

SNES Rumble support. (Both Versions)

While it never existed for SNES back in the 90s, there is now a rumble protocol for SNES supported with a few controllers and emus. With this... canoe is now one of those emus!

Rumble support is primarily thanks to LimitedRun Games developing the protocol and initial gamepad that both work on real hardware. It's not widely adopted yet among games/hacks though. At this time, there are only a handful of games/demos/hacks that can use it. And not all of those will work on canoe.

Title Link Status Description
Attack of The PETSCII Robots Link Working A Homebrew/Unlicensed game.
Castlevania Link Working NES to SNES port by Rumbleminze
Contra 3 Link Not Working bogaa's rumble hacks currently do not work due to a incorrectly implemented protocol on his end.
DOOM SNES 2025 N/A Unsupported Uses custom SuperFX3 chip
Final Fantasy II/IV Link Working
Final Fantasy III/VI Link Working
Mike Tyson's Punch Out!! Link Working NES to SNES port by Infidelity. Dead link. You will have to find it in his discord.
Reality Test Link Working Test Demo ROM for rumble. Requires the ROM to be expanded to 512kb (4Mb) to boot.
Star Fox Link Working Called Shindou Edition. To get to work, you have to set the GameCode to 0 (PresetID to 0x1000) in SFROM Tool
Super Castlevania IV Link Not Working bogaa's rumble hacks currently do not work due to a incorrectly implemented protocol on his end.
Super Mario Kart Link Not Working Stupid useless furry art splash screen causes it to not boot
Super Mario World Link Working Many SFX have rumbles!
Super Metroid Link Working
Teenage Mutant Ninja Turtles IV - Turtles in Time Link Not Working bogaa's rumble hacks currently do not work due to a incorrectly implemented protocol on his end.

Plans

I have some other ideas for SNES, but I am not sure if I will work on those next or not. I might move on to Soft-Patching and Cheat Code support with other console apps.

Discontinued Version

As mentioned there used to be another version. It was simply a collection of IPS patches that mainly just did the signature check removal and stock GameCode restriction removal. The mod was translated from IPS patches into a C++ binary to allow me to better expand the scope of the mod, and be easier to maintain/update.

Updated