I've always wondered how the widescreen patch+cheat combo works in an old 3ds where the stretching only affects the width
Actually, the patches work the same on both new3DS and old3DS.
There are two widescreen patches: MTX and GPU.
MTX is the capture card and image upscaler hardware for DS(i)/GBA games.
Long story short, it can take the average of pixels, and you can give a value on how much the neigboring pixels should contribute to the average.
The reason it looks so bad is (long story short) because the matrix data for widescreen and non-widescreen is different, so I'd have to reverse-engineer the existing matrixes, and "port" them to widescreen, which is a tedious and math-intensive task, something which I'm not really capable of. It's also way too much extra work, and way too complex of a patch to implement, so I decided to simply "zero out" the widescreen matrix, hence it looks so bad.
And yes, this is why vertically it's still affected by stretching, as it's the same height as the original matrixes, so they are compatible, and don't need to be zeroed out. This is the case because horizontal and vertical stretching is done independently from eachother.
GPU scaling works by patching the GPU driver to always "blur" the image using linear interpolation, and I just screw up the aspect ratio of the top screen enough so it stretches the image to 384x240 (the same as MTX stretches it to in widescreen mode).
I intentionally used the the words "screw up", as I'm destructively patching the GPU driver, so that the top screen is *always* stretched. The screen dimensions are hardcoded in so many places, that patching them is impossible, and it even causes bugs and crashes, so I simply can't, due to the hodgebodge of drivers, and how they interact with eachother.
Yes, this does mean I do need to corrupt the GPU driver for this patch, which is why it's so buggy
No, I can't work around this. Nintendo uses THREE (that is 3) graphics drivers, and they all glued it together in a bad and unstable way, and it's just a mess. I tried everything. It's just bad. Not again, please!
Edit: this is why I can't implement a mode800 patch, as the image data itself is hardcoded to be 240x400, and the drivers are so bad that there is simply no way to make it work.