Thanks sergx12! I put the codes on Dolphin Wiki.
For Sonic Adventure, can you check this out?
[
attachment=55130]
Water is broken during the first Eggman fight.
Also, the black fade-in-fade-out screens are still in 4:3, any way to disable them entirely or stretch to widescreen?
One more request, can you do a Sonic Heroes render fix?
(05-09-2015, 03:13 PM)monsterjamp Wrote: [ -> ]@Aced14: Nice, I was actually trying to figure out how to make a patch for Frequency based on your post about Amplitude. If you don't mind me asking, can you explain how you figured out the patch again? I understand you overwrote some code with your own code and I sort of understand MIPS assembly. But how did you find which address to write to (How did you know to overwrite $f0)?
Based on your reference to $f0, I presume you're talking about MIPS registers as opposed to addresses.
What I did was use PCSX2's debugger. I setup a breakpoint on one of the memory addresses Amplitude's ELF file was about to write the X FOV into. When I loaded my savestate and encountered the breakpoint, I went to the debugger's "Registers - FPR" tab. It contains an outline of all float registers' values at that point in time. All of the latter float registers ($f20 through $f31) appeared to be unused because they all contained 0.000000.
Amplitude's ELF file normally writes $f0's value into the aforementioned memory address. I ended up injecting a jump command right before it writes to that address. It goes to an area of the ELF file's memory I overwrote with custom MIPS logic. From there, I loaded 0.75 into the unused $f31 register, multiplied the $f0 register's value against it, then stored the result back into $f31. The reason I didn't use $f0 for the result is because the ELF file still uses $f0 for a couple of division calculations after its value gets written to memory. I didn't want to interfere with those calculations. I then wrote $f31's value into the memory address I keep referring to instead of $f0's value. Finally, I jumped back to where I came from (2 lines latter).
Is that the kind of information you were looking for? If you're still unsure about anything or have a more specific question, I could try to explain further
.
(05-09-2015, 03:13 PM)monsterjamp Wrote: [ -> ]Also how did you convert the MIPS code to a pnach?
I usually use ps2dis to do it, but other ways exist too.
Keep in mind that there are sometimes differences in how the tools I'm about to cover interpret and/or display plain-text MIPS instructions (HEX representations should always be the same). I personally use ps2dis as my "benchmark" for MIPS instructions. When I develop pnaches that necessitate injecting custom MIPS logic, I include ps2dis' plain-text instructions in line comments.
Here's how to do it with ps2dis...
- Open an ELF file in ps2dis.
- Go to "Analyzer - Invoke Analyzer" (probably isn't necessary for your purpose - but it's the first thing I always do).
- Go to any line of code and double-click it.
- In the pop-up window, enter a MIPS instruction into the "Command" field. The "Data" field's value will change on-the-fly. "Data" is a HEX representation of the instruction. I usually copy its value for use in Cheat Engine (for testing) and my pnaches.
- Repeat the previous step as many times as needed.
Other tools that can achieve the same kind of purpose...
- Pelvicthrustman's PS2 Hacking Toolkit - MIPS Mini Assembler:
- Allows you convert MIPS instructions to HEX, one at a time.
- PCSX2's debugger:
- Run a game in PCSX2.
- Go to "Debug - Open Debug Window..." in PCSX2's file menu. If it's not there, upgrade to the latest Git version of PCSX2.
- Click the "Break" button.
- Select any line of code in the right panel and start typing. An "Assemble opcode" window will automatically pop-up, showing what you're typing in.
- Finish typing your MIPS instruction, then click the "OK" button.
- Right click on the line you modified and select "Copy Instruction (Hex)".
- Repeat steps 4-6 as needed.
Edit: Added more context as to why I didn't directly store my widescreen calculation's result in the $f0 register instead of $f31 (third paragraph after the first quote block).
Thanks, that's really helpful. I've never used PCSX2's debugger and I didn't know how to find when the fov value was being written. Your post clears up a lot of confusions I had.
Nemesis, is it possible to widescreen hack the updated Steam version of Sonic Adventure?
A patch was released in September 2014 which made previous widescreen hacks incompatible.
If you'd like, I can gift you a free copy of it via Steam if you promise to check it out.
I'd like to request a Widescreen patch for Shadow Hearts NTSC-U (the first game).
(03-26-2015, 06:28 PM)No.47 Wrote: [ -> ]So the patch works on your PS2 but not on the PS3?
(At least it should work on PS2, since it does for me...)
It's a memory patch, so converting to search/replace hex pattern with PNACH converter won't work. Embedding with Patch Engine should theoretically work, but I don't know what could go wrong when emulated on a PS3 - sure, it's a backwards compatible PS3, but still...
EDIT, this is what I'm using. Just in case...
Code:
"Sega Rally Championship /ID SLPM_627.03"
Mastercode
901CCB58 0C07327E
Widescreen
2030f990 43610000
2030f9e0 42e10000
2030fa94 43a8c000
20310340 43960000
203105d8 43960000
20310718 43960000
20310878 43834000
203114ec 3faaaaab
20311650 00000000
Thanks
I tested the iso patched with my old PS2 and I have the same issues: partial widescreen: game select and car select widescreen but in game no widescreen.
How to patch it manually? With patch engine not worK.
Thanks
(05-13-2015, 04:37 AM)rmcin329 Wrote: [ -> ]I'd like to request a Widescreen patch for Shadow Hearts NTSC-U (the first game).
Already in archive, only works in 3D battles.