Difference between revisions of "ATTACK.OUT Find Formation Palette Index"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(jals)
m
 
(5 intermediate revisions by 3 users not shown)
Line 17: Line 17:
 
  001c85c4: 94635fda lhu r3,0x5fda(r3)                    # r3 = Load ???
 
  001c85c4: 94635fda lhu r3,0x5fda(r3)                    # r3 = Load ???
 
  001c85c8: 00000000 nop
 
  001c85c8: 00000000 nop
  001c85cc: 10600012 beq r3,r0,0x001c8618
+
  001c85cc: 10600012 beq r3,r0,0x001c8618                 # branch if UNIT.BIN already open?
  001c85d0: 00409021 addu r18,r2,r0
+
  001c85d0: 00409021 addu r18,r2,r0                       # address of RAM allocated
 
  001c85d4: 34020002 ori r2,r0,0x0002
 
  001c85d4: 34020002 ori r2,r0,0x0002
  001c85d8: 14620006 bne r3,r2,0x001c85f4
+
  001c85d8: 14620006 bne r3,r2,0x001c85f4                 # branch if yet to open unit.bin?
  001c85dc: 3404166b ori r4,r0,0x166b
+
  001c85dc: 3404166b ori r4,r0,0x166b                     # UNIT.BIN LBA
  001c85e0: 3c050001 lui r5,0x0001
+
  001c85e0: 3c050001 lui r5,0x0001                         # If currently opening a file still:
  001c85e4: 0c072009 jal 0x001c8024                        # [[001c8024 - 001c80cc]]
+
  001c85e4: 0c072009 jal 0x001c8024                        # [[ATTACK.OUT Enqueue Open File]] <-- holds cpu until that's done
 
  001c85e8: 02403021 addu r6,r18,r0
 
  001c85e8: 02403021 addu r6,r18,r0
 
  001c85ec: 08072191 j 0x001c8644
 
  001c85ec: 08072191 j 0x001c8644
 
  001c85f0: 00000000 nop
 
  001c85f0: 00000000 nop
  001c85f4: 3c028004 lui r2,0x8004
+
 
  001c85f8: 24424954 addiu r2,r2,0x4954
+
  001c85f4: 3c028004 lui r2,0x8004                         # if able to open unit.bin immediately
 +
  001c85f8: 24424954 addiu r2,r2,0x4954                   # [[Get DAT as WD]]
 
  001c85fc: 3c018017 lui r1,0x8017
 
  001c85fc: 3c018017 lui r1,0x8017
  001c8600: ac223ca8 sw r2,0x3ca8(r1)                      # Save 0x80044954, [[Get DAT as WD]], to address for [[Call Inner Subroutine]]
+
  001c8600: ac223ca8 sw r2,0x3ca8(r1)                      #  
  001c8604: 3c050001 lui r5,0x0001
+
  001c8604: 3c050001 lui r5,0x0001                         # unit.bin filesize
  001c8608: 0c0533ad jal 0x0014ceb4                        # [[Call Inner Subroutine]]
+
  001c8608: 0c0533ad jal 0x0014ceb4                        # [[Call Inner Subroutine]] --> [[Get DAT as WD]] (UNIT.BIN -> LBA, UNIT.BIN -> Size, -> FileLocation)
  001c860c: 02403021 addu r6,r18,r0
+
  001c860c: 02403021 addu r6,r18,r0                       # allocated ram address
 
  001c8610: 08072191 j 0x001c8644
 
  001c8610: 08072191 j 0x001c8644
 
  001c8614: 00000000 nop
 
  001c8614: 00000000 nop
  001c8618: 3c04801d lui r4,0x801d
+
 
  001c861c: 24845db8 addiu r4,r4,0x5db8
+
  001c8618: 3c04801d lui r4,0x801d                         # if unit.bin is already open
 +
  001c861c: 24845db8 addiu r4,r4,0x5db8                   # (0x0100, 0x0000) (0x40 * 0x0100) <- the entire first tpage region unit.bin is on.
 
  001c8620: 0c009258 jal 0x00024960                        # [[SYS StoreImage]]
 
  001c8620: 0c009258 jal 0x00024960                        # [[SYS StoreImage]]
  001c8624: 02402821 addu r5,r18,r0
+
  001c8624: 02402821 addu r5,r18,r0                       # unit.bin's location in memory?
 
  001c8628: 3c04801d lui r4,0x801d
 
  001c8628: 3c04801d lui r4,0x801d
  001c862c: 24845dc0 addiu r4,r4,0x5dc0
+
  001c862c: 24845dc0 addiu r4,r4,0x5dc0                   # (0x0140, 0x0000) (0x40 * 0x0100) <- the entire second tpage region unit,bin is on.
 
  001c8630: 34058000 ori r5,r0,0x8000
 
  001c8630: 34058000 ori r5,r0,0x8000
 
  001c8634: 0c009258 jal 0x00024960                        # [[SYS StoreImage]]
 
  001c8634: 0c009258 jal 0x00024960                        # [[SYS StoreImage]]
  001c8638: 02452821 addu r5,r18,r5
+
  001c8638: 02452821 addu r5,r18,r5                       # unit.bin + 0x8000
 
  001c863c: 0c0091b5 jal 0x000246d4                        # [[SYS DrawSync]]
 
  001c863c: 0c0091b5 jal 0x000246d4                        # [[SYS DrawSync]]
  001c8640: 00002021 addu r4,r0,r0
+
  001c8640: 00002021 addu r4,r0,r0                         # wait for image moving to complete
 +
 
 
  001c8644: 3c04801d lui r4,0x801d
 
  001c8644: 3c04801d lui r4,0x801d
  001c8648: 24845db8 addiu r4,r4,0x5db8
+
  001c8648: 24845db8 addiu r4,r4,0x5db8                   # destination rect as above; (0x0100, 0x0000) (0x40 * 0x0100)
 
  001c864c: 34058000 ori r5,r0,0x8000
 
  001c864c: 34058000 ori r5,r0,0x8000
 
  001c8650: 0c00923f jal 0x000248fc                        # [[SYS LoadImage]]
 
  001c8650: 0c00923f jal 0x000248fc                        # [[SYS LoadImage]]
  001c8654: 02452821 addu r5,r18,r5
+
  001c8654: 02452821 addu r5,r18,r5                       # unit.bin in ram + 0x8000 (this seems offset weirdly)
 
  001c8658: 3c038016 lui r3,0x8016
 
  001c8658: 3c038016 lui r3,0x8016
  001c865c: 94635fda lhu r3,0x5fda(r3)
+
  001c865c: 94635fda lhu r3,0x5fda(r3)                     #
 
  001c8660: 34020002 ori r2,r0,0x0002
 
  001c8660: 34020002 ori r2,r0,0x0002
  001c8664: 14620005 bne r3,r2,0x001c867c
+
  001c8664: 14620005 bne r3,r2,0x001c867c                 # branch if yet to open unit.bin/unit.bin is open
 
  001c8668: 00000000 nop
 
  001c8668: 00000000 nop
 
  001c866c: 0c0532a0 jal 0x0014ca80                        # [[Switch To Next Thread]]
 
  001c866c: 0c0532a0 jal 0x0014ca80                        # [[Switch To Next Thread]]
Line 61: Line 64:
 
  001c8674: 080721a3 j 0x001c868c
 
  001c8674: 080721a3 j 0x001c868c
 
  001c8678: 3c146666 lui r20,0x6666
 
  001c8678: 3c146666 lui r20,0x6666
  001c867c: 0c0091b5 jal 0x000246d4                        # [[SYS DrawSync]]
+
 
 +
  001c867c: 0c0091b5 jal 0x000246d4                        # [[SYS DrawSync]] wait for image moving
 
  001c8680: 00002021 addu r4,r0,r0
 
  001c8680: 00002021 addu r4,r0,r0
  001c8684: 00008821 addu r17,r0,r0
+
  001c8684: 00008821 addu r17,r0,r0                       # party index = 0
 
  001c8688: 3c146666 lui r20,0x6666
 
  001c8688: 3c146666 lui r20,0x6666
  001c868c: 36946667 ori r20,r20,0x6667
+
  001c868c: 36946667 ori r20,r20,0x6667                   # r20 = 2/5
 
  001c8690: 3c13801e lui r19,0x801e
 
  001c8690: 3c13801e lui r19,0x801e
  001c8694: 2673d2d4 addiu r19,r19,0xd2d4
+
  001c8694: 2673d2d4 addiu r19,r19,0xd2d4                 # r19 = 0x801dd2d4
 
  001c8698: 3c15801e lui r21,0x801e
 
  001c8698: 3c15801e lui r21,0x801e
  001c869c: 26b5d5e4 addiu r21,r21,0xd5e4
+
  001c869c: 26b5d5e4 addiu r21,r21,0xd5e4                 # r21 = 0x801dd5e4
 
  001c86a0: 0c0166bc jal 0x00059af0                        # [[Get Party Data Pointer]]
 
  001c86a0: 0c0166bc jal 0x00059af0                        # [[Get Party Data Pointer]]
  001c86a4: 02202021 addu r4,r17,r0
+
  001c86a4: 02202021 addu r4,r17,r0                       #
 
  001c86a8: 00408021 addu r16,r2,r0
 
  001c86a8: 00408021 addu r16,r2,r0
 
  001c86ac: 92030000 lbu r3,0x0000(r16)                    # r3 = Sprite Set
 
  001c86ac: 92030000 lbu r3,0x0000(r16)                    # r3 = Sprite Set
Line 141: Line 145:
 
  001c87b4: 14400006 bne r2,r0,0x001c87d0                  # Branch if index is 0x3E or lower (not a generic monster)
 
  001c87b4: 14400006 bne r2,r0,0x001c87d0                  # Branch if index is 0x3E or lower (not a generic monster)
 
  001c87b8: 00000000 nop
 
  001c87b8: 00000000 nop
  001c87bc: 3c01801d lui r1,0x801d
+
  001c87bc: 3c01801d lui r1,0x801d                         # Load the table for generic monsters' true UNIT indexes. (I don't know why it needs a second table for this.)
 
  001c87c0: 00250821 addu r1,r1,r5
 
  001c87c0: 00250821 addu r1,r1,r5
  001c87c4: 90255d65 lbu r5,0x5d65(r1)                    # Load... some kind of list of pointers for generic monsters, according to the order of their Monster Type, starting at entry 0x3F. Entries before 0x3F look mostly like random junk data?
+
  001c87c4: 90255d65 lbu r5,0x5d65(r1)                    # Actual start location for this table is 0x801D5DA4, but subtracting 0x3E would have been hard I guess. ¬_¬
 
  001c87c8: 080721fb j 0x001c87ec
 
  001c87c8: 080721fb j 0x001c87ec
 
  001c87cc: 00a08021 addu r16,r5,r0                        # r16 = true UNIT index for generic monsters & special generic monsters
 
  001c87cc: 00a08021 addu r16,r5,r0                        # r16 = true UNIT index for generic monsters & special generic monsters
Line 153: Line 157:
 
  001c87e4: 24a5ffff addiu r5,r5,0xffff                    # r5 = UNIT index - 1
 
  001c87e4: 24a5ffff addiu r5,r5,0xffff                    # r5 = UNIT index - 1
 
  001c87e8: 00a08021 addu r16,r5,r0                        # r16 = modified UNIT index
 
  001c87e8: 00a08021 addu r16,r5,r0                        # r16 = modified UNIT index
 +
 +
                                                          # Formation sprite index established, prepare to load image data
 
  001c87ec: 3c028888 lui r2,0x8888
 
  001c87ec: 3c028888 lui r2,0x8888
 
  001c87f0: 34428889 ori r2,r2,0x8889
 
  001c87f0: 34428889 ori r2,r2,0x8889
  001c87f4: 00a20018 mult r5,r2
+
  001c87f4: 00a20018 mult r5,r2                           # index * -0.5333333
  001c87f8: 00051fc3 sra r3,r5,0x1f
+
  001c87f8: 00051fc3 sra r3,r5,0x1f                       # r3 = 0x01 if negative (never)
  001c87fc: 00001010 mfhi r2
+
  001c87fc: 00001010 mfhi r2                               # r2 = index * -0.53333333
  001c8800: 00451021 addu r2,r2,r5
+
  001c8800: 00451021 addu r2,r2,r5                         # r2 = index * 0.53333333 (index * 8/15)
  001c8804: 00021143 sra r2,r2,0x05
+
  001c8804: 00021143 sra r2,r2,0x05                       # r2 = index * 8/15/32 = index / 0x3C = 0x01 if index is 0x3C or higher
  001c8808: 00434023 subu r8,r2,r3
+
  001c8808: 00434023 subu r8,r2,r3                         # r8 = 0x01 if index is 0x3C or higher (second page's formation sprites)
  001c880c: 00081100 sll r2,r8,0x04
+
  001c880c: 00081100 sll r2,r8,0x04                       # r2 = r8 * 0x10
  001c8810: 00481023 subu r2,r2,r8
+
  001c8810: 00481023 subu r2,r2,r8                         # r2 = r8 * 0x0F
  001c8814: 00021080 sll r2,r2,0x02
+
  001c8814: 00021080 sll r2,r2,0x02                       # r2 = r8 * 0x3C
  001c8818: 1500000c bne r8,r0,0x001c884c
+
  001c8818: 1500000c bne r8,r0,0x001c884c                 # Branch if second page of formation sprites
  001c881c: 00a22823 subu r5,r5,r2
+
  001c881c: 00a22823 subu r5,r5,r2                         # r5 = modify index according to starting value for page (ignore if page 1, -0x3C if page 2)
  001c8820: 00b40018 mult r5,r20
+
 
  001c8824: 00051fc3 sra r3,r5,0x1f
+
  001c8820: 00b40018 mult r5,r20                           # index * 0x66666667
  001c8828: 00001010 mfhi r2
+
  001c8824: 00051fc3 sra r3,r5,0x1f                       # r3 = 0x01 if negative (never)
  001c882c: 00021083 sra r2,r2,0x02
+
  001c8828: 00001010 mfhi r2                               # index * 2 / 5
  001c8830: 00433023 subu r6,r2,r3
+
  001c882c: 00021083 sra r2,r2,0x02                       # index / 10
  001c8834: 00c01821 addu r3,r6,r0
+
  001c8830: 00433023 subu r6,r2,r3                         # rounding
  001c8838: 00031080 sll r2,r3,0x02
+
  001c8834: 00c01821 addu r3,r6,r0                         # row = index / 10
  001c883c: 00431021 addu r2,r2,r3
+
  001c8838: 00031080 sll r2,r3,0x02                       # (index / 10) * 4
  001c8840: 00021040 sll r2,r2,0x01
+
  001c883c: 00431021 addu r2,r2,r3                         # (index / 10) * 5
 +
  001c8840: 00021040 sll r2,r2,0x01                       # (index / 10) * 10
 
  001c8844: 0807222a j 0x001c88a8
 
  001c8844: 0807222a j 0x001c88a8
  001c8848: 00a23023 subu r6,r5,r2
+
  001c8848: 00a23023 subu r6,r5,r2                         # col = index % 10 (modulo)
  001c884c: 28a20008 slti r2,r5,0x0008
+
 
  001c8850: 1040000b beq r2,r0,0x001c8880
+
  001c884c: 28a20008 slti r2,r5,0x0008                     # r2 = 0x01 if first row of second page of formation sprites (human sized formation sprites)
  001c8854: 00b40018 mult r5,r20
+
  001c8850: 1040000b beq r2,r0,0x001c8880                 # Branch if monster sized formation sprites
  001c8858: 00051fc3 sra r3,r5,0x1f
+
  001c8854: 00b40018 mult r5,r20                           # index * 0x66666667
  001c885c: 00001010 mfhi r2
+
  001c8858: 00051fc3 sra r3,r5,0x1f                       # r3 = 0x01 if negative (never)
  001c8860: 00021083 sra r2,r2,0x02
+
  001c885c: 00001010 mfhi r2                               # index * 2 / 5
 +
  001c8860: 00021083 sra r2,r2,0x02                       # index / 10
 
  001c8864: 00433023 subu r6,r2,r3
 
  001c8864: 00433023 subu r6,r2,r3
  001c8868: 00c01821 addu r3,r6,r0
+
  001c8868: 00c01821 addu r3,r6,r0                         # row = index / 10
  001c886c: 00031080 sll r2,r3,0x02
+
  001c886c: 00031080 sll r2,r3,0x02                       # (index / 10) * 4
  001c8870: 00431021 addu r2,r2,r3
+
  001c8870: 00431021 addu r2,r2,r3                         # (index / 10) * 5
  001c8874: 00021040 sll r2,r2,0x01
+
  001c8874: 00021040 sll r2,r2,0x01                       # (index / 10) * 10
 
  001c8878: 0807222a j 0x001c88a8
 
  001c8878: 0807222a j 0x001c88a8
  001c887c: 00a23023 subu r6,r5,r2
+
  001c887c: 00a23023 subu r6,r5,r2                         # col = index % 10 (modulo)
  001c8880: 24a4fff8 addiu r4,r5,0xfff8
+
 
  001c8884: 00940018 mult r4,r20
+
  001c8880: 24a4fff8 addiu r4,r5,0xfff8                   # r4 = modified index - 8
  001c8888: 00041fc3 sra r3,r4,0x1f
+
  001c8884: 00940018 mult r4,r20                           # index * 0x66666667
  001c888c: 00001010 mfhi r2
+
  001c8888: 00041fc3 sra r3,r4,0x1f                       # r3 = 0x01 if negative (never)
  001c8890: 00021043 sra r2,r2,0x01
+
  001c888c: 00001010 mfhi r2                               # index * 2 / 5
  001c8894: 00433023 subu r6,r2,r3
+
  001c8890: 00021043 sra r2,r2,0x01                       # index / 5
  001c8898: 00c01821 addu r3,r6,r0
+
  001c8894: 00433023 subu r6,r2,r3                        
  001c889c: 00031080 sll r2,r3,0x02
+
  001c8898: 00c01821 addu r3,r6,r0                         # row = index / 5
  001c88a0: 00431021 addu r2,r2,r3
+
  001c889c: 00031080 sll r2,r3,0x02                       # (index / 5) * 4
  001c88a4: 00823023 subu r6,r4,r2
+
  001c88a0: 00431021 addu r2,r2,r3                         # (index / 5) * 5
 +
  001c88a4: 00823023 subu r6,r4,r2                         # col = index % 5 (modulo)
 +
 
 
  001c88a8: 00603821 addu r7,r3,r0
 
  001c88a8: 00603821 addu r7,r3,r0
 
  001c88ac: 3404047f ori r4,r0,0x047f
 
  001c88ac: 3404047f ori r4,r0,0x047f
Line 209: Line 219:
 
  001c88c4: 2442ffff addiu r2,r2,0xffff
 
  001c88c4: 2442ffff addiu r2,r2,0xffff
 
  001c88c8: 34020001 ori r2,r0,0x0001
 
  001c88c8: 34020001 ori r2,r0,0x0001
  001c88cc: 15020043 bne r8,r2,0x001c89dc
+
  001c88cc: 15020043 bne r8,r2,0x001c89dc             # Branch if first page of UNIT.BIN
 
  001c88d0: 28a20008 slti r2,r5,0x0008
 
  001c88d0: 28a20008 slti r2,r5,0x0008
  001c88d4: 14400042 bne r2,r0,0x001c89e0
+
  001c88d4: 14400042 bne r2,r0,0x001c89e0             # Branch if human sized sprites on second page
  001c88d8: 000823c0 sll r4,r8,0x0f
+
  001c88d8: 000823c0 sll r4,r8,0x0f                   # r4 = 0x8000 (r8 must have a value of 1 at this point)
 +
 
 
  001c88dc: 34048000 ori r4,r0,0x8000
 
  001c88dc: 34048000 ori r4,r0,0x8000
 
  001c88e0: 00061840 sll r3,r6,0x01
 
  001c88e0: 00061840 sll r3,r6,0x01
Line 277: Line 288:
 
  001c89d4: 080722b4 j 0x001c8ad0
 
  001c89d4: 080722b4 j 0x001c8ad0
 
  001c89d8: 02002821 addu r5,r16,r0
 
  001c89d8: 02002821 addu r5,r16,r0
  001c89dc: 000823c0 sll r4,r8,0x0f
+
 
 +
  001c89dc: 000823c0 sll r4,r8,0x0f                 # r4 = 0 (this line is only run if it was the first page of UNIT.BIN)
 
  001c89e0: 00061840 sll r3,r6,0x01
 
  001c89e0: 00061840 sll r3,r6,0x01
 
  001c89e4: 00661821 addu r3,r3,r6
 
  001c89e4: 00661821 addu r3,r3,r6
Line 367: Line 379:
 
  001c8b3c: 3403f000 ori r3,r0,0xf000
 
  001c8b3c: 3403f000 ori r3,r0,0xf000
 
  001c8b40: 3c04801e lui r4,0x801e
 
  001c8b40: 3c04801e lui r4,0x801e
  001c8b44: 2484d2dc addiu r4,r4,0xd2dc
+
  001c8b44: 2484d2dc addiu r4,r4,0xd2dc           # constructed RECT data
 
  001c8b48: 06210002 bgez r17,0x001c8b54
 
  001c8b48: 06210002 bgez r17,0x001c8b54
 
  001c8b4c: 00431021 addu r2,r2,r3
 
  001c8b4c: 00431021 addu r2,r2,r3
 
  001c8b50: 26270003 addiu r7,r17,0x0003
 
  001c8b50: 26270003 addiu r7,r17,0x0003
  001c8b54: 02422821 addu r5,r18,r2
+
  001c8b54: 02422821 addu r5,r18,r2               # open.bin + ?
 
  001c8b58: 00071883 sra r3,r7,0x02
 
  001c8b58: 00071883 sra r3,r7,0x02
 
  001c8b5c: 00031080 sll r2,r3,0x02
 
  001c8b5c: 00031080 sll r2,r3,0x02
Line 387: Line 399:
 
  001c8b8c: 3c01801e lui r1,0x801e
 
  001c8b8c: 3c01801e lui r1,0x801e
 
  001c8b90: a422d2e2 sh r2,-0x2d1e(r1)
 
  001c8b90: a422d2e2 sh r2,-0x2d1e(r1)
  001c8b94: 0c00923f jal 0x000248fc                # [[SYS LoadImage]]
+
  001c8b94: 0c00923f jal 0x000248fc                # [[SYS LoadImage]]  
 
  001c8b98: 00000000 nop
 
  001c8b98: 00000000 nop
 
  001c8b9c: 3c038016 lui r3,0x8016
 
  001c8b9c: 3c038016 lui r3,0x8016
 
  001c8ba0: 94635fda lhu r3,0x5fda(r3)
 
  001c8ba0: 94635fda lhu r3,0x5fda(r3)
 
  001c8ba4: 34020002 ori r2,r0,0x0002
 
  001c8ba4: 34020002 ori r2,r0,0x0002
  001c8ba8: 14620005 bne r3,r2,0x001c8bc0
+
  001c8ba8: 14620005 bne r3,r2,0x001c8bc0           # branch if unit.bin was opened immediately/already opened?
 
  001c8bac: 00000000 nop
 
  001c8bac: 00000000 nop
 
  001c8bb0: 0c0532a0 jal 0x0014ca80                # [[Switch To Next Thread]]
 
  001c8bb0: 0c0532a0 jal 0x0014ca80                # [[Switch To Next Thread]]
 
  001c8bb4: 26310001 addiu r17,r17,0x0001
 
  001c8bb4: 26310001 addiu r17,r17,0x0001
 
  001c8bb8: 080722f4 j 0x001c8bd0
 
  001c8bb8: 080722f4 j 0x001c8bd0
  001c8bbc: 2a220010 slti r2,r17,0x0010
+
  001c8bbc: 2a220010 slti r2,r17,0x0010             # do for all 0x10 non-Guest party members
 +
 
 
  001c8bc0: 0c0091b5 jal 0x000246d4                # [[SYS DrawSync]]
 
  001c8bc0: 0c0091b5 jal 0x000246d4                # [[SYS DrawSync]]
 
  001c8bc4: 00002021 addu r4,r0,r0
 
  001c8bc4: 00002021 addu r4,r0,r0
 
  001c8bc8: 26310001 addiu r17,r17,0x0001
 
  001c8bc8: 26310001 addiu r17,r17,0x0001
  001c8bcc: 2a220010 slti r2,r17,0x0010
+
  001c8bcc: 2a220010 slti r2,r17,0x0010             # do for all 0x10 non-Guest party members
 
  001c8bd0: 1440feb3 bne r2,r0,0x001c86a0
 
  001c8bd0: 1440feb3 bne r2,r0,0x001c86a0
 
  001c8bd4: 00000000 nop
 
  001c8bd4: 00000000 nop

Latest revision as of 16:59, 13 June 2025

< ATTACK.OUT Routines

# WORLD.BIN: Find Formation Palette Index
# REQUIRE.OUT: Find Formation Palette Index (REQUIRE.OUT)
001c8598: 27bdffb8 addiu r29,r29,0xffb8
001c859c: 3c040001 lui r4,0x0001
001c85a0: afbf0040 sw r31,0x0040(r29)
001c85a4: afb5003c sw r21,0x003c(r29)
001c85a8: afb40038 sw r20,0x0038(r29)
001c85ac: afb30034 sw r19,0x0034(r29)
001c85b0: afb20030 sw r18,0x0030(r29)
001c85b4: afb1002c sw r17,0x002c(r29)
001c85b8: 0c011105 jal 0x00044414                        # C51 Malloc < Allocate memory
001c85bc: afb00028 sw r16,0x0028(r29)
001c85c0: 3c038016 lui r3,0x8016
001c85c4: 94635fda lhu r3,0x5fda(r3)                     # r3 = Load ???
001c85c8: 00000000 nop
001c85cc: 10600012 beq r3,r0,0x001c8618                  # branch if UNIT.BIN already open?
001c85d0: 00409021 addu r18,r2,r0                        # address of RAM allocated
001c85d4: 34020002 ori r2,r0,0x0002
001c85d8: 14620006 bne r3,r2,0x001c85f4                  # branch if yet to open unit.bin?
001c85dc: 3404166b ori r4,r0,0x166b                      # UNIT.BIN LBA
001c85e0: 3c050001 lui r5,0x0001                         # If currently opening a file still:
001c85e4: 0c072009 jal 0x001c8024                        # ATTACK.OUT Enqueue Open File <-- holds cpu until that's done
001c85e8: 02403021 addu r6,r18,r0
001c85ec: 08072191 j 0x001c8644
001c85f0: 00000000 nop
001c85f4: 3c028004 lui r2,0x8004                         # if able to open unit.bin immediately
001c85f8: 24424954 addiu r2,r2,0x4954                    # Get DAT as WD
001c85fc: 3c018017 lui r1,0x8017
001c8600: ac223ca8 sw r2,0x3ca8(r1)                      # 
001c8604: 3c050001 lui r5,0x0001                         # unit.bin filesize
001c8608: 0c0533ad jal 0x0014ceb4                        # Call Inner Subroutine --> Get DAT as WD (UNIT.BIN -> LBA, UNIT.BIN -> Size, -> FileLocation)
001c860c: 02403021 addu r6,r18,r0                        # allocated ram address
001c8610: 08072191 j 0x001c8644
001c8614: 00000000 nop
001c8618: 3c04801d lui r4,0x801d                         # if unit.bin is already open
001c861c: 24845db8 addiu r4,r4,0x5db8                    # (0x0100, 0x0000) (0x40 * 0x0100) <- the entire first tpage region unit.bin is on.
001c8620: 0c009258 jal 0x00024960                        # SYS StoreImage
001c8624: 02402821 addu r5,r18,r0                        # unit.bin's location in memory?
001c8628: 3c04801d lui r4,0x801d
001c862c: 24845dc0 addiu r4,r4,0x5dc0                    # (0x0140, 0x0000) (0x40 * 0x0100) <- the entire second tpage region unit,bin is on.
001c8630: 34058000 ori r5,r0,0x8000
001c8634: 0c009258 jal 0x00024960                        # SYS StoreImage
001c8638: 02452821 addu r5,r18,r5                        # unit.bin + 0x8000
001c863c: 0c0091b5 jal 0x000246d4                        # SYS DrawSync
001c8640: 00002021 addu r4,r0,r0                         # wait for image moving to complete
001c8644: 3c04801d lui r4,0x801d
001c8648: 24845db8 addiu r4,r4,0x5db8                    # destination rect as above; (0x0100, 0x0000) (0x40 * 0x0100) 
001c864c: 34058000 ori r5,r0,0x8000
001c8650: 0c00923f jal 0x000248fc                        # SYS LoadImage
001c8654: 02452821 addu r5,r18,r5                        # unit.bin in ram + 0x8000 (this seems offset weirdly)
001c8658: 3c038016 lui r3,0x8016
001c865c: 94635fda lhu r3,0x5fda(r3)                     # 
001c8660: 34020002 ori r2,r0,0x0002
001c8664: 14620005 bne r3,r2,0x001c867c                  # branch if yet to open unit.bin/unit.bin is open
001c8668: 00000000 nop
001c866c: 0c0532a0 jal 0x0014ca80                        # Switch To Next Thread
001c8670: 00008821 addu r17,r0,r0
001c8674: 080721a3 j 0x001c868c
001c8678: 3c146666 lui r20,0x6666
001c867c: 0c0091b5 jal 0x000246d4                        # SYS DrawSync wait for image moving
001c8680: 00002021 addu r4,r0,r0
001c8684: 00008821 addu r17,r0,r0                        # party index = 0
001c8688: 3c146666 lui r20,0x6666
001c868c: 36946667 ori r20,r20,0x6667                    # r20 = 2/5
001c8690: 3c13801e lui r19,0x801e
001c8694: 2673d2d4 addiu r19,r19,0xd2d4                  # r19 = 0x801dd2d4
001c8698: 3c15801e lui r21,0x801e
001c869c: 26b5d5e4 addiu r21,r21,0xd5e4                  # r21 = 0x801dd5e4
001c86a0: 0c0166bc jal 0x00059af0                        # Get Party Data Pointer
001c86a4: 02202021 addu r4,r17,r0                        # 
001c86a8: 00408021 addu r16,r2,r0
001c86ac: 92030000 lbu r3,0x0000(r16)                    # r3 = Sprite Set
001c86b0: 00000000 nop
001c86b4: 2c620080 sltiu r2,r3,0x0080                  
001c86b8: 14400026 bne r2,r0,0x001c8754                  # Branch if not a generic sprite
001c86bc: 00602821 addu r5,r3,r0
001c86c0: 34020080 ori r2,r0,0x0080
001c86c4: 1462000a bne r3,r2,0x001c86f0                  # Branch if not a Generic Male
001c86c8: 34020081 ori r2,r0,0x0081
001c86cc: 92020002 lbu r2,0x0002(r16)                    # r2 = Current Job
001c86d0: 00000000 nop
001c86d4: 2443ffb6 addiu r3,r2,0xffb6                    # r3 = Current Job - 4A (Squire)
001c86d8: 00032040 sll r4,r3,0x01                        # r4 = (Current Job - 4A) * 2 = generic job offset
001c86dc: 3403005d ori r3,r0,0x005d                      # r3 = 0x5D (Mime)
001c86e0: 14430014 bne r2,r3,0x001c8734                  # Branch if not Mime
001c86e4: 24850060 addiu r5,r4,0x0060                    # r5 + Generic job offset + 0x60
001c86e8: 080721cd j 0x001c8734
001c86ec: 2485005e addiu r5,r4,0x005e                    # r5 = Generic job offset + 0x5e (because Bard and Dancer only add 1 each instead of the usual 2)
001c86f0: 1462000a bne r3,r2,0x001c871c                  # Branch if not a Generic Female
001c86f4: 00000000 nop
001c86f8: 92020002 lbu r2,0x0002(r16)                    # r2 = Current Job
001c86fc: 00000000 nop
001c8700: 2443ffb6 addiu r3,r2,0xffb6                    # r3 = Current Job - 4A (Squire)
001c8704: 00032040 sll r4,r3,0x01                        # r4 = (Current Job - 4A) * 2 = generic job offset
001c8708: 3403005d ori r3,r0,0x005d                      # r3 = 0x5D (Mime)
001c870c: 14430009 bne r2,r3,0x001c8734                  # Branch if not Mime
001c8710: 24850061 addiu r5,r4,0x0061                    # r5 + Generic job offset + 0x61
001c8714: 080721cd j 0x001c8734
001c8718: 2485005f addiu r5,r4,0x005f                    # r5 = Generic job offset + 0x5f (because Bard and Dancer only add 1 each instead of the usual 2)
001c871c: 92040002 lbu r4,0x0002(r16)                    # r4 = Current Job
001c8720: 0c016a29 jal 0x0005a8a4                        # Get Job Data Pointer
001c8724: 00000000 nop
001c8728: 3c01801e lui r1,0x801e
001c872c: ac22caa8 sw r2,-0x3558(r1)                     # Save Job Data Pointer to 0x801DCAA8
001c8730: 9045002d lbu r5,0x002d(r2)                     # r5 = Monster Portrait
001c8734: 92030002 lbu r3,0x0002(r16)                    # r3 = Current Job
001c8738: 3402005b ori r2,r0,0x005b                      # r2 = 0x5B (Bard)
001c873c: 14620002 bne r3,r2,0x001c8748                  # Branch if not Bard
001c8740: 3402005c ori r2,r0,0x005c                      # r2 = 0x5C (Dancer)
001c8744: 34050082 ori r5,r0,0x0082                      # r5 = 0x82 (Bard value)
001c8748: 14620003 bne r3,r2,0x001c8758                  # Branch if not Dancer
001c874c: 00051040 sll r2,r5,0x01                        # r2 = r5 * 2
001c8750: 34050083 ori r5,r0,0x0083                      # r5 = 0x83 (Dancer value)
001c8754: 00051040 sll r2,r5,0x01                        # r2 = r5 * 2
001c8758: 92030000 lbu r3,0x0000(r16)                    # r3 = Sprite Set
001c875c: 3c01801d lui r1,0x801d
001c8760: 00220821 addu r1,r1,r2
001c8764: 94255bb0 lhu r5,0x5bb0(r1)                     # Load the index for the UNIT.BIN sprite.
001c8768: 14600002 bne r3,r0,0x001c8774                  # Branch if no Sprite Set
001c876c: 34020082 ori r2,r0,0x0082                      # r2 = 0x82 (Generic Monster)
001c8770: 00002821 addu r5,r0,r0                         # r5 = no UNIT index if no Sprite Set
001c8774: 14620008 bne r3,r2,0x001c8798                  # -- Branch if not Generic Monster
001c8778: 00000000 nop                                   # -- NOTE: these lines of code are totally wasted because of the line at 0x001C8798
001c877c: 3c02801e lui r2,0x801e
001c8780: 8c42caa8 lw r2,-0x3558(r2)                     # -- r2 = Load saved Job Data Pointer
001c8784: 00000000 nop
001c8788: 9042002e lbu r2,0x002e(r2)                     # -- r2 = Monster Palette
001c878c: 00000000 nop
001c8790: 00021280 sll r2,r2,0x0a                        # -- r2 = Monster Palette * 0x400
001c8794: 00a22825 or r5,r5,r2                           # -- r5 = Monster Palette * 0x400 + UNIT index
001c8798: 30a500ff andi r5,r5,0x00ff                     # -- r5 = AND out the Monster Palette immediately after adding it - what a waste of time
001c879c: 34020018 ori r2,r0,0x0018                      # r2 = 0x18 (Reis' Holy Dragon index)
001c87a0: 14a20004 bne r5,r2,0x001c87b4                  # Branch if not Reis' Holy Dragon index
001c87a4: 28a2003f slti r2,r5,0x003f                     # r2 = 0x01 if index is 0x3E or lower
001c87a8: 2410ffff addiu r16,r0,0xffff                   # r16 = -1 (Dragon Reis value)
001c87ac: 080721fb j 0x001c87ec
001c87b0: 3405004c ori r5,r0,0x004c                      # r5 = 0x4C (Dragon Reis' true UNIT index; uses 0x4C Dragon)
001c87b4: 14400006 bne r2,r0,0x001c87d0                  # Branch if index is 0x3E or lower (not a generic monster)
001c87b8: 00000000 nop
001c87bc: 3c01801d lui r1,0x801d                         # Load the table for generic monsters' true UNIT indexes. (I don't know why it needs a second table for this.)
001c87c0: 00250821 addu r1,r1,r5
001c87c4: 90255d65 lbu r5,0x5d65(r1)                     # Actual start location for this table is 0x801D5DA4, but subtracting 0x3E would have been hard I guess. ¬_¬
001c87c8: 080721fb j 0x001c87ec
001c87cc: 00a08021 addu r16,r5,r0                        # r16 = true UNIT index for generic monsters & special generic monsters
001c87d0: 92020000 lbu r2,0x0000(r16)                    # r2 = Sprite Set
001c87d4: 00000000 nop
001c87d8: 30420080 andi r2,r2,0x0080               
001c87dc: 10400003 beq r2,r0,0x001c87ec                  # Branch if not a generic sprite
001c87e0: 00a08021 addu r16,r5,r0                        # r16 = UNIT index
001c87e4: 24a5ffff addiu r5,r5,0xffff                    # r5 = UNIT index - 1
001c87e8: 00a08021 addu r16,r5,r0                        # r16 = modified UNIT index
                                                         # Formation sprite index established, prepare to load image data
001c87ec: 3c028888 lui r2,0x8888
001c87f0: 34428889 ori r2,r2,0x8889
001c87f4: 00a20018 mult r5,r2                            # index * -0.5333333
001c87f8: 00051fc3 sra r3,r5,0x1f                        # r3 = 0x01 if negative (never)
001c87fc: 00001010 mfhi r2                               # r2 = index * -0.53333333
001c8800: 00451021 addu r2,r2,r5                         # r2 = index * 0.53333333 (index * 8/15)
001c8804: 00021143 sra r2,r2,0x05                        # r2 = index * 8/15/32 = index / 0x3C = 0x01 if index is 0x3C or higher
001c8808: 00434023 subu r8,r2,r3                         # r8 = 0x01 if index is 0x3C or higher (second page's formation sprites)
001c880c: 00081100 sll r2,r8,0x04                        # r2 = r8 * 0x10
001c8810: 00481023 subu r2,r2,r8                         # r2 = r8 * 0x0F
001c8814: 00021080 sll r2,r2,0x02                        # r2 = r8 * 0x3C
001c8818: 1500000c bne r8,r0,0x001c884c                  # Branch if second page of formation sprites
001c881c: 00a22823 subu r5,r5,r2                         # r5 = modify index according to starting value for page (ignore if page 1, -0x3C if page 2)
001c8820: 00b40018 mult r5,r20                           # index * 0x66666667
001c8824: 00051fc3 sra r3,r5,0x1f                        # r3 = 0x01 if negative (never)
001c8828: 00001010 mfhi r2                               # index * 2 / 5
001c882c: 00021083 sra r2,r2,0x02                        # index / 10
001c8830: 00433023 subu r6,r2,r3                         # rounding
001c8834: 00c01821 addu r3,r6,r0                         # row = index / 10
001c8838: 00031080 sll r2,r3,0x02                        # (index / 10) * 4
001c883c: 00431021 addu r2,r2,r3                         # (index / 10) * 5
001c8840: 00021040 sll r2,r2,0x01                        # (index / 10) * 10
001c8844: 0807222a j 0x001c88a8
001c8848: 00a23023 subu r6,r5,r2                         # col = index % 10 (modulo)
001c884c: 28a20008 slti r2,r5,0x0008                     # r2 = 0x01 if first row of second page of formation sprites (human sized formation sprites)
001c8850: 1040000b beq r2,r0,0x001c8880                  # Branch if monster sized formation sprites
001c8854: 00b40018 mult r5,r20                           # index * 0x66666667
001c8858: 00051fc3 sra r3,r5,0x1f                        # r3 = 0x01 if negative (never)
001c885c: 00001010 mfhi r2                               # index * 2 / 5
001c8860: 00021083 sra r2,r2,0x02                        # index / 10
001c8864: 00433023 subu r6,r2,r3
001c8868: 00c01821 addu r3,r6,r0                         # row = index / 10
001c886c: 00031080 sll r2,r3,0x02                        # (index / 10) * 4
001c8870: 00431021 addu r2,r2,r3                         # (index / 10) * 5
001c8874: 00021040 sll r2,r2,0x01                        # (index / 10) * 10
001c8878: 0807222a j 0x001c88a8
001c887c: 00a23023 subu r6,r5,r2                         # col = index % 10 (modulo)
001c8880: 24a4fff8 addiu r4,r5,0xfff8                    # r4 = modified index - 8
001c8884: 00940018 mult r4,r20                           # index * 0x66666667
001c8888: 00041fc3 sra r3,r4,0x1f                        # r3 = 0x01 if negative (never)
001c888c: 00001010 mfhi r2                               # index * 2 / 5
001c8890: 00021043 sra r2,r2,0x01                        # index / 5
001c8894: 00433023 subu r6,r2,r3                         
001c8898: 00c01821 addu r3,r6,r0                         # row = index / 5
001c889c: 00031080 sll r2,r3,0x02                        # (index / 5) * 4
001c88a0: 00431021 addu r2,r2,r3                         # (index / 5) * 5
001c88a4: 00823023 subu r6,r4,r2                         # col = index % 5 (modulo)
001c88a8: 00603821 addu r7,r3,r0
001c88ac: 3404047f ori r4,r0,0x047f
001c88b0: 3c02801e lui r2,0x801e
001c88b4: 2442da63 addiu r2,r2,0xda63
001c88b8: a0400000 sb r0,0x0000(r2)
001c88bc: 2484ffff addiu r4,r4,0xffff
001c88c0: 0481fffd bgez r4,0x001c88b8
001c88c4: 2442ffff addiu r2,r2,0xffff
001c88c8: 34020001 ori r2,r0,0x0001
001c88cc: 15020043 bne r8,r2,0x001c89dc             # Branch if first page of UNIT.BIN
001c88d0: 28a20008 slti r2,r5,0x0008
001c88d4: 14400042 bne r2,r0,0x001c89e0             # Branch if human sized sprites on second page
001c88d8: 000823c0 sll r4,r8,0x0f                   # r4 = 0x8000 (r8 must have a value of 1 at this point)
001c88dc: 34048000 ori r4,r0,0x8000
001c88e0: 00061840 sll r3,r6,0x01
001c88e4: 00661821 addu r3,r3,r6
001c88e8: 00031900 sll r3,r3,0x04
001c88ec: 00071040 sll r2,r7,0x01
001c88f0: 00471021 addu r2,r2,r7
001c88f4: 00021300 sll r2,r2,0x0c
001c88f8: 00621821 addu r3,r3,r2
001c88fc: 02340018 mult r17,r20
001c8900: 24632800 addiu r3,r3,0x2800
001c8904: 00031843 sra r3,r3,0x01
001c8908: 00641021 addu r2,r3,r4
001c890c: 00002821 addu r5,r0,r0
001c8910: 02424821 addu r9,r18,r2
001c8914: 00004021 addu r8,r0,r0
001c8918: 3402000c ori r2,r0,0x000c
001c891c: a6620004 sh r2,0x0004(r19)
001c8920: 34020030 ori r2,r0,0x0030
001c8924: a6620006 sh r2,0x0006(r19)
001c8928: 001117c3 sra r2,r17,0x1f
001c892c: 00002010 mfhi r4
001c8930: 00042043 sra r4,r4,0x01
001c8934: 00822023 subu r4,r4,r2
001c8938: 00041880 sll r3,r4,0x02
001c893c: 00641821 addu r3,r3,r4
001c8940: 02231823 subu r3,r17,r3
001c8944: 00031040 sll r2,r3,0x01
001c8948: 00431021 addu r2,r2,r3
001c894c: 00021080 sll r2,r2,0x02
001c8950: 24420180 addiu r2,r2,0x0180
001c8954: a6620000 sh r2,0x0000(r19)
001c8958: 00041040 sll r2,r4,0x01
001c895c: 00441021 addu r2,r2,r4
001c8960: 00021100 sll r2,r2,0x04
001c8964: a6620002 sh r2,0x0002(r19)
001c8968: 00002021 addu r4,r0,r0
001c896c: 01003821 addu r7,r8,r0
001c8970: 000531c0 sll r6,r5,0x07
001c8974: 00e41821 addu r3,r7,r4
001c8978: 01241021 addu r2,r9,r4
001c897c: 24840001 addiu r4,r4,0x0001
001c8980: 00c21021 addu r2,r6,r2
001c8984: 90420000 lbu r2,0x0000(r2)
001c8988: 00751821 addu r3,r3,r21
001c898c: a0620000 sb r2,0x0000(r3)
001c8990: 28820018 slti r2,r4,0x0018
001c8994: 1440fff7 bne r2,r0,0x001c8974
001c8998: 00000000 nop
001c899c: 24a50001 addiu r5,r5,0x0001
001c89a0: 28a20030 slti r2,r5,0x0030
001c89a4: 1440fff0 bne r2,r0,0x001c8968
001c89a8: 25080018 addiu r8,r8,0x0018
001c89ac: 3c04801e lui r4,0x801e
001c89b0: 2484d2d4 addiu r4,r4,0xd2d4
001c89b4: 3c05801e lui r5,0x801e
001c89b8: 24a5d5e4 addiu r5,r5,0xd5e4
001c89bc: 0c00923f jal 0x000248fc                 # SYS LoadImage
001c89c0: 00000000 nop
001c89c4: 34020001 ori r2,r0,0x0001
001c89c8: 3c01801d lui r1,0x801d
001c89cc: 00310821 addu r1,r1,r17
001c89d0: a022d014 sb r2,-0x2fec(r1)
001c89d4: 080722b4 j 0x001c8ad0
001c89d8: 02002821 addu r5,r16,r0
001c89dc: 000823c0 sll r4,r8,0x0f                 # r4 = 0 (this line is only run if it was the first page of UNIT.BIN)
001c89e0: 00061840 sll r3,r6,0x01
001c89e4: 00661821 addu r3,r3,r6
001c89e8: 000318c0 sll r3,r3,0x03
001c89ec: 00071080 sll r2,r7,0x02
001c89f0: 00471021 addu r2,r2,r7
001c89f4: 000212c0 sll r2,r2,0x0b
001c89f8: 02340018 mult r17,r20
001c89fc: 00621821 addu r3,r3,r2
001c8a00: 00031843 sra r3,r3,0x01
001c8a04: 00831021 addu r2,r4,r3
001c8a08: 34050008 ori r5,r0,0x0008
001c8a0c: 02424821 addu r9,r18,r2
001c8a10: 340800c0 ori r8,r0,0x00c0
001c8a14: 3402000c ori r2,r0,0x000c
001c8a18: a6620004 sh r2,0x0004(r19)
001c8a1c: 34020030 ori r2,r0,0x0030
001c8a20: a6620006 sh r2,0x0006(r19)
001c8a24: 001117c3 sra r2,r17,0x1f
001c8a28: 00002010 mfhi r4
001c8a2c: 00042043 sra r4,r4,0x01
001c8a30: 00822023 subu r4,r4,r2
001c8a34: 00041880 sll r3,r4,0x02
001c8a38: 00641821 addu r3,r3,r4
001c8a3c: 02231823 subu r3,r17,r3
001c8a40: 00031040 sll r2,r3,0x01
001c8a44: 00431021 addu r2,r2,r3
001c8a48: 00021080 sll r2,r2,0x02
001c8a4c: 24420180 addiu r2,r2,0x0180
001c8a50: a6620000 sh r2,0x0000(r19)
001c8a54: 00041040 sll r2,r4,0x01
001c8a58: 00441021 addu r2,r2,r4
001c8a5c: 00021100 sll r2,r2,0x04
001c8a60: a6620002 sh r2,0x0002(r19)
001c8a64: 34040006 ori r4,r0,0x0006
001c8a68: 01003821 addu r7,r8,r0
001c8a6c: 000531c0 sll r6,r5,0x07
001c8a70: 00e41821 addu r3,r7,r4
001c8a74: 00891021 addu r2,r4,r9
001c8a78: 24840001 addiu r4,r4,0x0001
001c8a7c: 00461021 addu r2,r2,r6
001c8a80: 9042fbfa lbu r2,-0x0406(r2)
001c8a84: 00751821 addu r3,r3,r21
001c8a88: a0620000 sb r2,0x0000(r3)
001c8a8c: 28820012 slti r2,r4,0x0012
001c8a90: 1440fff7 bne r2,r0,0x001c8a70
001c8a94: 00000000 nop
001c8a98: 24a50001 addiu r5,r5,0x0001
001c8a9c: 28a20030 slti r2,r5,0x0030
001c8aa0: 1440fff0 bne r2,r0,0x001c8a64
001c8aa4: 25080018 addiu r8,r8,0x0018
001c8aa8: 3c04801e lui r4,0x801e
001c8aac: 2484d2d4 addiu r4,r4,0xd2d4
001c8ab0: 3c05801e lui r5,0x801e
001c8ab4: 24a5d5e4 addiu r5,r5,0xd5e4
001c8ab8: 0c00923f jal 0x000248fc                    # SYS LoadImage
001c8abc: 00000000 nop
001c8ac0: 3c01801d lui r1,0x801d
001c8ac4: 00310821 addu r1,r1,r17
001c8ac8: a020d014 sb r0,-0x2fec(r1)
001c8acc: 02002821 addu r5,r16,r0
001c8ad0: 2402ffff addiu r2,r0,0xffff                # r2 = -1
001c8ad4: 14a20003 bne r5,r2,0x001c8ae4              # Branch if not -1 (Dragon Reis' value)
001c8ad8: 00000000 nop
001c8adc: 080722c3 j 0x001c8b0c
001c8ae0: 3405007a ori r5,r0,0x007a                  # r5 = 0x7A: Palette 122 for Dragon Reis
001c8ae4: 28a2003e slti r2,r5,0x003e                 # r2 = 0x01 if UNIT index is below 0x3E
001c8ae8: 14400008 bne r2,r0,0x001c8b0c              # Branch if so (special unit or generic human)
001c8aec: 24a4ffc2 addiu r4,r5,0xffc2                # r4 = UNIT index - 0x3E
001c8af0: 3c02801e lui r2,0x801e
001c8af4: 8c42caa8 lw r2,-0x3558(r2)                 # Load saved Job Data Pointer
001c8af8: 00041840 sll r3,r4,0x01                    # r3 = (UNIT index - 0x3E) * 2 
001c8afc: 9042002e lbu r2,0x002e(r2)                 # r2 = Monster Palette
001c8b00: 00641821 addu r3,r3,r4                     # r3 = (UNIT index - 0x3E) * 3
001c8b04: 2442003e addiu r2,r2,0x003e                # r2 = Monster Palette - 0x3E
001c8b08: 00622821 addu r5,r3,r2                     # r5 = (Unit index - 0x3E) * 3 + Monster Palette - 0x3E
001c8b0c: 04a10002 bgez r5,0x001c8b18                # Branch if result GTE zero
001c8b10: 00a01021 addu r2,r5,r0
001c8b14: 24a20003 addiu r2,r5,0x0003
001c8b18: 00023083 sra r6,r2,0x02
001c8b1c: 00c01821 addu r3,r6,r0
001c8b20: 00031080 sll r2,r3,0x02
001c8b24: 00a23023 subu r6,r5,r2
001c8b28: 02203821 addu r7,r17,r0
001c8b2c: 00031200 sll r2,r3,0x08
001c8b30: 00061980 sll r3,r6,0x06
001c8b34: 00431021 addu r2,r2,r3
001c8b38: 00021043 sra r2,r2,0x01
001c8b3c: 3403f000 ori r3,r0,0xf000
001c8b40: 3c04801e lui r4,0x801e
001c8b44: 2484d2dc addiu r4,r4,0xd2dc            # constructed RECT data
001c8b48: 06210002 bgez r17,0x001c8b54
001c8b4c: 00431021 addu r2,r2,r3
001c8b50: 26270003 addiu r7,r17,0x0003
001c8b54: 02422821 addu r5,r18,r2                # open.bin + ?
001c8b58: 00071883 sra r3,r7,0x02
001c8b5c: 00031080 sll r2,r3,0x02
001c8b60: 02221023 subu r2,r17,r2
001c8b64: 00021100 sll r2,r2,0x04
001c8b68: 24420180 addiu r2,r2,0x0180
001c8b6c: 246300e0 addiu r3,r3,0x00e0
001c8b70: a4820000 sh r2,0x0000(r4)
001c8b74: 34020010 ori r2,r0,0x0010
001c8b78: 3c01801e lui r1,0x801e
001c8b7c: a422d2e0 sh r2,-0x2d20(r1)
001c8b80: 34020001 ori r2,r0,0x0001
001c8b84: 3c01801e lui r1,0x801e
001c8b88: a423d2de sh r3,-0x2d22(r1)
001c8b8c: 3c01801e lui r1,0x801e
001c8b90: a422d2e2 sh r2,-0x2d1e(r1)
001c8b94: 0c00923f jal 0x000248fc                 # SYS LoadImage 
001c8b98: 00000000 nop
001c8b9c: 3c038016 lui r3,0x8016
001c8ba0: 94635fda lhu r3,0x5fda(r3)
001c8ba4: 34020002 ori r2,r0,0x0002
001c8ba8: 14620005 bne r3,r2,0x001c8bc0           # branch if unit.bin was opened immediately/already opened?
001c8bac: 00000000 nop
001c8bb0: 0c0532a0 jal 0x0014ca80                 # Switch To Next Thread
001c8bb4: 26310001 addiu r17,r17,0x0001
001c8bb8: 080722f4 j 0x001c8bd0
001c8bbc: 2a220010 slti r2,r17,0x0010             # do for all 0x10 non-Guest party members
001c8bc0: 0c0091b5 jal 0x000246d4                 # SYS DrawSync
001c8bc4: 00002021 addu r4,r0,r0
001c8bc8: 26310001 addiu r17,r17,0x0001
001c8bcc: 2a220010 slti r2,r17,0x0010             # do for all 0x10 non-Guest party members
001c8bd0: 1440feb3 bne r2,r0,0x001c86a0
001c8bd4: 00000000 nop
001c8bd8: 0c011273 jal 0x000449cc                 # SCUS Call Free
001c8bdc: 02402021 addu r4,r18,r0
001c8be0: 8fbf0040 lw r31,0x0040(r29)
001c8be4: 8fb5003c lw r21,0x003c(r29)
001c8be8: 8fb40038 lw r20,0x0038(r29)
001c8bec: 8fb30034 lw r19,0x0034(r29)
001c8bf0: 8fb20030 lw r18,0x0030(r29)
001c8bf4: 8fb1002c lw r17,0x002c(r29)
001c8bf8: 8fb00028 lw r16,0x0028(r29)
001c8bfc: 27bd0048 addiu r29,r29,0x0048
001c8c00: 03e00008 jr r31
001c8c04: 00000000 nop