d0k3 / GodMode9

GodMode9 Explorer - A full access file browser for the Nintendo 3DS console :godmode:
GNU General Public License v3.0
2.12k stars 191 forks source link

[FEATURE REQUEST] Add option to set version number when creating CIAs #705

Closed LukasMFR closed 3 years ago

LukasMFR commented 3 years ago

A small idea but you could add a way to change the major, minor and sub minor version when building CIA from 3ds.

CyberYoshi64 commented 3 years ago

I wouldn't recommend adding it in. Take Mario Kart 7 as an example. Nintendo updated the game to fix ultra-shortcuts on certain courses. Changing the version number from 1.0.0 to 1.1.0 is already enough to fool the 3DS and the matchmaking servers to let you play with a 1.0 game. This indirectly enables the capability to cheat by being the only person to utilize these skips/bugs, not only in MK7 but probably most other games as well. Despite that, what's the point of changing it anyway? It will bother you to update and you do. Ofc if it's an out-of-region game, you just skip the update dialog, as you can't get its update.

LukasMFR commented 3 years ago

It's just for Resident Evil that I need that, for whatever reason the 3DS is looking for an update, but as far as I know both Resident Evil games never had an update. But I guess for now I can just press the skip update button.

ZeroSkill1 commented 3 years ago

There's a reason why this happens.

Some games have both physical and digital releases. The physical version cannot have a set version number and therefore will result in version 0.0.0 (0) being set when building a CIA from the cart. However, the digital version, even though it might not even have any update, may have a higher base version set than 0. Usually, this is version 1, 16, 1024, 1040, etc.

This will make an update notice appear, because it (eShop) thinks that the game is outdated. Since you installed a CIA, from what your console can see, you're using the "digital" (well, not really digital, but converted to digital from physical) version (which may have a higher base version, as stated above) and not the "physical" version (which doesn't have a set version).

It's just one of the problems when converting carts to CIAs.

LukasMFR commented 3 years ago

Thanks for the info, I used a tool to rebuild the dumped CIA, which let me set minor and sub minor but nor major, do you know any simple tool I can use.

d0k3 commented 3 years ago

Well, we could take over the version from the NCCH version. That version should equal the digital download version, and you should only see an update notice when there's an actual compatible update available. Would you be available for testing that, @LukasAppleFan ?

ZeroSkill1 commented 3 years ago

The NCCH version is always equal to 2 if I remember correctly. It doesn't indicate the title version, but rather, the NCCH format version.

d0k3 commented 3 years ago

Ah, correct... no, the NCCH version is not the same as the digital version.

One way of fixing this is to set the TMD version to the highest possible number when building a CIA. This way, you should never get an update notice. This will need some discussing, I guess.

ZeroSkill1 commented 3 years ago

That should work, but It's not really a solution since most of the time, you don't have the newer version.

Had a quick look at 3dbrew, and found that apparently, the "Card Info Header" contains the title version?

ZeroSkill1 commented 3 years ago

This has to be it, because else, the eShop / HOME Menu would have no other way of knowing which version you have.

LukasMFR commented 3 years ago

I can test things if you’d like

redunka-zver commented 3 years ago

GM9 already does carry over title version from card info header, and it indeed helped with some games that would previously give false update nags.

It won't help with Resident Evil games though, because their version in that header really is 0. Early 3DS games didn't have e-Manuals on carts, but digital releases do have them, that's probably why the latter have higher title version. Some games (e.g. OOT3D) later received a second cartridge revision that would include manual as well, but I doubt that old carts also give an update nag even though there wasn't any kind of installable updates for them.

This info likely won't help in any way, it's just an interesting observation on why this happens. ¯\(ツ)\

d0k3 commented 3 years ago

Oh, I wasn't aware. Another question: is a title version of 0.0.0 always wrong? I.e. can digital titles have that title version?

ZeroSkill1 commented 3 years ago

Is a title version of 0.0.0 always wrong?

It's not always wrong, however, it usually is.

can digital titles have that title versions?

Yes, they can, but they usually have version 1, 16, or 1024/1040.

redunka-zver commented 3 years ago

It's actually not that uncommon for a digital title to have title version 0.0.0, just a few examples I can name: Epic Mickey, ALBW and EUR version of NSMB2, but there's much more.

Most of times when a digital release's title version is higher than 0, a cartridge for the same title would have a matching version in card info header; so I think those specific old carts are pretty much the only ones to give this issue, the rest just need to be converted with newest version of GM9 (or, if you want to use PC, you can modify 3dsconv script as written here).

Not sure if an option that would only be useful for such rare cases is really necessary in GM9… I myself would either try to get a proper digital dump or just fix title version in TMD manually with a hex editor (even GM9's one) in such situation, but I guess a more convenient way wouldn't hurt. As for cheaters… if they're aware of those exploits, they likely already have ways to use them too, plus I suspect that a lot of them would probably just download a prebuilt CIA anyway…

d0k3 commented 3 years ago

Alright. As @redunka-zver said, the version taken over by GM9, from the NCSD card header, is usually correct, except for some old carts. We can't detect these old carts. The only issue users get from this is an update notification when there is actually no update. That sucks, but just a little, and won't legitimate a new feature and the work that has to be put in.

Aside from that, there's a easy workaround: Just set the version number manually, with a hex editor, inside the TMD. In a GM9 built CIA, this version is always at offset 0x2F9C, and can simply be set to 0xFFFF to resolve all issues with update notifications.

LukasMFR commented 3 years ago

Ok thanks I will see what I can do in Hex editor

redunka-zver commented 3 years ago

I'd like to leave some visual aid for those who might need it.

GM9's hex editor: gm9

A PC hex editor (HxD): hxd

The highlighted part shows how the block 0x2F9C-0x2F9D is supposed to look like after editing, assuming that title version is set to 0xFFFF, which is max possible.

LukasMFR commented 3 years ago

I edited the file and can confirm it doesn't ask for update any more