Difference between revisions of "Extract Palette Data"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with " # ROUTINE: EFFECT PALETTE SETUP # Parameters: # r4 = (effectID) Effect ID 801a0e80: 27bdffe0 addiu r29,r29,-0x0020 801a0e84: 3405000c ori r5,r0,0x000c...")
 
 
Line 1: Line 1:
  #  ROUTINE: EFFECT PALETTE SETUP
+
  #  ROUTINE: EXTRACT PALETTE DATA
 
  #      Parameters:
 
  #      Parameters:
  #          r4 = (effectID) Effect ID
+
  #          r4 = (palette) Palette data pointer (Two-byte packed values)
 +
#          r5 = (sectionID) Section ID
 +
#          r6 = (p3) ? (For effects, 0?)
 +
#          r7 = (p4) ? (For effects, 1?)
 
   
 
   
  801a0e80: 27bdffe0 addiu r29,r29,-0x0020
+
  800926d8: 27bdffe0 addiu r29,r29,-0x0020
  801a0e84: 3405000c ori r5,r0,0x000c                12
+
  800926dc: afb20018 sw r18,0x0018(r29)
  801a0e88: 00042400 sll r4,r4,0x10
+
800926e0: 00a09021 addu r18,r5,r0                   sectionID
  801a0e8c: 00042383 sra r4,r4,0x0e                   #  effectID * 4
+
  800926e4: 00121080 sll r2,r18,0x02                  #  sectionID * 4
  801a0e90: afbf001c sw r31,0x001c(r29)
+
  800926e8: 00521021 addu r2,r2,r18                   #  sectionID * 5
801a0e94: afb00018 sw r16,0x0018(r29)
+
  800926ec: 00021080 sll r2,r2,0x02                  #  sectionID * 20
  801a0e98: 3c01801b lui r1,0x801b
+
  800926f0: 00521023 subu r2,r2,r18                  sectionID * 19
801a0e9c: 00240821 addu r1,r1,r4
+
  800926f4: 00021180 sll r2,r2,0x06                  sectionID * 1216
801a0ea0: 8c2348d0 lw r3,0x48d0(r1)                effect = 0x801b48d0 + (effectID * 4)
+
  800926f8: 00521021 addu r2,r2,r18                  sectionID * 1217
  801a0ea4: 00003021 addu r6,r0,r0                    0
+
  800926fc: 00022840 sll r5,r2,0x01                  sectionID * 2434
  801a0ea8: 8c620024 lw r2,0x0024(r3)                effect.paletteOffset
+
  80092700: afbf001c sw r31,0x001c(r29)
  801a0eac: 34070001 ori r7,r0,0x0001                1
+
  80092704: afb10014 sw r17,0x0014(r29)
  801a0eb0: 00628021 addu r16,r3,r2                  #  effectPalette = effect + effect.paletteOffset
+
  80092708: afb00010 sw r16,0x0010(r29)
  801a0eb4: 3c01801c lui r1,0x801c
+
  8009270c: 3c01800a lui r1,0x800a
  801a0eb8: ac30bf80 sw r16,-0x4080(r1)               #  *0x801bbf80 = effectPalette
+
  80092710: 00250821 addu r1,r1,r5
  801a0ebc: 0c0249b6 jal 0x800926d8                  #  [[Extract Palette Data]] (effectPalette, 12, 0, 1);
+
  80092714: 902295f5 lbu r2,-0x6a0b(r1)              testValue = *(0x800995f5 + (sectionID * 2434))
  801a0ec0: 02002021 addu r4,r16,r0                  #  effectPalette
+
  80092718: 00000000 nop
  801a0ec4: 26040200 addiu r4,r16,0x0200              effectPalette2 = effectPalette + 0x200  // 0x200 = sizeof(Palette)
+
  8009271c: 14400020 bne r2,r0,0x800927a0            if (testValue != 0) return;
  801a0ec8: 3405000d ori r5,r0,0x000d                #  13
+
  80092720: 34020001 ori r2,r0,0x0001                #  1
  801a0ecc: 00003021 addu r6,r0,r0                    0
+
  80092724: 14e20014 bne r7,r2,0x80092778
801a0ed0: 0c0249b6 jal 0x800926d8                  #  [[Extract Palette Data]] (effectPalette2, 13, 0, 1);
+
  80092728: 3403000f ori r3,r0,0x000f                clearID = 15
  801a0ed4: 34070001 ori r7,r0,0x0001                #  1
+
                                                    #  if (p4 == 1) {
  801a0ed8: 92020401 lbu r2,0x0401(r16)              #  byte2 = *(effectPalette + 0x0401)
+
  8009272c: 24a20078 addiu r2,r5,0x0078               #       clearOffset = sectionID + 120
  801a0edc: 92040400 lbu r4,0x0400(r16)              byte1 = *(effectPalette + 0x0400)
+
                                                    #      do {
  801a0ee0: 92030402 lbu r3,0x0402(r16)               #   byte3 = *(effectPalette + 0x0402)
+
  80092730: 3c01800a lui r1,0x800a
  801a0ee4: 00021200 sll r2,r2,0x08                  #  byte2 << 8
+
  80092734: 00220821 addu r1,r1,r2
  801a0ee8: 00822021 addu r4,r4,r2                   #  byte1 + (byte2 << 8)
+
  80092738: a02095f6 sb r0,-0x6a0a(r1)               #           *0x800995f6 + clearOffset = 0
  801a0eec: 00031c00 sll r3,r3,0x10                  #  byte3 << 16
+
  8009273c: 2463ffff addiu r3,r3,-0x0001              #          clearID = clearID - 1
801a0ef0: 92020403 lbu r2,0x0403(r16)               #   byte4 = *(effectPalette + 0x0403)
+
  80092740: 0461fffb bgez r3,0x80092730
  801a0ef4: 00000000 nop
+
  80092744: 2442fff8 addiu r2,r2,-0x0008              #           clearOffset = clearOffset - 8
  801a0ef8: 1040000b beq r2,r0,0x801a0f28           
+
                                                     #       } while (clearID >= 0);
  801a0efc: 00831821 addu r3,r4,r3                    #   byteValue = byte1 + (byte2 << 8) + (byte3 << 16)        // 3-byte little endian value
+
  80092748: 00008021 addu r16,r0,r0                  #      count = 0
                                                     #   if (byte4 != 0) {
+
  8009274c: 00808821 addu r17,r4,r0                   #      paletteColorsPtr = palette
  801a0f00: 04610002 bgez r3,0x801a0f0c
+
                                                     #      do {
  801a0f04: 00601021 addu r2,r3,r0                   #      v2 = byteValue
+
  80092750: 02202021 addu r4,r17,r0                  #          paletteColorsPtr
                                                     #      if (byteValue < 0) {
+
80092754: 02402821 addu r5,r18,r0                  #          sectionID
  801a0f08: 246200ff addiu r2,r3,0x00ff              #          v2 = byteValue + 255
+
80092758: 0c024988 jal 0x80092620                  #           [[Extract Colors Data]] (paletteColorsPtr, sectionID, count);
                                                    #       }
+
  8009275c: 02003021 addu r6,r16,r0                   #           count
  801a0f0c: 00021a03 sra r3,r2,0x08                   #       v3 = v2 >> 8
+
  80092760: 26100001 addiu r16,r16,0x0001            #           count = count + 1
  801a0f10: 27a40010 addiu r4,r29,0x0010              #       valueArray = sp + 0x10
+
  80092764: 2a020010 slti r2,r16,0x0010
  801a0f14: 26050404 addiu r5,r16,0x0404              #      graphics = effectPalette + 0x0404
+
  80092768: 1440fff9 bne r2,r0,0x80092750
  801a0f18: 34020180 ori r2,r0,0x0180
+
  8009276c: 26310020 addiu r17,r17,0x0020            #          paletteColorsPtr = paletteColorsPtr + 32
  801a0f1c: a7a20010 sh r2,0x0010(r29)               #      valueArray[0] = 0x0180
+
                                                    #      } while (count < 16);
  801a0f20: 080683d3 j 0x801a0f4c
+
  80092770: 080249e6 j 0x80092798
  801a0f24: 34020080 ori r2,r0,0x0080                 #      v2 = 0x80
+
  80092774: 34020001 ori r2,r0,0x0001                 #      1
 
                                                     #  } else {
 
                                                     #  } else {
  801a0f28: 04610002 bgez r3,0x801a0f34
+
  80092778: 000610c0 sll r2,r6,0x03                  #      p3 * 8
  801a0f2c: 00601021 addu r2,r3,r0                   #      v2 = byteValue
+
  8009277c: 00451021 addu r2,r2,r5                   #      (p3 * 8) + sectionID
                                                    #      if (byteValue < 0) {
+
  80092780: 3c01800a lui r1,0x800a
  801a0f30: 2462007f addiu r2,r3,0x007f              #          v2 = byteValue + 127
+
  80092784: 00220821 addu r1,r1,r2
                                                    #      }
+
  80092788: a02095f6 sb r0,-0x6a0a(r1)                #      *(0x800995f6 + ((p3 * 8) + sectionID)) = 0
  801a0f34: 000219c3 sra r3,r2,0x07                  #      v3 = v2 >> 7
+
  8009278c: 0c024988 jal 0x80092620                  #      [[Extract Colors Data]] (palette, sectionID, p3);
  801a0f38: 27a40010 addiu r4,r29,0x0010              #      valueArray = sp + 0x10
+
  80092790: 02402821 addu r5,r18,r0                       
  801a0f3c: 26050404 addiu r5,r16,0x0404              #      graphics = effectPalette + 0x0404
+
  80092794: 34020001 ori r2,r0,0x0001                 #      1
801a0f40: 34020180 ori r2,r0,0x0180               
 
  801a0f44: a7a20010 sh r2,0x0010(r29)                #      valueArray[0] = 0x0180
 
  801a0f48: 34020040 ori r2,r0,0x0040                 #      v2 = 0x40
 
 
                                                     #  }
 
                                                     #  }
  801a0f4c: a7a00012 sh r0,0x0012(r29)                #  valueArray[1] = 0
+
  80092798: 3c01800a lui r1,0x800a
  801a0f50: a7a20014 sh r2,0x0014(r29)                #  valueArray[2] = v2
+
  8009279c: ac2295ec sw r2,-0x6a14(r1)                #  *0x800995ec = 1
  801a0f54: 0c00923f jal 0x800248fc                  #  [[? 0x248fc]] (valueArray, graphics);
+
  800927a0: 8fbf001c lw r31,0x001c(r29)
  801a0f58: a7a30016 sh r3,0x0016(r29)               #  valueArray[3] = v3
+
  800927a4: 8fb20018 lw r18,0x0018(r29)
  801a0f5c: 8fbf001c lw r31,0x001c(r29)
+
  800927a8: 8fb10014 lw r17,0x0014(r29)
  801a0f60: 8fb00018 lw r16,0x0018(r29)
+
  800927ac: 8fb00010 lw r16,0x0010(r29)
  801a0f64: 27bd0020 addiu r29,r29,0x0020
+
  800927b0: 27bd0020 addiu r29,r29,0x0020
  801a0f68: 03e00008 jr r31
+
  800927b4: 03e00008 jr r31
  801a0f6c: 00000000 nop
+
  800927b8: 00000000 nop

Latest revision as of 21:44, 1 May 2019

#   ROUTINE: EXTRACT PALETTE DATA
#       Parameters:
#           r4 = (palette) Palette data pointer (Two-byte packed values)
#           r5 = (sectionID) Section ID
#           r6 = (p3) ? (For effects, 0?)
#           r7 = (p4) ? (For effects, 1?)

800926d8: 27bdffe0 addiu r29,r29,-0x0020
800926dc: afb20018 sw r18,0x0018(r29)
800926e0: 00a09021 addu r18,r5,r0                   #   sectionID
800926e4: 00121080 sll r2,r18,0x02                  #   sectionID * 4
800926e8: 00521021 addu r2,r2,r18                   #   sectionID * 5
800926ec: 00021080 sll r2,r2,0x02                   #   sectionID * 20
800926f0: 00521023 subu r2,r2,r18                   #   sectionID * 19
800926f4: 00021180 sll r2,r2,0x06                   #   sectionID * 1216
800926f8: 00521021 addu r2,r2,r18                   #   sectionID * 1217
800926fc: 00022840 sll r5,r2,0x01                   #   sectionID * 2434
80092700: afbf001c sw r31,0x001c(r29)
80092704: afb10014 sw r17,0x0014(r29)
80092708: afb00010 sw r16,0x0010(r29)
8009270c: 3c01800a lui r1,0x800a
80092710: 00250821 addu r1,r1,r5
80092714: 902295f5 lbu r2,-0x6a0b(r1)               #   testValue = *(0x800995f5 + (sectionID * 2434))
80092718: 00000000 nop
8009271c: 14400020 bne r2,r0,0x800927a0             #   if (testValue != 0) return;
80092720: 34020001 ori r2,r0,0x0001                 #   1
80092724: 14e20014 bne r7,r2,0x80092778
80092728: 3403000f ori r3,r0,0x000f                 #   clearID = 15
                                                    #   if (p4 == 1) {
8009272c: 24a20078 addiu r2,r5,0x0078               #       clearOffset = sectionID + 120
                                                    #       do {
80092730: 3c01800a lui r1,0x800a
80092734: 00220821 addu r1,r1,r2
80092738: a02095f6 sb r0,-0x6a0a(r1)                #           *0x800995f6 + clearOffset = 0
8009273c: 2463ffff addiu r3,r3,-0x0001              #           clearID = clearID - 1
80092740: 0461fffb bgez r3,0x80092730
80092744: 2442fff8 addiu r2,r2,-0x0008              #           clearOffset = clearOffset - 8
                                                    #       } while (clearID >= 0);
80092748: 00008021 addu r16,r0,r0                   #       count = 0
8009274c: 00808821 addu r17,r4,r0                   #       paletteColorsPtr = palette
                                                    #       do {
80092750: 02202021 addu r4,r17,r0                   #           paletteColorsPtr
80092754: 02402821 addu r5,r18,r0                   #           sectionID
80092758: 0c024988 jal 0x80092620                   #           Extract Colors Data (paletteColorsPtr, sectionID, count);
8009275c: 02003021 addu r6,r16,r0                   #           count
80092760: 26100001 addiu r16,r16,0x0001             #           count = count + 1
80092764: 2a020010 slti r2,r16,0x0010
80092768: 1440fff9 bne r2,r0,0x80092750
8009276c: 26310020 addiu r17,r17,0x0020             #           paletteColorsPtr = paletteColorsPtr + 32
                                                    #       } while (count < 16);
80092770: 080249e6 j 0x80092798
80092774: 34020001 ori r2,r0,0x0001                 #       1
                                                    #   } else {
80092778: 000610c0 sll r2,r6,0x03                   #       p3 * 8
8009277c: 00451021 addu r2,r2,r5                    #       (p3 * 8) + sectionID
80092780: 3c01800a lui r1,0x800a
80092784: 00220821 addu r1,r1,r2
80092788: a02095f6 sb r0,-0x6a0a(r1)                #       *(0x800995f6 + ((p3 * 8) + sectionID)) = 0
8009278c: 0c024988 jal 0x80092620                   #       Extract Colors Data (palette, sectionID, p3);
80092790: 02402821 addu r5,r18,r0                        
80092794: 34020001 ori r2,r0,0x0001                 #       1
                                                    #   }
80092798: 3c01800a lui r1,0x800a
8009279c: ac2295ec sw r2,-0x6a14(r1)                #   *0x800995ec = 1
800927a0: 8fbf001c lw r31,0x001c(r29)
800927a4: 8fb20018 lw r18,0x0018(r29)
800927a8: 8fb10014 lw r17,0x0014(r29)
800927ac: 8fb00010 lw r16,0x0010(r29)
800927b0: 27bd0020 addiu r29,r29,0x0020
800927b4: 03e00008 jr r31
800927b8: 00000000 nop