The information stored in the of the save files is almost exactly the same on PS2 and PC, and this structure is very well documented Wiki for SA Saves. If you wanted to change something on a PS2 save that couldn't be changed with AR-Max codes you could open the .b save file with hex editor, change the appropriate bytes manually, adjust the checksum at the end of the file, and then load the save.
An example would be changing the max wanted level. I don't think we ever identified where this information was stored in memory but it isn't hard to find in the save. Change the 4 to a 0, subtract 4 from the checksum, and you're done. Another example would be fixing the Madd Dogg Glitch. This information is stored in dynamic memory so it isn't in the same place in memory and can't be adjusted with AR-Max codes. This fix requires changing a dozen or so bytes so it would be easier to use pdescobar's SA Checksum Fix utility to calculate the new checksum.
Block Copy - using copy and paste in a hex editor to move large sections of data from one save to another.
The different sections of memory stored in a save file begin with the keyword BLOCK. Hence the name, block copy. One of the first edits I tested on PS2 saves was to copy the entire garage block from our modified PC save and pasted it directly the same block in a PS2 save. It worked! Then I copied the car generator block to the PS2 save. Since we had added lots of extra vehicles this block was larger than the original so I had to trim the slack at the end of the save to maintain the proper file size. This is basically how I made all of the changes to the Chain Game for PS2 save.
Script and IPL Editing - Changing the data files used to the create the save.
This process doesn't work well on PS2 because changes will need to be written to the disc, burned in a special format, and run on a PS2 with a mod chip installed. Not only is this extremely difficult, it may also be illegal, so let's just dump this into the area of can't/won't work and forget about it. On PC, we can decompile the game scripts into a programming language which is much easier to read and adjust than the hex code found in memory or save files. The IPL files used to create garages and make enex connections are in plain text and fairly easy to modify. The main advantage to this method is that it is much easier to make and test large scale modifications.
Modding with CLEO - A process that allows programming changes and direct memory writes.
When rubregg joined the Chain Game Development Team we abandoned the process of modifying the scripts and data files and now use CLEO to make all of the changes. Cleo functions (to the best of my understanding) in a manner similar AR-Max in that it runs side by side with the game and scripts. You can set it to run a certain section of code when a button is pressed or certain conditions are met. The codes often look very similar to game scripts, but in many cases it is easier to write data directly into memory. I learned quite a bit from our experiments with coding in AR-Max.
Globals and Indexing - Maintaining compatibility between saves and scripts.
|014B: $2194 = init_parked_car_generator #NRG500 color -1 -1 1 alarm 0 door_lock 0 0 10000 at 1174.467 1368.359 10.1203 angle 283.0546|
The line above creates the NRG-500 parked at the bike school. $2194 is the global variable used to identify this vehicle so when the bike school is completed for gold the bike can be displayed with the code shown below.
|014C: set_parked_car_generator $2194 cars_to_generate_to 101|
When the vehicle is created the game will put the bike in the first available memory slot and record the index number of this slot in the global variable. When the game is saved the index number of the vehicles are recorded just before the data so the vehicles can be put back into the same place when the save is loaded.
The reason I bring all this up is that although my block copy of the car generators appeared to work, I would soon run into trouble if I tried to play missions with this save. For starters, the global variables are sometimes different than the PC globals on PS2v1, and always different on PS2v2. Also, the index is different on different versions, and is also different on the same version depending on whether or not the save was started after loading an existing save. So as I play through the game and the combines, vortexes, karts, aircraft, exports, and reward vehicles are displayed or hidden it is difficult to predict which vehicles will get modified. However, it is possible. Everything can be predicted and adjusted. It just requires a lot of planning and research to either adjust the index numbers stored in the globals, or to put the vehicles in the appropriate slot so they get matching index numbers.