[about] [features] [changes] [download] [docs] [screens] [faq] [contact] [bugs]

NINJA: The only patching format with REAL, ultimate power


Updates

Wow, it's hard to believe a year has gone by since I was last working on this. NINJA is not dead, but it's currently in a period of intense development.

First off, the NINJA2 format is now obsolete. All working is being moved to NINJA3, a combined effort between byuu and I. Essentially, it will be Ninja3UPs or something similarly named. byuu developed a good patching scheme he has termed ups, but it lacks the power to handle console formats like NINJA does. Essentially, NINJA will be the container for UPS files in a symbiotic relationship like the OggVorbis project.

Both of us are busy right now. byuu is busy with his bsnes project, and I am busy with libPirate, my new PHP library which will be the back end of NINJA and several other projects. It is an extremely robust library with GTK bindings and more, and projects developed for libPirate will be operable in both console and GUI mode. Best of all, since it's PHP-GTK, it will run on any platform with no recompiling as long as the user installs a PHP+GTK runtime environment. For Windows and Ubuntu users, this will be easy. I'm still working out the kinks for Mac OS X deployment, but I'm getting there.

I would not expect any major updates on this for the next several months. My coding time is incredibly limited now, and the libPirate site is far behind what is actually in the code. In fact, it reflects what was done several revisions ago.

I'm hopeful to have something together by the end of the year. It depends on whether or not I include the graphical functions in libPirate 1.0.0, or delay their inclusion until a future release. They are by far the most challenging part of the project.

So, NINJA isn't dead. Just very, very delayed.

In other news, I recently located the VB source code for the front end seen below. I'll post it soon as a reference for anyone writing something similar.


About

For the past ten years, IPS, the International Patching System invented by some unknown people during the Amiga computer days, has remained the standard patch method throughout the history of the translation and ROM hacking scenes. However, IPS has some severe limitations:

As translations branched onto newer and larger systems, PlayStation Patch Format (PPF) was developed to allow patching files up to 32-bit, and later 64-bit. Though the size issue has been solved for now, there are other problems specific to ROM translation.

Not all ROMs were created equal. Some have headers, some are interleaved, some are incompletely different formats: compare UNIF and interNES if you need a stunning example of just how different.

NINJA is the first patching system to solve these problems by being able to read ROMs and convert them all to one simplified format. The patch is then created off this format so that when applied to another file, it too can be converted to this base format and still work.

Gone are the days of teaching users how to run ucon64 to deinterleave a ROM, telling them to delete the first 512 bytes or add them to make a patch work. Gone are the days of patches only working on V64 files but not Z64. If you make your patch with NINJA, you can be confident it will work on any target ROM that is not a different version or a completely bad dump.

And with a maximum of 2048-bit addressing (a 32,317,006*10600 byte file) NINJA won't be going the way of the dinosaur any time soon. NINJA also supports creating a patch between folders, not just single files!

NINJA's patching program also supports applying your old patches such as IPS, PPF, FireFlower Patch Format, the Generic Diff Format (binary), and you can even use Microsoft's File Compare's (fc /b) output as a patching and unpatching system!

If using the Windows version of NINJA, you can associate your patch files to run with NINJA on double-click. NINJA's options include icons to match your "plain vanilla" Luna icons, or if you're into customization, CrystalXP's Crystal Clear icons based on Everaldo's Crystal series, or Windows Vista.


Format Features


Recent Changes


Choose your OS

NINJA 2.0 (beta 20060726)

The current line of NINJA patchers. As NINJA 2.0 is currently beta software, these links may be updated frequently.

Microsoft Windows Windows GUI & CLI (98/Me/2000/XP) (requires .NET Framework 2.0)

Multi-Platform Multi-Platform PHP Source (requires PHP)

NINJA 1.01

These files are provided for archival purposes only. NINJA 1.0 is no longer a supported format, and you are advised not to create new patches with it.

Command Prompt Windows CLI *unsupported* (98/Me/2000/XP) (CLI)

Multi-Platform Multi-Platform PHP Source *unsupported* (requires PHP)


Documentation

Text Document NINJA's command line options (for Multi-Platform PHP version)

Text Document NINJA 2.0 File Format

Text Document NINJA 1.0 File Format *unsupported*

Text Document How NINJA Converts ROMs


Screenshots

From the patch applier:

English language patcher
English language patcher

Chinese language patcher
Chinese language patcher

Language menu
Language selection menu (Don't see your's?)

File association menu
File association menu

Windows icons in Crystal Clear style
Windows icons in Crystal Clear style

Windows icons in Aqua style
Windows icons in Aqua style

Windows icons in Vista style
Windows icons in Vista style

Windows icons in Luna style
Windows icons in Luna style

From the patch creator:

English language creator
English language patch creator


Frequently Asked Questions

Will NINJA allow me to unpatch my IPS/PPF/GDIFF files?

No, NINJA does not and never will support such options. IPS and PPF are unidirectional formats that store none of the data necessary to unpatch a file. PAT/FFP/UPS formats do contain the necessary data for an unpatch procedure, and NINJA will use them. NINJA's native format, RUP, also supports unpatching.

Why does every patch type have the same icon in the Tango style?

Tango originated as a Unix project, thus all files are typed by MIME types, not extensions. This means all icons of type "application/x-patch" will share the same icon. To keep the Tango style, NINJA only has one patch icon in the Tango theme.

Why is it so slow to create a patch?

NINJA is not as slow as you think. While its patch creation time is a little bit laggy on some low-end systems, on most it should be fine. Part of the lag in smaller files comes from NINJA's block scanning method. In order to save time, NINJA compares the files one sector at a time. If the sectors do not match, it then will proceed to scan through that sector noting all differences. In large files, this allows large blocks of data to be skipped through quickly. However, in small files with many cases of two bytes being modified, one skipped, then two modified, NINJA will slow down as it creates separate patches. A faster implementation would be to just store the XOR of a mismatched sector, which would have null values for all matching bytes and technically still include no copyrighted data. A patch created this method would still function perfectly in all NINJA compliant patchers, but would have a much larger filesize.

How can I change my language? Where are all the options?

To avoid cluttering the main window, all options are accessible from the About dialog.

Why don't my icon changes take effect immediately?

This is a defect of Windows Explorer, the default Windows shell. You need to force Explorer to refresh and re-read the Windows registry. Sometimes pressing "F5" will do this, otherwise you may need to reboot or End Task explorer.exe and reload it.

Why does NINJA crash as soon as I open it (0xc0000135)?

NINJA is built on the .NET 2.0 Framework. If you do not have this installed, you cannot run NINJA's GUI. An install link is provided in the downloaded section. If you refuse to install .NET, you may use NINJA from the command line. Instructions are provided in readme.txt.

NINJA flipped out and decapitated my hard drive. What can I do?

By using NINJA you waive your right to claim any damages against its creator, Derrick Sobodash. There isn't much you can do except hope NINJA doesn't flip out again and decapitate your mom.

I heard NINJA's file extension stands for Real Ultimate Power. Is this true?

Yes.

I heard NINJA's file extension stands for Real Ultimate Pirates. Is this true?

No. While pirates are indeed ultimate, they are decidedly not real.

I like living dangerously. Can I try to install the latest W.I.P. code of libPirate in my $NINJAPath$php folder?

Yes, but if anything breaks, you know why. Users are advised to never upgrade with anything except milestone releases of libPirate.

I heard I can use Microsoft File Compare output as a patch file. How does this work?

The Windows command line supports an option "fc" for "file compare." This option allows you to compare two files and will list all difference to the screen one at a time. To create a patch with this, type: "fc /b FILE1 FILE2 >PATCH.PAT". If you would like to add an information block or comments to the result, you can open PATCH.PAT in a text editor and type whatever you like. All lines not in the form of "OFFSET SRC_BYTE MOD_BYTE" are treated as comments and show to the user during patching.


Contact

NINJA is developed and designed entirely by Derrick Sobodash. If you have any questions, you may contact him with any concerns related to NINJA.

The artist who designed the Tux ninja icon is unknown. If you know the artist's name, please write in so proper credit may be given.


Copyright © 2004 - 2006 Derrick Sobodash
Validates as XHTML 1.0 Strict