Difference between revisions of "ATTACK.OUT Find Formation Palette Index"
Jump to navigation
Jump to search
m |
m |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 69: | Line 69: | ||
001c8684: 00008821 addu r17,r0,r0 # party index = 0 | 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 # r20 = | + | 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 # r19 = 0x801dd2d4 | 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 # | ||
Line 145: | 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) # | + | 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 157: | 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 | ||
Line 173: | Line 175: | ||
001c8820: 00b40018 mult r5,r20 # index * 0x66666667 | 001c8820: 00b40018 mult r5,r20 # index * 0x66666667 | ||
001c8824: 00051fc3 sra r3,r5,0x1f # r3 = 0x01 if negative (never) | 001c8824: 00051fc3 sra r3,r5,0x1f # r3 = 0x01 if negative (never) | ||
− | 001c8828: 00001010 mfhi r2 # index / | + | 001c8828: 00001010 mfhi r2 # index * 2 / 5 |
− | 001c882c: 00021083 sra r2,r2,0x02 # index / | + | 001c882c: 00021083 sra r2,r2,0x02 # index / 10 |
001c8830: 00433023 subu r6,r2,r3 # rounding | 001c8830: 00433023 subu r6,r2,r3 # rounding | ||
− | 001c8834: 00c01821 addu r3,r6,r0 | + | 001c8834: 00c01821 addu r3,r6,r0 # row = index / 10 |
− | 001c8838: 00031080 sll r2,r3,0x02 # index / | + | 001c8838: 00031080 sll r2,r3,0x02 # (index / 10) * 4 |
− | 001c883c: 00431021 addu r2,r2,r3 # index * 5 | + | 001c883c: 00431021 addu r2,r2,r3 # (index / 10) * 5 |
− | 001c8840: 00021040 sll r2,r2,0x01 # index * | + | 001c8840: 00021040 sll r2,r2,0x01 # (index / 10) * 10 |
001c8844: 0807222a j 0x001c88a8 | 001c8844: 0807222a j 0x001c88a8 | ||
− | 001c8848: 00a23023 subu r6,r5,r2 # index | + | 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) | 001c884c: 28a20008 slti r2,r5,0x0008 # r2 = 0x01 if first row of second page of formation sprites (human sized formation sprites) | ||
Line 187: | Line 189: | ||
001c8854: 00b40018 mult r5,r20 # index * 0x66666667 | 001c8854: 00b40018 mult r5,r20 # index * 0x66666667 | ||
001c8858: 00051fc3 sra r3,r5,0x1f # r3 = 0x01 if negative (never) | 001c8858: 00051fc3 sra r3,r5,0x1f # r3 = 0x01 if negative (never) | ||
− | 001c885c: 00001010 mfhi r2 # index / | + | 001c885c: 00001010 mfhi r2 # index * 2 / 5 |
− | 001c8860: 00021083 sra r2,r2,0x02 | + | 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 # index | + | 001c887c: 00a23023 subu r6,r5,r2 # col = index % 10 (modulo) |
001c8880: 24a4fff8 addiu r4,r5,0xfff8 # r4 = modified index - 8 | 001c8880: 24a4fff8 addiu r4,r5,0xfff8 # r4 = modified index - 8 | ||
001c8884: 00940018 mult r4,r20 # index * 0x66666667 | 001c8884: 00940018 mult r4,r20 # index * 0x66666667 | ||
001c8888: 00041fc3 sra r3,r4,0x1f # r3 = 0x01 if negative (never) | 001c8888: 00041fc3 sra r3,r4,0x1f # r3 = 0x01 if negative (never) | ||
− | 001c888c: 00001010 mfhi r2 | + | 001c888c: 00001010 mfhi r2 # index * 2 / 5 |
− | 001c8890: 00021043 sra r2,r2,0x01 | + | 001c8890: 00021043 sra r2,r2,0x01 # index / 5 |
− | 001c8894: 00433023 subu r6,r2,r3 | + | 001c8894: 00433023 subu r6,r2,r3 |
− | 001c8898: 00c01821 addu r3,r6,r0 | + | 001c8898: 00c01821 addu r3,r6,r0 # row = index / 5 |
− | 001c889c: 00031080 sll r2,r3,0x02 | + | 001c889c: 00031080 sll r2,r3,0x02 # (index / 5) * 4 |
− | 001c88a0: 00431021 addu r2,r2,r3 | + | 001c88a0: 00431021 addu r2,r2,r3 # (index / 5) * 5 |
− | 001c88a4: 00823023 subu r6,r4,r2 | + | 001c88a4: 00823023 subu r6,r4,r2 # col = index % 5 (modulo) |
001c88a8: 00603821 addu r7,r3,r0 | 001c88a8: 00603821 addu r7,r3,r0 | ||
Line 407: | Line 409: | ||
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 # do for all 0x10 party members | + | 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
# 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