Hacking Widescreen cheats for DS games on 3DS

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
@Pokem TwlBg is the software that's running on the 3DS in DS mode, which among other things handles screen scaling from DS to 3DS resolution, input, etc. It's necessary to patch your TwlBg in order to have it scale the screen to widescreen (among other patches), as documented by Sono in this thread. Sono's plan is to release a patching app for 3DS eventually which will pretty much automate the process of patching TwlBg, but he has released a preliminary 64-bit Windows build in the meantime.

Even if you're not using TWiLight Menu++, the instructions in the TWLMenu++ thread ("3DS/2DS: Playing in Widescreen") will help you through the process of patching your TwlBg. If you're following the steps from that thread, then once you've created your patched TwlBg.cxi by running wide.bat, you can stop following them and just put that file into sdmc:/luma/sysmodules on your 3DS SD card, and enable external FIRMs and modules in the Luma3DS settings (hold Select on startup).

Now everything you run in DS mode will display stretched to 384*240 on the top screen--even if the game has no widescreen cheat. So any game you use a widescreen cheat with will display correctly, while any games without a widescreen cheat will just look stretched out.
 
  • Like
Reactions: Pokem

Pokem

Well-Known Member
Member
Joined
Jul 22, 2016
Messages
1,058
Trophies
0
XP
1,459
Country
United States
@Pokem TwlBg is the software that's running on the 3DS in DS mode, which among other things handles screen scaling from DS to 3DS resolution, input, etc. It's necessary to patch your TwlBg in order to have it scale the screen to widescreen (among other patches), as documented by Sono in this thread. Sono's plan is to release a patching app for 3DS eventually which will pretty much automate the process of patching TwlBg, but he has released a preliminary 64-bit Windows build in the meantime.

Even if you're not using TWiLight Menu++, the instructions in the TWLMenu++ thread ("3DS/2DS: Playing in Widescreen") will help you through the process of patching your TwlBg. If you're following the steps from that thread, then once you've created your patched TwlBg.cxi by running wide.bat, you can stop following them and just put that file into sdmc:/luma/sysmodules on your 3DS SD card, and enable external FIRMs and modules in the Luma3DS settings (hold Select on startup).

Now everything you run in DS mode will display stretched to 384*240 on the top screen--even if the game has no widescreen cheat. So any game you use a widescreen cheat with will display correctly, while any games without a widescreen cheat will just look stretched out.
So patching the TwlBg will just stretch everything in DS mode to 384x240?
I can't just patch an individual game manually without it effecting everything else?
Also, if I don't like the screen stretching, can I revert back to the normal DS screen size by taking TwlBg.cxi out of sysmodules?

-EDIT- I still have not read the threads you linked me yet, so please forgive me if any of my questions can be answered by looking at the thread. I will look at it as soon as I can.
 
Last edited by Pokem,

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
So patching the TwlBg will just stretch everything in DS mode to 384x240?
I can't just patch an individual game manually without it effecting everything else?
That's correct. The individual game hacks in this thread basically make the game "ready" to be displayed in widescreen, and then TwlBg does the work of actually displaying them that way. You can't just patch the games, that's only half of the equation (the smaller half, at that).
Also, if I don't like the screen stretching, can I revert back to the normal DS screen size by taking TwlBg.cxi out of sysmodules?
Yep! Or if you wanted to be sort of weird about it, you could go into your Luma3DS settings and toggle external firms/sysmodules on and off depending on whether you're currently in the mood to play stretched/widescreen games. Or you could rename the file whenever you do or don't want it to be used, but that seems like busywork.

There is technically another route involving TWLMenu++ but it is at least somewhat complex. If you're playing games with nds-bootstrap, TWLMenu++ manages your widescreen TwlBg.cxi file for you, so you can play 4:3 and widescreen games seamlessly. You can't do the same thing with a flash card, however, you can get it to play nice with a bit of work:

The way TWLMenu++ handles whether or not to load games using the widescreen-patched TwlBg is that it checks for a Widescreen.cxi in sdmc:/_nds/TWiLightMenu/TwlBg and also checks sdmc:/_nds/TWiLightMenu/widescreen for a file that matches either the ROM file name (not useful here, cartridges aren't ROMs [in the specific sense I'm using it right now, don't @ me, I know cartridges are literally ROMs]) or the game's ID and header checksum. For example, a commercial Mario Kart DS (USA) has the ID of AMCE and a header checksum of DEF2. If you've got TWLMenu++ and take a look in the folder I just mentioned, you'll find a file called AMCE-DEF2.bin, which serves two purposes: 1) it contains the code necessary to make Mario Kart DS display in widescreen, and 2) it tells TWLMenu++ to run this game using the widescreen-patched TwlBg, regardless of whether it's running via nds-bootstrap or from a retail Mario Kart DS card.

Knowing this, you can make a 0-byte .bin file to match your personal flash card and place that into TWLMenu++'s widescreen directory. There's two ways you can probably find this information for your flash card. You could use either a dump of your flash card's ROM, or a dump of whatever game your flash card uses the header from, then you can open it using Windows PC app such as NDSTS (direct link to ZIP download) to find your card's ID and checksum. Now, if you create that file, enable widescreen and boot your flash card via TWLMenu++, it will run using widescreen-patched TwlBg, but if you launch it normally, it will run with your unmodified, 4:3 TwlBg.

So yeah, kinda complicated.
 
Last edited by Vague Rant,
  • Like
Reactions: Pokem

Pokem

Well-Known Member
Member
Joined
Jul 22, 2016
Messages
1,058
Trophies
0
XP
1,459
Country
United States
The way TWLMenu++ handles whether or not to load games using the widescreen-patched TwlBg is that it checks for a Widescreen.cxi in sdmc:/_nds/TWiLightMenu/TwlBg and also checks sdmc:/_nds/TWiLightMenu/widescreen for a file that matches either the ROM file name (not useful here, cartridges aren't ROMs [in the specific sense I'm using it right now, don't @ me, I know cartridges are literally ROMs]) or the game's ID and header checksum. For example, a commercial Mario Kart DS (USA) has the ID of AMCE and a header checksum of DEF2. If you've got TWLMenu++ and take a look in the folder I just mentioned, you'll find a file called AMCE-DEF2.bin, which serves two purposes: 1) it contains the code necessary to make Mario Kart DS display in widescreen, and 2) it tells TWLMenu++ to run this game using the widescreen-patched TwlBg, regardless of whether it's running via nds-bootstrap or from a retail Mario Kart DS card.

Knowing this, you can make a 0-byte .bin file to match your personal flash card and place that into TWLMenu++'s widescreen directory. There's two ways you can probably find this information for your flash card. You could use either a dump of your flash card's ROM, or a dump of whatever game your flash card uses the header from, then you can open it using Windows PC app such as NDSTS (direct link to ZIP download) to find your card's ID and checksum. Now, if you create that file, enable widescreen and boot your flash card via TWLMenu++, it will run using widescreen-patched TwlBg, but if you launch it normally, it will run with your unmodified, 4:3 TwlBg.

So yeah, kinda complicated.
Ahhh, I see. So it's a bit similar to something like NTR.
Find the ID and checksum (TittleID in NTR's case) and place it in the widescreen folder.
 

ChampionLeake

NTR/TWL Exploiter
Member
Joined
Jan 19, 2016
Messages
209
Trophies
0
Age
25
XP
673
Country
United States
Widescreen Hack for SpongeBob's Boating Bash NDS
Code:
USA 
16:10 Widescreen for 3DS
9220FAFC 00001555
1220FAFC 00001999
D2000000 00000000

Code:
EUR
16:10 Widescreen for 3DS
921EF59C 00001555
121EF59C 00001999
D2000000 00000000

JPEG_20190918_093347.jpg
 

gamemasterplc

Active Member
Newcomer
Joined
Sep 6, 2019
Messages
25
Trophies
0
Age
22
XP
339
Country
United States
Star Fox Command (USA)
16:10 Hack for 3DS

52066B0C 00004000
02066B0C 00004CCC
D2000000 00000000
520001FC 4770DF0C
02000200 E59F0008
02000204 E59F1008
02000208 E5801000
0200020C E12FFF1E
02000210 01FFC274
02000214 0000199A
D2000000 00000000
52024530 020B3CE0
02024528 EAFF6F34
D2000000 00000000

Fixes culling too. Had to do a hook to fix culling because it was in the middle of ITCM which is unpatchable by arm7.
 

gamemasterplc

Active Member
Newcomer
Joined
Sep 6, 2019
Messages
25
Trophies
0
Age
22
XP
339
Country
United States
Diddy Kong Racing (USA)
16:10 Hack for 3DS

92018D6E 0000F058
12018D6A 0000F7E7
12018D6C 0000E94A
D2000000 00000000
52000028 F68162E2
02000000 E59F2018
02000004 E3A03301
02000008 E5933304
0200000C E2133902
02000010 0A000000
02000014 E59F2008
02000018 E3A03B02
0200001C E12FFF1E
02000020 00001555
02000024 00001999
D2000000 00000000

Dual Screen 3D Scenes are stretched.
 
  • Like
Reactions: RocketRobz

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
Diddy Kong Racing (USA)
16:10 Hack for 3DS

92018D6E 0000F058
12018D6A 0000F7E7
12018D6C 0000E94A
D2000000 00000000
52000028 F68162E2
02000000 E59F2018
02000004 E3A03301
02000008 E5933304
0200000C E2133902
02000010 0A000000
02000014 E59F2008
02000018 E3A03B02
0200001C E12FFF1E
02000020 00001555
02000024 00001999
D2000000 00000000

Dual Screen 3D Scenes are stretched.
Diddy Kong Racing DS is a bit of a nightmare, it looks like you've encountered the same issue that I've had when working on this game. The individual worlds are running in 4:3, and the normal races are running in 16:10, but if you travel into the broader overworld area (where Taj the elephant wanders around) or one of the bottom-screen courses like the balloon-popping minigames, those are also running in 16:10, even though they're displayed on the touch screen.

I haven't been able to get past this roadblock; perhaps you'll have better luck. My running theory is that we need to change the aspect ratio later than on the first read, because the game seems to respond better to aspect ratio changes that occur later, e.g. even as late as the first couple of seconds in-game. After that, the game doesn't seem to respond to any further changes.
 

gamemasterplc

Active Member
Newcomer
Joined
Sep 6, 2019
Messages
25
Trophies
0
Age
22
XP
339
Country
United States
Can you try adding the below 3 lines to the code and see if it works better. It disables the identical FOV check for recomputing the projection matrix.

9201874E 00004788
12018746 000046C0
D2000000 00000000
 
Last edited by gamemasterplc,

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
Can you try adding the below 3 lines to the code and see if it works better. It disables the identical FOV check for recomputing the projection matrix.

9201874E 00004770
12018746 000046C0
D2000000 00000000
This seems to improve things slightly, the first time I visit the overworld it's in 4:3 as it should be, but certain things can trigger it to go back to 16:10, e.g. quitting from an overworld Challenge from Taj. After that it seems to remain at 16:10, even if I leave the overworld and return again.

EDIT: The (touch-screen) balloon-popping games are also still in widescreen with this change.
 
Last edited by Vague Rant,

gamemasterplc

Active Member
Newcomer
Joined
Sep 6, 2019
Messages
25
Trophies
0
Age
22
XP
339
Country
United States
Gauntlet DS
16:10 Widescreen for 3DS

520DFEDC 74634174
0202BF80 E1A00000
0202BF88 EA02CFC5
020DFEA4 E3A01301
020DFEA8 E5911304
020DFEAC E2111902
020DFEB0 E59F1008
020DFEB4 1A000000
020DFEB8 E59F1004
020DFEBC EAFD3032
020DFEC0 00001555
020DFEC4 0000199A
D2000000 00000000
 

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
Just an update for anybody else adding codes after this point, as gamemasterplc has clearly figured out, 0x1555 is rounded down from like ... 0x1555 and a third, so us calculating our 16:10 value based on that is introducing a rounding error. Long story short, 0x199A is like 1/32768th more correct than 0x1999 was and we should use that for 16:10 from now on.
 

gamemasterplc

Active Member
Newcomer
Joined
Sep 6, 2019
Messages
25
Trophies
0
Age
22
XP
339
Country
United States
Grid is still going to need the slightly inaccurate value so it can detect when its not in 16:10 mode accurately. Because a menu uses the exact same value for the aspect ratio.
 
  • Like
Reactions: Vague Rant

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,464
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,316
Country
castlevania series??
Somebody asked a couple of pages back, quoting my response from then:
Castlevania games are 2D, so it's the same situation as New Super Mario Bros., they would require fully-fledged ROM hacks to run in widescreen. Somebody might come along with the interest, time and skill to make them, but I wouldn't hold my breath.
With 3D games, we're basically modifying camera parameters to capture a wider view of the scenery, but 2D games just don't work like that.
 
  • Like
Reactions: FateForWindows

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    S @ StealthD0g99: Ive never done that before