Advertisement
JimB16

Gladius Save file checksum

Apr 5th, 2019
2,261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 5.18 KB | None | 0 0
  1. # The following function calculates and saves the checksum of a save file in the game Gladius (GC version, PowerPC architecture)
  2. # A save game on the memory card consists of 3 save files and one general part that saves the information that is displayed in the load/save screen.
  3. # The general data and the save file data doesn't have to be the same.
  4. # You can load a save file that shows an Ursula playthrough that actually loads a Valens file.
  5. # But if the checksum of the save file is wrong the game won't load it and will show an error message.
  6. # There can be other values that have to be correct, like a time stamp at the start of the file, but I haven't tested that much.
  7. # r3 = start address (points to the save file data that will be written to the memory card (or hdd on XBox)
  8. # r4 = lengh
  9. # r5 = address to save the checksum to
  10. .globl Function_0x80212004
  11. Function_0x80212004: # 0x80212004
  12.    stwu    sp, -0x180(sp)
  13.  
  14.    lis     r6, unk_802e30c0@h
  15.    lis     r7, 0x802e
  16.    stmw    r14, 0x138(sp)
  17.    addi    r14, r6, unk_802e30c0@l
  18.    li      r15, 0x0
  19.    lwz     r16, 0x20(r14)
  20.    lwzu    r0, 0x3080(r7)
  21.    stw     r16, 0x128(sp)
  22.    lwz     r16, 0x24(r14)
  23.    stw     r0, 0x108(sp)
  24.    lwz     r0, 0x4(r7)
  25.    stw     r16, 0x110(sp)
  26.    lwz     r16, 0x28(r14)
  27.    stw     r0, 0x10c(sp)
  28.    lwz     r18, 0x8(r7)
  29.    stw     r16, 0x114(sp)
  30.    lwz     r16, 0x2c(r14)
  31.    lwz     r19, 0xc(r7)
  32.    stw     r16, 0x118(sp)
  33.    lwz     r16, 0x30(r14)
  34.    lwz     r20, 0x10(r7)
  35.    stw     r16, 0x11c(sp)
  36.    lwz     r16, 0x34(r14)
  37.    lwz     r21, 0x14(r7)
  38.    stw     r16, 0x120(sp)
  39.    lwz     r16, 0x38(r14)
  40.    lwz     r22, 0x18(r7)
  41.    stw     r16, 0x124(sp)
  42.    lwz     r16, 0x108(sp)
  43.    lwz     r23, 0x1c(r7)
  44.    stw     r16, 0x48(sp)
  45.    lwz     r16, 0x10c(sp)
  46.    lwz     r24, 0x20(r7)
  47.    stw     r16, 0x4c(sp)
  48.    lwz     r16, 0x128(sp)
  49.    lwz     r25, 0x24(r7)
  50.    stw     r16, 0x28(sp)
  51.    lwz     r16, 0x110(sp)
  52.    lwz     r26, 0x28(r7)
  53.    stw     r16, 0x2c(sp)
  54.    lwz     r16, 0x114(sp)
  55.    lwz     r27, 0x2c(r7)
  56.    stw     r16, 0x30(sp)
  57.    lwz     r16, 0x118(sp)
  58.    lwz     r28, 0x30(r7)
  59.    stw     r16, 0x34(sp)
  60.    lwz     r16, 0x11c(sp)
  61.    lwz     r29, 0x34(r7)
  62.    stw     r16, 0x38(sp)
  63.    lwz     r16, 0x120(sp)
  64.    lwz     r30, 0x38(r7)
  65.    lwz     r31, 0x3c(r7)
  66.    lwz     r12, 0x0(r14)
  67.    lwz     r11, 0x4(r14)
  68.    lwz     r10, 0x8(r14)
  69.    lwz     r9, 0xc(r14)
  70.    lwz     r8, 0x10(r14)
  71.    lwz     r7, 0x14(r14)
  72.    lwz     r6, 0x18(r14)
  73.    lwz     r0, 0x1c(r14)
  74.    lwz     r14, 0x3c(r14)
  75.    stw     r16, 0x3c(sp)
  76.    lwz     r16, 0x124(sp)
  77.    stw     r18, 0x50(sp)
  78.    stw     r19, 0x54(sp)
  79.    stw     r20, 0x58(sp)
  80.    stw     r21, 0x5c(sp)
  81.    stw     r22, 0x60(sp)
  82.    stw     r23, 0x64(sp)
  83.    stw     r24, 0x68(sp)
  84.    stw     r25, 0x6c(sp)
  85.    stw     r26, 0x70(sp)
  86.    stw     r27, 0x74(sp)
  87.    stw     r28, 0x78(sp)
  88.    stw     r29, 0x7c(sp)
  89.    stw     r30, 0x80(sp)
  90.    stw     r31, 0x84(sp)
  91.    stw     r12, 0x8(sp)
  92.    stw     r11, 0xc(sp)
  93.    stw     r10, 0x10(sp)
  94.    stw     r9, 0x14(sp)
  95.    stw     r8, 0x18(sp)
  96.    stw     r7, 0x1c(sp)
  97.    stw     r6, 0x20(sp)
  98.    stw     r0, 0x24(sp)
  99.    stw     r16, 0x40(sp)
  100.    stw     r14, 0x44(sp)
  101.  
  102.    mtctr   r4
  103.    cmpwi   r4, 0x0
  104.    beq-    branch_0x80212248
  105. branch_0x80212170:
  106.    lbz     r16, 0x0(r3)
  107.    srwi    r17, r15, 8
  108.    lwz     r4, 0x108(sp)
  109.    addi    r3, r3, 0x1
  110.    stw     r18, 0x90(sp)
  111.    stw     r4, 0x88(sp)
  112.    xor     r4, r15, r16
  113.    lwz     r15, 0x10c(sp)
  114.    clrlslwi  r16, r4, 28, 2
  115.    stw     r19, 0x94(sp)
  116.    stw     r15, 0x8c(sp)
  117.    rlwinm  r15, r4, 30, 26, 29
  118.    addi    r4, sp, 0x88
  119.    stw     r20, 0x98(sp)
  120.    stw     r21, 0x9c(sp)
  121.    stw     r22, 0xa0(sp)
  122.    stw     r23, 0xa4(sp)
  123.    stw     r24, 0xa8(sp)
  124.    stw     r25, 0xac(sp)
  125.    stw     r26, 0xb0(sp)
  126.    stw     r27, 0xb4(sp)
  127.    stw     r28, 0xb8(sp)
  128.    stw     r29, 0xbc(sp)
  129.    stw     r30, 0xc0(sp)
  130.    stw     r31, 0xc4(sp)
  131.    lwzx    r15, r4, r15
  132.    lwz     r4, 0x128(sp)
  133.    stw     r12, 0xc8(sp)
  134.    stw     r4, 0xe8(sp)
  135.    lwz     r4, 0x110(sp)
  136.    stw     r11, 0xcc(sp)
  137.    stw     r4, 0xec(sp)
  138.    lwz     r4, 0x114(sp)
  139.    stw     r10, 0xd0(sp)
  140.    stw     r4, 0xf0(sp)
  141.    lwz     r4, 0x118(sp)
  142.    stw     r9, 0xd4(sp)
  143.    stw     r4, 0xf4(sp)
  144.    lwz     r4, 0x11c(sp)
  145.    stw     r8, 0xd8(sp)
  146.    stw     r4, 0xf8(sp)
  147.    lwz     r4, 0x120(sp)
  148.    stw     r7, 0xdc(sp)
  149.    stw     r4, 0xfc(sp)
  150.    lwz     r4, 0x124(sp)
  151.    stw     r6, 0xe0(sp)
  152.    stw     r4, 0x100(sp)
  153.    addi    r4, sp, 0xc8
  154.    stw     r0, 0xe4(sp)
  155.    stw     r14, 0x104(sp)
  156.    lwzx    r4, r4, r16
  157.    xor     r4, r15, r4
  158.    xor     r15, r17, r4
  159.    bdnz+      branch_0x80212170
  160.  
  161. branch_0x80212248:
  162.    stw     r15, 0x0(r5) # save checksum
  163.    lwz     r0, 0x0(r5)
  164.    cmplwi  r0, 0x0
  165.    bne-    branch_0x80212260
  166.    li      r0, 0x1
  167.    stw     r0, 0x0(r5)
  168. branch_0x80212260:
  169.    lwz     r3, 0x0(r5)
  170.    addis   r0, r3, 0x1
  171.    cmplwi  r0, 0xffff
  172.    bne-    branch_0x80212278
  173.    li      r0, 0x2
  174.    stw     r0, 0x0(r5)
  175. branch_0x80212278:
  176.    li      r3, 0x1
  177.    lmw     r14, 0x138(sp)
  178.    addi    sp, sp, 0x180
  179.    blr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement