Moving Queens Save Disk
Collecting info to get started:
PC codes to move the Queens disk to the coffee table in the main room of the unused LA Big House. This is the data we need to write. It needs to be changed from decimal floating point to IEEE 754 floating point. See IEEE Calc.
0004: $SAVE_PICKUPS_X = 2324.5
0004: $SAVE_PICKUPS_Y = -1141.85
0004: $SAVE_PICKUPS_Z = 1050.39
0004: $SAVE_POINTS_X = 2324.25
0004: $SAVE_POINTS_Y = -1144.5
0004: $SAVE_POINTS_Z = 1049.89
0004: $SAVE_POINTS_ANGLE = 180.0
PS2v2 equivalent with appropriate global variable numbers. 0004: is the opcode for assigning values. It'll translate roughly to 20, write 4 bytes, before the address we need for our RAW code.
0004: $901 = 2324.5
0004: $919 = -1141.85
0004: $937 = 1050.39
0004: $955 = 2324.25
0004: $973 = -1144.5
0004: $991 = 1049.89
0004: $1009 = 180.0
The $ symbols are used in scripting to signify a global variable. These are variables that can be saved and control many things about how the game works, like where the save disks get replaced after a save or mission. Each variable is 4 bytes in length; so that will be our record size for this calculation. If we know the starting address of the global variable space, and the global variable we need, we can calculate the address. Tip, if you add the starting address after calculation the offset you can work the formula without using parenthesis, which simplifies coding. The starting address for the global variable space and many other structures are included in the table posted on the first page.
NTSCv2 0x6B2770 - start of global variable space. Let's convert that to decimal. Using the radio buttons on Window's Calculator in programmer's mode. 7022448
NTSCv2 7022448 - start of global variable space.
I'll try the first one.
0004: $901 = 2324.5
Lets start with write 4 bytes; 20
Next we need the address. So 901 * 4 + 7022448 = 7026052.
Convert that back to hex, and add an 0x designatior so we know it's hex when we are writing. 0x6B3584
So the first part of this line is 206B3584. Now we need the data value.
Stick 2324.5 into the Number field of IEEE Calc with the float radio selected and hit show to get 45114800. Um... This is just a fancy way for computers to record numbers with decimal point values, very large numbers, or very small numbers, in only 4 bytes, but there is a lack of precision involved in the process, but that shouldn't matter for now. We just need to stick the value in our code. So now we've got the first line complete.
206B3584 45114800 - only 6 more lines for a complete code, plus the master code at the top, like always.
Let me try that again with the Madd Dogg disk data to make sure I did it right.
$891 =$SAVE_PICKUPS_X // Madd Dogg's
891 * 4 + 7022448 = 0x6B355C
206B3558 for the first part of the code. Let's see what the old data says about that.
Move Madd Dogg's Disk - NTSCv2