Feasibility of Ps1 games widescreen hacks

Started by azidahaka, September 27, 2016, 04:44:54 PM

Previous topic - Next topic

azidahaka

A few days ago i was wondering if it was possible to enhance older games from the playstation 1 and 2 to support 16:9 aspect ratio, and surprisingly to me i found out that there's already a very good amount of games that have GS codes or patches available to play them on widescreen modern tv sets.

Actually there's already a very big amount of patches not only for psx and ps2, but even for the sega saturn...


Relevant links:
http://forums.pcsx2.net/Thread-PSOne-Widescreen-Patches
http://assemblergames.com/l/threads/sega-saturn-widescreen-hacks-panzer-dragoon-saga-poc.63026/#post-904755


Reading about those it came out that all of those are patches that work on 3d games changing the 3d render settings throught GS codes or by patching the disc.



This while great (look at some of the screens in the sega saturn thread on assemblergames, like the game pandemonium on page 2) leaves out some of the greatest classic of the era that are more 2d based.

My question is, is there a way to mod them in a similar fashion? While the process for 3d games is more or less this 8taken from pcsx2 thread):

QuoteThere is a kind of generic way to do it as I described in a previous post but let me make it as easy as possible:
1. Open epsxe (yes it have to be epsxe and not any other emulator) and attach Cheat Engine (32bit) to it.
2. Set a range of search of 00A579A0 to 00CFFFFF
3. Change the Value Type to 2 bytes
4. Check the hex option next to the Value space and put the value "1000"
5. While on a 3D area do a couple of consecutive searches, then move your camera and your character a bit and press a couple of times again the next search button.
6. You will end up with a number of results that you need to check in the same way like PS2 widescreen hack searching method. Make a save state and start modifying values to "0C00". Once you notice something like the size or the zoom gets modified try to isolate the address responsible. Have in mind that PS1 games and emulators are more prone to crashes that PS2, you might have to reload the savestate and re-attach your Cheay Engine session to epsxe keeping the current searches. Also if you come acress a height modifier or a zoom modifier but not a width modifier you can hit Ctrl+B and search with the debugger nearby addresses (+-200) manually for a possible height modifier, most of the times they are near to eachother.

It's a super nooby tutorial but for now that's the best we can do, atleast this is the best I can offer.
I bet there are hundreds of games that work with that method that wait to be exploited, it's just that the ones I have tried, (including most if not all of the requests here) just didn't work. Also they work perfectly on a real PS1, even Eyefinity ones. I'm stating that because PS1 doesn't support hardware culling which should in theory affect performance when more stuff being squeezed on screen (compared to PS2 that it simply doesn't care) but luckily due to a complex limitation of the way that stuff get rendered on PS1 and how sampling-buffering etc are done it counters as a sideffect the extra weight that would be put to the hardware.
Now the good questing is, how are we supposed to do render fixes on the games that need it? (i.e. Crash series)

I forgot to mention one last thing.
00A579A0 represents address 80000000 on PS1's memory, you need to subtract 00A579A0 from the resulting address and add the result to 80000000, which in your case El_Patas is 8008A590

So the right code should be:
8008A590 1333


There is a kind of generic way to do it as i described in a previous post but let me make it as easy as possible:
1. Open epsxe 1.9.0 (yes it have to be epsxe and not any other emulator) and attach Cheat Engine (32bit) to it.
2. Set a range of search of 00A579A0 to 00CFFFFF
3. Change the Value Type to 2 bytes
4. Check the hex option next to the Value space and put the value "1000"
5. While on a 3D area do a couple of consecutive searches, then move your camera and your character a bit and press a couple of times again the next search button.
6. You will end up with a number of results that you need to check in the same way like PS2 widescreen hack searching method. Make a save state and start modifying values to "0C00". Once you notice something like the size or the zoom gets modified try to isolate the address responsible. Have in mind that PS1 games and emulators are more prone to crashes that PS2, you might have to reload the savestate and re-attach your Cheat Engine session to epsxe keeping the current searches. Also if you come across a height modifier or a zoom modifier but not a width modifier you can hit Ctrl+B and search with the debugger nearby addresses (+-200) manually for a possible height modifier, most of the times they are near to each other.
7. Because 00A579A0 represents address 80000000 on PS1's memory, you need to subtract 00A579A0 from the resulting address and add the result to 80000000.

There are others search and replace values, not only the 1000 - 0C00 one, you can try this ones:

Initial Value (4:3) -> Modified Value (16:9)       Initial Value (4:3) -> Modified Value (Eyefinity)

1000 -> 0C00                                                          1000 -> 0400         
1004 -> 0C03                                                          1004 -> 0401
1999 -> 1333                                                          1999 -> 0666
199A -> 1334                                                          199A -> 0667
12AA -> 0E00                                                          12AA -> 0800
111A -> 0CD3                                                          111A -> 0446
1400 -> 0F00                                                          1400 -> 0800
1164 -> 0D0B                                                          1164 -> 0459
0B98 -> 08B2                                                          0B98 -> 02E6

It's a super nooby tutorial but for now that's the best we can do, atleast this is the best i can offer.
I bet there are hundreds of games that work with that method that wait to be exploited, it's just that the ones i have tried, (including most if not all of the requests here) just didn't work. Also they work perfectly on a real PS1, even Eyefinity ones. I'm stating that because PS1 doesn't support hardware culling which should in theory affect performance when more stuff being squeezed on screen (compared to PS2 that it simply doesn't care) but luckily due to a complex limitation of the way that stuff get rendered on PS1 and how sampling-buffering etc are done it counters as a sideffect the extra weight that would be put to the hardware.
Now the good questing is, how are we supposed to do render fixes on the games that need it? (i.e. Crash series)"

Would it be possible to do the same for classics like Legend of mana or saga Frontier? I'm sure the game do have in its VRAM stored the whole pre-rendered backgrounds in SF case or the sprites in LOM case.

These are just 2 games that come to mind but there's really many many gems that may really feel refreshed if such a patch could be applied.


Anyone with the knowledge to give or kill any hope is welcome; just give me an explanation about the issues/problems unfeasibilities... for i like to learn something if i can :D

FAST6191

Generally for a 3d system then if it is actual 3d and you can expand the viewport you can do that. The troubles tend to come when there are 2d overlays, including some visual effects. The PS1 has a slightly odd approach to 3d with a lack of z buffer and some odd approaches to locations of vertices, though most of the time that is more likely to trouble those wanting to make visual 3d or high resolution rendering modes.

https://www.youtube.com/watch?v=s07TuofVGKw has some good examples of things you encounter, not necessarily on the PS1 and PS2 but in general for this sort of thing. The people doing dolphin and nintendont tried this so there is a bit more video out there on it if you search for that. Other things mirror the issues in doing this for 2d tile based games where things happen at the edge of the screen normally so you might get things pop in and odd AI, all on top of certain games maybe being designed to work at 4:3.

azidahaka

So one would have to expand the pre rendered backgrounds or add black borders where the back is not "wide enough", doesn't seem something impossible?

FAST6191

Impossible? No, however that sort of thing turns it from something the emulator could almost do it as a generic function to needing to go on a game by game basis and either hack the game or alter the emulator.

azidahaka

Quote from: FAST6191 on September 28, 2016, 12:39:44 PM
Impossible? No, however that sort of thing turns it from something the emulator could almost do it as a generic function to needing to go on a game by game basis and either hack the game or alter the emulator.

Do you think an approach as the one i posted before may work or it's just another kind of hack/work?

FAST6191

I guess you could add in a bunch of fixes like paint in borders, background "blank" detection coupled with some seam carving/inpainting to increase resolution in addition to the basic expand viewport/fov. They are all quite hacky solutions and I would prefer some game by game or game specific stuff but none of those, give or take inpainting, is all that intensive to do. You still have the shader stuff to deal with but given the efforts to have to showcase it then most of that is probably not so bad.

gadesx

epsxe 2.0 has the widescreen support, some
games looks good like SFEX1-2 but other like Gran Turismo 2 make garbage  :huh:

azidahaka

#7
Quote from: gadesx on September 29, 2016, 01:57:02 PM
epsxe 2.0 has the widescreen support, some
games looks good like SFEX1-2 but other like Gran Turismo 2 make garbage  :huh:

Does it work in 2d games? and is it an actual 16:9 mode or a stretched image one?

October 04, 2016, 06:06:17 PM - (Auto Merged - Double Posts are not allowed before 7 days.)

If anyone can help out giving a hint on where to start i would be grateful. :angel:

gadesx

It's true 16:9 using the widescreen hack option, not stretched with epsxe

https://www.youtube.com/watch?v=rxlEqkEt2B8