Equipment Stat Setting

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
Equipment Stat Setting

Parameters : r4 = Unit Data pointer

This routine set Unit's 0x3c to 0x46 data based on Equipped item's data (Equipped Item ID come from Unit 0x1c to 0x20)
----------------------------------------------------------------------------------------------------------------
0005c398: 27bdffe8 addiu r29,r29,-0x0018    |
0005c39c: afb00010 sw r16,0x0010(r29)       |
0005c3a0: 00808021 addu r16,r4,r0           |r16 = Unit data pointer
0005c3a4: 2604003c addiu r4,r16,0x003c      |r4 = Unit's WP1 data pointer
0005c3a8: afbf0014 sw r31,0x0014(r29)       |
0005c3ac: 0c017991 jal 0x0005e644           |-->Data_Nullifying Nullify data from Unit 0x3c (Wp1) to 0x46 (LH shield M-Ev)
0005c3b0: 3405000b ori r5,r0,0x000b         |r5 = 0x0b
0005c3b4: 92030003 lbu r3,0x0003(r16)       |r3 = Unit's Job ID
0005c3b8: 00000000 nop                      |
0005c3bc: 00031040 sll r2,r3,0x01           |Job ID * 2
0005c3c0: 00431021 addu r2,r2,r3            |Job ID * 3
0005c3c4: 3c038006 lui r3,0x8006            |
0005c3c8: 8c636194 lw r3,0x6194(r3)         |r3 = Job Data Pointer
0005c3cc: 00021100 sll r2,r2,0x04           |r2 = Unit's Job ID * 0x30 (Job Offset in Job data)
0005c3d0: 00431021 addu r2,r2,r3            |r2 = Unit's Job data pointer
0005c3d4: 90430019 lbu r3,0x0019(r2)        |r3 = Job 's C-Ev
0005c3d8: 92020006 lbu r2,0x0006(r16)       |r2 = Unit's Gender
0005c3dc: 00000000 nop                      |
0005c3e0: 30420020 andi r2,r2,0x0020        |r2 = 0x20 If Unit is a monster
0005c3e4: 14400073 bne r2,r0,0x0005c5b4     #If Unit is not a monster /Else Branch to  END
0005c3e8: a2030043 sb r3,0x0043(r16)        |Store Job C-Ev in Unit C-ev
0005c3ec: 9202001c lbu r2,0x001c(r16)           |r2 = Unit's Accessory ID
0005c3f0: 00000000 nop                          |
0005c3f4: 00021840 sll r3,r2,0x01               |Accessory ID * 2
0005c3f8: 00621821 addu r3,r3,r2                |Accessory ID * 3
0005c3fc: 00031880 sll r3,r3,0x02               |Accessory ID * 0x0c (Item data size = Item offset in Item data table)
0005c400: 3c018006 lui r1,0x8006                |
0005c404: 00230821 addu r1,r1,r3                |r1 = 0x80060000 + Unit's Accessory offset
0005c408: 90222ebb lbu r2,0x2ebb(r1)            |r2 = Unit's Accessory Item Type flags
0005c40c: 3c048006 lui r4,0x8006                |
0005c410: 24842eb8 addiu r4,r4,0x2eb8           |r4 = Start of Item data Table
0005c414: 30420008 andi r2,r2,0x0008            |r2 = 0x08 if Unit's Accessory has his Accessory flag checked
0005c418: 1040000e beq r2,r0,0x0005c454         #If Unit's Accessory is valid (Second Table will be valid) /Else Skip Accessory section
0005c41c: 00000000 nop                              |
0005c420: 3c018006 lui r1,0x8006                    |
0005c424: 00230821 addu r1,r1,r3                    |r1 = 0x80060000 + Unit's Accessory offset
0005c428: 90222ebc lbu r2,0x2ebc(r1)                |r2 = Unit's Accessory Second Table ID
0005c42c: 3c038006 lui r3,0x8006                    |
0005c430: 24633f58 addiu r3,r3,0x3f58               |r3 = 0x80063f58
0005c434: 00021040 sll r2,r2,0x01                   |r2 Unit's Accessory Second Table ID *2
0005c438: 00431021 addu r2,r2,r3                    |r3 = Unit's Accessory Second Table data pointer
0005c43c: 90430000 lbu r3,0x0000(r2)                |r2 = Unit's Accessory P-Ev
0005c440: 00000000 nop                              |
0005c444: a2030040 sb r3,0x0040(r16)                |Store Unit's Accessory P-Ev in Unit's 0x40 (Accessory P-Ev)
0005c448: 90420001 lbu r2,0x0001(r2)                |r2 = Unit's Accessory M-Ev
0005c44c: 00000000 nop                              |
0005c450: a2020044 sb r2,0x0044(r16)                |Store Unit's Accessory M-Ev in Unit's 0x44 (Accessory M-Ev)
0005c454: 9202001e lbu r2,0x001e(r16)           |r2 = Unit's Right Hand's Shield ID
0005c458: 00000000 nop                          |
0005c45c: 00021840 sll r3,r2,0x01               |Right Hand's Shield ID * 2
0005c460: 00621821 addu r3,r3,r2                |Right Hand's Shield ID * 3
0005c464: 00031880 sll r3,r3,0x02               |Right Hand's Shield ID * 0x0c
0005c468: 00641021 addu r2,r3,r4                |r2 = Start of Unit's Right Hand's Shield data pointer
0005c46c: 90420003 lbu r2,0x0003(r2)            |r2 = Unit's Right Hand's Shield Type flag
0005c470: 00000000 nop                          |
0005c474: 30420040 andi r2,r2,0x0040            |r2 = 0x40 If Unit's Right Hand's Shield is a shield
0005c478: 1040000e beq r2,r0,0x0005c4b4         #If Right Hand's Shield is a shield /Else Avoid Right Hand's Shield Section
0005c47c: 00000000 nop                              |
0005c480: 3c018006 lui r1,0x8006                    |
0005c484: 00230821 addu r1,r1,r3                    |r1 = 0x80060000 + Unit's Right Hand's Shield offset
0005c488: 90222ebc lbu r2,0x2ebc(r1)                |r2 = Unit's Right Hand's Shield Second Table ID
0005c48c: 3c038006 lui r3,0x8006                    |
0005c490: 24633eb8 addiu r3,r3,0x3eb8               |r3 = 0x80063f58
0005c494: 00021040 sll r2,r2,0x01                   |r2 = Right Hand's Shield Second Table ID *2
0005c498: 00431821 addu r3,r2,r3                    |r3 = Right Hand's Shield Second Table data pointer
0005c49c: 90620000 lbu r2,0x0000(r3)                |r2 = Right Hand's Shield P-Ev
0005c4a0: 00000000 nop                              |
0005c4a4: a2020041 sb r2,0x0041(r16)                |Store Right Hand's Shield P-Ev in Unit Data
0005c4a8: 90620001 lbu r2,0x0001(r3)                |r2 = Right Hand's Shield M-Ev
0005c4ac: 00000000 nop                              |
0005c4b0: a2020045 sb r2,0x0045(r16)                |Store Right Hand's Shield M-Ev in Unit Data
0005c4b4: 92020020 lbu r2,0x0020(r16)           |r2 = Unit's LH shield
0005c4b8: 00000000 nop                          |
0005c4bc: 00021840 sll r3,r2,0x01               |Leftt Hand's Shield ID * 2
0005c4c0: 00621821 addu r3,r3,r2                |Leftt Hand's Shield ID * 3
0005c4c4: 00031880 sll r3,r3,0x02               |Leftt Hand's Shield ID * 0x0c
0005c4c8: 00641021 addu r2,r3,r4                |r2 = Start of Unit's Leftt Hand's Shield data pointer
0005c4cc: 90420003 lbu r2,0x0003(r2)            |r2 = Unit's Leftt Hand's Shield Type flag
0005c4d0: 00000000 nop                          |
0005c4d4: 30420040 andi r2,r2,0x0040            |r2 = 0x40 If Unit's Leftt Hand's Shield is a shield
0005c4d8: 1040000e beq r2,r0,0x0005c514         #If Leftt Hand's Shield is a shield /Else Avoid Leftt Hand's Shield Section
0005c4dc: 00000000 nop                              |
0005c4e0: 3c018006 lui r1,0x8006                    |
0005c4e4: 00230821 addu r1,r1,r3                    |r1 = 0x80060000 + Unit's Leftt Hand's Shield offset
0005c4e8: 90222ebc lbu r2,0x2ebc(r1)                |r2 = Unit's Leftt Hand's Shield Second Table ID
0005c4ec: 3c038006 lui r3,0x8006                    |
0005c4f0: 24633eb8 addiu r3,r3,0x3eb8               |r3 = 0x80063f58
0005c4f4: 00021040 sll r2,r2,0x01                   |r2 = Leftt Hand's Shield Second Table ID *2
0005c4f8: 00431821 addu r3,r2,r3                    |r3 = Leftt Hand's Shield Second Table data pointer
0005c4fc: 90620000 lbu r2,0x0000(r3)                |r2 = Leftt Hand's Shield P-Ev
0005c500: 00000000 nop                              |
0005c504: a2020042 sb r2,0x0042(r16)                |Store Leftt Hand's Shield P-Ev in Unit Data
0005c508: 90620001 lbu r2,0x0001(r3)                |r2 = Leftt Hand's Shield M-Ev
0005c50c: 00000000 nop                              |
0005c510: a2020046 sb r2,0x0046(r16)                |Store Leftt Hand's Shield M-Ev in Unit Data
0005c514: 9203001d lbu r3,0x001d(r16)           |r3 = Unit's Right Hand's Weapon
0005c518: 00000000 nop                          |
0005c51c: 00031040 sll r2,r3,0x01               |Right Hand's Weapon ID * 2
0005c520: 00431021 addu r2,r2,r3                |Right Hand's Weapon ID * 3
0005c524: 00021080 sll r2,r2,0x02               |Right Hand's Weapon ID * 0x0c
0005c528: 00441021 addu r2,r2,r4                |r2 = Start of Unit's Right Hand's Weapon data pointer
0005c52c: 90420003 lbu r2,0x0003(r2)            |r2 = Unit's Right Hand's Weapon Type flag
0005c530: 00000000 nop                          |
0005c534: 30420080 andi r2,r2,0x0080            |r2 = 0x80 If Unit's Right Hand's Weapon is a Weapon
0005c538: 1040000a beq r2,r0,0x0005c564         #If Right Hand's Weapon is a Weapon /Else Avoid Right Hand's Weapon Section
0005c53c: 000318c0 sll r3,r3,0x03                   |r3 = Right Hand's Weapon ID * 0x08
0005c540: 3c028006 lui r2,0x8006                    |
0005c544: 24423ab8 addiu r2,r2,0x3ab8               |r2 = 0x80063ab8 Weapon secondary data Table start
0005c548: 00621821 addu r3,r3,r2                    |r3 = Unit's Right Hand's Weapon Secondary data pointer
0005c54c: 90620004 lbu r2,0x0004(r3)                |r2 = Right Hand's Weapon Weapon Power
0005c550: 00000000 nop                              |
0005c554: a202003c sb r2,0x003c(r16)                |Store Right Hand's Weapon Power in Unit Data
0005c558: 90620005 lbu r2,0x0005(r3)                |r2 = Right Hand's Weapon W-Ev
0005c55c: 00000000 nop                              |
0005c560: a202003e sb r2,0x003e(r16)                |Store Right Hand's Weapon W-Ev in Unit Data
0005c564: 9203001f lbu r3,0x001f(r16)           |r3 = Unit's Left Hand's Weapon
0005c568: 00000000 nop                          |
0005c56c: 00031040 sll r2,r3,0x01               |Left Hand's Weapon ID * 2
0005c570: 00431021 addu r2,r2,r3                |Left Hand's Weapon ID * 3
0005c574: 00021080 sll r2,r2,0x02               |Left Hand's Weapon ID * 0x0c
0005c578: 00441021 addu r2,r2,r4                |r2 = Start of Unit's Left Hand's Weapon data pointer
0005c57c: 90420003 lbu r2,0x0003(r2)            |r2 = Unit's Left Hand's Weapon Type flag
0005c580: 00000000 nop                          |
0005c584: 30420080 andi r2,r2,0x0080            |r2 = 0x80 If Unit's Left Hand's Weapon is a Weapon
0005c588: 1040000a beq r2,r0,0x0005c5b4         #If Left Hand's Weapon is a Weapon /Else Avoid Left Hand's Weapon Section
0005c58c: 000318c0 sll r3,r3,0x03                   |r3 = Left Hand's Weapon ID * 0x08
0005c590: 3c028006 lui r2,0x8006                    |
0005c594: 24423ab8 addiu r2,r2,0x3ab8               |r2 = 0x80063ab8 Weapon secondary data Table start
0005c598: 00621821 addu r3,r3,r2                    |r3 = Unit's Left Hand's Weapon Secondary data pointer
0005c59c: 90620004 lbu r2,0x0004(r3)                |r2 = Left Hand's Weapon Weapon Power
0005c5a0: 00000000 nop                              |
0005c5a4: a202003d sb r2,0x003d(r16)                |Store Left Hand's Weapon Power in Unit Data
0005c5a8: 90620005 lbu r2,0x0005(r3)                |r2 = Left Hand's Weapon W-Ev
0005c5ac: 00000000 nop                              |
0005c5b0: a202003f sb r2,0x003f(r16)                |Store Left Hand's Weapon W-Ev in Unit Data
0005c5b4: 8fbf0014 lw r31,0x0014(r29)           END
0005c5b8: 8fb00010 lw r16,0x0010(r29)               
0005c5bc: 27bd0018 addiu r29,r29,0x0018             
0005c5c0: 03e00008 jr r31                           
0005c5c4: 00000000 nop                              

Return Locations

SCUS_942.21
0005ab0c: Equipment/Move/Jump +X/Name Storing/Generation
0005d704: Status Setting/Checking + Equip/R/S/M Stats


Notes

Notes : The Item Data/Table start at 80062eb8 Each items are 12 bytes long So loading 0x8006YYYY (YYYY = Item ID * 12) + 2ebb = Loading offset 0x03 (2ebb - 2eb8) of this item