r/3dshacks • • 14d ago

Discussion Has anyone tried sharpscale-3ds, which claims to unlock 800x240p resolution with custom scaling in ds and gba games?

Has anyone tried sharpscale-3ds, which claims to unlock 800x240p resolution with custom scaling in ds and gba games?

Hey all,

I was searching for custom scaling solutions for gba titles and stumbled across this GitHub page: https://github.com/vibecoderanon/Sharpscale/blob/main/docs/3DS\\_GUIDE.md

The sharpscale project seems to be a custom scaling project. There are posts on the vita hacks subreddit from 6 years ago talking about sharpscale-vita. The 3ds version looks like it was updated within the last few weeks, but I haven't seen any posts about it. I am particularly intrigued by the claim that the patched FIRMs can unlock the 800x240 mode. Last I checked, even the TWpatch didn't offer that. I don't see any screenshots to confirm sharpscale-3ds even remotely works.

So have any of you tried it? Would you? Should I? What do you think about the project?

22 Upvotes

9 comments sorted by

24

u/Sir_Tortoise B9S | Luma3DS | O3DS 14d ago

So people are aware, from your more recent post about it elsewhere it looks like it doesn't work. Which seemed the most likely outcome anyway, but I'd advise against anyone else trying this out of curiosity unless you have the ability to read the source code.

It's probably just broken AI nonsense, but you never know.

9

u/ThirdhandTaters 13d ago

You can't just "unlock" a higher resolution from hardware... The new 3ds xl has the largest screen at 400x240 with a simulated 800x240 when the 3D slider is at full. Software cannot just add more pixels to the physical hardware... And if this person claims that they achieve this through simulation just like the console already does, well the console can already do it... There is zero need for some app that may just be malware...

11

u/kirillre4 13d ago

I think it was another way around. It's 800x240 with weird-ass non-square pixels, then it halfed by using those pixels in pairs to form a single square pixel in 400x240 for non-3d. That's actually why cheap replacement to screens don't have 3d - they're straight up simple proper 400x240, not Nintendo special order 800x240.

Now why would anyone want to have this 800x240 unlocked is a mystery as all it would achieve would be giving a forced 0.5x horizontal (vertical stays 1x) scaling to picture, fucking it up completely

3

u/ddnava 12d ago

I mean, I can see the point where the upscaling would look better. When the 3DS runs NDS and GBA games it just scales up the rendered screens to fit the 400×240 screens but that makes the image look blurry because it's a non-integer scaling (1.5× for GBA and 1.25× for NDS)

By enabling 800×240 it would still be 1.5× and 1.25× vertically but the scaling would be 3× and 2.5× horizontally, which would allow for a better picture as each rendered pixel would cover at least one whole pixel horizontally (sometimes 2) resulting in a better picture quality overall

5

u/communist_llama 13d ago

The top screen is physically 800x240, with rectangular pixels.

You can download Mario 64 Render 96 for 3ds and play in 800x240 mode and it's amazing.

12

u/Sufficient_Yogurt639 12d ago

Brought to you by "vibecoderanon" tells me all I need to know.

1

u/Zwodo 11d ago

LMAO I thought you were joking, then I saw the Github handle 🫩

3

u/chupitulpa 12d ago

I'm looking at the source code and I don't think this is going to work, at least in its current state. I see 3 pieces:

config_app: Shows a menu where you can pick options, and then it doesn't seem to do anything or save them anywhere. This part looks half written, like they made a pretty front panel but haven't built any of the stuff it controls yet.

firm_patcher: Does basically what TWPatcher does, but it's a command line tool that you run on a computer to patch a TwlBg or AgbBg you've already dumped from the 3DS. It has 3 scaling matrices you can choose from: nearest neighbor, sharp bilinear, and bicubic. It patches by searching for a signature and copying the selected matrix there. It does nothing to patch the firms to use the 800 pixel mode though, which is the only reason you'd want it. Other than that it's just TWPatcher but more diccifult to use, and with less options. There is also a Python implementation of the same thing. (The rest of the project is in C.)

plugin_3gx: This is a 3gx plugin. It appears it intends to switch the LCD into 800x240 2D mode, and then intercept frames coming from the GPU and rearrange them in the framebuffer into the 800x240 format and optionally apply a custom bezel for 1:1 scaled GBA, DS, GB, Gamegear, NES or SNES games. But it doesn't have the code to actually do any of these things yet. Also, I'm not up on my 3DS graphics programming, but I'm pretty sure that approach wouldn't work, since the GPU would have to render 800 pixels wide of the same view, and no amount of copying and interleaving pixels will make that happen. Also, DS and GBA games run under separate FIRMs where a 3gx plugin isn't going to be running.

Additionally there's a /saltysd/plugins folder containing a sharpscale.elf. I'm not sure what this is supposed to do. It's been a long time but I recall SaltySD being a way to use per-game ips patches instead of full replacement code.bins before Luma added native support for that. I don't recall it taking elf files or supporting universal plugins that run in multiple games like 3gx ones do.

Note that I haven't run any of it, just read the source in the linked Github repository.

The Switch version of it looks a good deal more fleshed out and might actually work. My Switch isn't modded though.