Question about the IPS format - Printable Version +- FF6 Hacking (https://www.ff6hacking.com/forums) +-- Forum: Discussion Forums (https://www.ff6hacking.com/forums/forum-5.html) +--- Forum: Magitek Research Facility (https://www.ff6hacking.com/forums/forum-9.html) +--- Thread: Question about the IPS format (/thread-3588.html) |
Question about the IPS format - NPCnextdoor - 12-22-2017 Hello, I'm been interested in hacking SNES games for many years but only now did I finally caved in my desires and seriously started to tiptoe into the wonderful world of the 65816 processor. Only problem is that I'm using Linux. I just created a very small hack that basically centers the characters' full name in the end credits and change Shadow's name to Clyde Arrowny. Using the extra space freed by the removal of the letter "w", I also was able to create pointers for everybody's last name, because reasons! BUT I can't create an IPS patch out of it. I tried Sure, I could: x. Setup a Windows VM and use the tools that are already available. x. Fix whatever is my dependancy problem with EWingIPSPatcher (a patcher made for Linux that doesn't work for me for some reason). But I want to take the unnecessary complicated route and create my own tool. In order to do that, I have one simple question: how does the IPS format work exactly? I get the impression that this is a set of commands saying (put value X in address Y), but I wasn't able to find documentation on how the IPS file itself is created. Thanks for any information you can provide. I also have an unrealted question, where in the code of Final Fantasy are the text functions located? How about the end game character name display? RE: Question about the IPS format - Gi Nattak - 12-22-2017 Hello and welcome! I doubt I could answer your first question just because I'm not experienced with Linux... I mean, I know how to make a IPS patch easily enough with a program such as Lunar IPS or SNEStuff, but I suspect your question is more than that, so hopefully another can shed light on that. As for text functions, which ones? The end game character name display, check here: https://www.ff6hacking.com/forums/thread-1667.html?highlight=ending+names and here on the wiki for a permanent link to the breakdown chart Madsiur put together: https://www.ff6hacking.com/wiki/lib/exe/fetch.php?media=ff3:ff3us:doc:game:ff3us_ending_names.zip RE: Question about the IPS format - m06 - 12-22-2017 I have this short doc for the IPS file format. The format is pretty simple and similar to what you imagined: Code: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The address and chunk size are stored big endian if I remember correctly. The single byte filler is also known as RLE compression: https://en.wikipedia.org/wiki/Run-length_encoding and welcome to the forum! RE: Question about the IPS format - NPCnextdoor - 12-23-2017 Thank you, Gi Nattak! Yes, I am aware of Madsiur's document as I used it to build a spreadsheet and start messing around with the values. Unfortunately, Lunar IPS and SNEStuff do not work on Linux. But, good news, I was able to find this link: IPS (binary patch format) In fact, the IPS format is incredibly simple. So mush so that I just created the IPS file manually by copy-pasting the values from my spreadsheet. Basically, an IPS patch is composed of: 1. An header of 5 bytes: 50 41 54 43 48 (PATCH). 2. A 3-byte offset (big-endian) where information (payload) in the soon-to-be patched file will change. 3. A 2-byte length of the payload. 4. The payload itself 5. Rinse and repeat step 2 to 4. 6. An EOF value (45 4F 46) And also RLE compressions like m06 said, which I don't understand for the moment. I just came back from my D&D night. I will post my IPS tomorrow. RE: Question about the IPS format - GrayShadows - 12-24-2017 There's also Floating IPS/Flips (https://github.com/Alcaro/Flips), which runs command line and has a GTK+ gui for Linux. I haven't actually tested it yet, but it's *supposed* to run. |