Sappharad / MultiPatch

Multi-Format File Patching App for macOS
http://projects.sappharad.com/multipatch/
GNU General Public License v2.0
191 stars 16 forks source link

[Request] RUP Support #1

Closed GB-CG closed 5 years ago

GB-CG commented 8 years ago

Hello there! Any chance of RUP being added to MultiPatch? Currently, I use Ninja for RUP patching.

Sappharad commented 8 years ago

I've never heard of this format before, I doubt it's very common. I'd be glad to support it, if there's an open source implementation available for it in a C-like language.

In my search, nothing of the sort appears to exist. At the moment, I don't really have any interest in implementing something from scratch. If it was popular or better than the alternatives, I might give it a try, but BPS seems to be very good for modern games.

GB-CG commented 6 years ago

Sorry, forgot to ask, have you looked at this?: https://github.com/sobodash/ninja or http://www.romhacking.net/documents/140/

Sappharad commented 6 years ago

For some reason I seem to recall you linking to these, or maybe I found them when you first brought this up. The PHP one is promising, I can't use it directly of course but I could translate it to C.

It's still a low priority, since it's only used by a few patches and the guy who came up with the format also started using BPS himself. I'll keep this here though, it's worth trying at some point.

Sappharad commented 6 years ago

Comprehensive list of every .RUP patch ever released?

http://www.romhacking.net/translations/640/ http://www.romhacking.net/translations/799/ http://www.romhacking.net/translations/843/ http://www.romhacking.net/hacks/129/

@GB-CG Know of any others?

GB-CG commented 6 years ago

There's this one. I'll try look around for some more.

Sappharad commented 6 years ago

So I've started looking at writing a patcher, and grabbed copies of the patches above. The PHP source you linked above only covers RUP version 1, while every single one of the patches linked in this thread is for version 2. That kind of sucks, because I won't be able to use the v1 code as a reference since the format changed. I can't find any version 1 patches.

Should I just support version 2 then? Either way, it's going to be patching only. No creation, since BPS made the format obsolete. Let me know if you find any more patches, so I can check if they're v1 or v2.

GB-CG commented 6 years ago

Should I just support version 2 then?

I guess so. Did you get in touch with Sobodash regarding this?

it's going to be patching only.

That's OK, since the Ninja creator works with Wine at least.

Sappharad commented 6 years ago

Should I just support version 2 then?

I guess so. Did you get in touch with Sobodash regarding this?

No, I didn't see any reason to. Someone logged an issue on his Github back in May and there was no response to it.

it's going to be patching only.

That's OK, since the Ninja creator works with Wine at least.

It'll work in macOS as well. He wrote it in PHP, so you can just use it via the command line Terminal.

I was doing more research into Ninja 2 and discovered that his patcher required .NET Framework, which was initially very exciting because it meant I could decompile it to C# and just translate his code. Sadly, once I got into the code I realized it's just calling php via command line to do the actual patching and there's a php folder included with the patcher that contains the PHP runtime plus his patcher.

On the plus side, that directory includes the Ninja 2 PHP code, so I have something to use as a reference. Not sure why he didn't put that version on his Github instead of the old version 1 code.

Sappharad commented 5 years ago

Commit 6588d8b70619bec97ede3f741e0df16dad5181ca is the first of several for Ninja2 support.

Tested against http://www.romhacking.net/translations/640/ and successfully applied that patch. RUP has separate logic for 8 different consoles, and I've only handled NES so far so that is the only patch which will work right now because none of the others are NES. Even NES isn't finished, because only iNES format is implemented right now.

I will continue adding the rest of the consoles as time permits. The actual patching part is done, just the console-specific bits are necessary to patch the other systems. No estimate when this will be done. I will test all patches documented here. Creating patches will not be supported, since the format is deprecated in favor of BPS and nobody should create new patches in it.

Sappharad commented 5 years ago

Ninja2 support is completed. I have tested all patches linked in this thread and they all apply successfully.

Attached is a beta build. MultiPatch.zip

If no issues are discovered in the next few days, I will release a new version next Monday.

Sappharad commented 5 years ago

Did some testing and found it was broken on macOS 10.7 and fixed that. Released MultiPatch 1.7

GB-CG commented 5 years ago

So I've tested the N64 one (Virtual Pro Wrestling 2 english patch) and can confirm it works! Thank you for the implementation.