Calculate ENTD Unit Jobs

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search

Calculate ENTD Unit Jobs

0005b2b4: 27bdffe0 addiu r29,r29,0xffe0
0005b2b8: afb00010 sw r16,0x0010(r29)
0005b2bc: 00808021 addu r16,r4,r0		r16 = Unit's Data Pointer
0005b2c0: afb10014 sw r17,0x0014(r29)
0005b2c4: 00a08821 addu r17,r5,r0		r17 = ENTD Pointer
0005b2c8: 260400d2 addiu r4,r16,0x00d2		r4 = Unit's Job Level Pointer
0005b2cc: afbf0018 sw r31,0x0018(r29)
0005b2d0: 0c017991 jal 0x 0005e644		Data Nullifying (Job Levels)
0005b2d4: 3405000a ori r5,r0,0x000a		Limit = 10
0005b2d8: 1620000b bne r17,r0,0x 0005b308	Branch if ENTD Pointer exists
0005b2dc: 00002821 addu r5,r0,r0		r5 = 0
0005b2e0: 0c016d77 jal 0x 0005b5dc		Transfer Job's Data to Unit's Data
0005b2e4: 02002021 addu r4,r16,r0		r4 = Unit's Data Pointer
0005b2e8: 26040096 addiu r4,r16,0x0096		r4 = Pointer to Unit's Unlocked Jobs
0005b2ec: 00002821 addu r5,r0,r0		r5 = 0
0005b2f0: 34020020 ori r2,r0,0x0020		r2 = 0x20
0005b2f4: a2000013 sb r0,0x0013(r16)		Store Unit's Secondary Skillset = 0
0005b2f8: 0c0177b6 jal 0x 0005ded8		Store 3-Byte Data (Unlocked Jobs = 0)
0005b2fc: a2020006 sb r2,0x0006(r16)		Store Unit's Gender = Monster
0005b300: 08016d3a j 0x 0005b4e8
0005b304: 00000000 nop
0005b308: 922a0001 lbu r10,0x0001(r17)		Load ENTD's Gender Byte
0005b30c: 00000000 nop
0005b310: 31420020 andi r2,r10,0x0020
0005b314: 14400042 bne r2,r0,0x 0005b420		Branch if Unit is a Monster
0005b318: 00000000 nop
0005b31c: 92260008 lbu r6,0x0008(r17)		Load ENTD's Job Unlocked
0005b320: 00000000 nop
0005b324: 30c700ff andi r7,r6,0x00ff
0005b328: 2ce20014 sltiu r2,r7,0x0014
0005b32c: 1040003c beq r2,r0,0x 0005b420		Branch if Job Unlocked is Invalid
0005b330: 00000000 nop
0005b334: 92220009 lbu r2,0x0009(r17)		Load ENTD's Job Level
0005b338: 00000000 nop
0005b33c: 3043000f andi r3,r2,0x000f
0005b340: 30c20001 andi r2,r6,0x0001
0005b344: 14400002 bne r2,r0,0x 0005b350		Branch if Job Unlocked is odd (low nybble job)
0005b348: 00602021 addu r4,r3,r0		r4 = Job Level
0005b34c: 00032100 sll r4,r3,0x04		Job Level * 16
0005b350: 00071042 srl r2,r7,0x01		Job Unlocked / 2 (Job Byte)
0005b354: 02021021 addu r2,r16,r2
0005b358: a04400d2 sb r4,0x00d2(r2)		Store Job Unlocked
0005b35c: 00003021 addu r6,r0,r0		Counter = 0
0005b360: 00e04821 addu r9,r7,r0		r9 = Job Unlocked
0005b364: 3c038006 lui r3,0x8006
0005b368: 246360ba addiu r3,r3,0x60ba		r3 = Job Unlock Requirements
0005b36c: 00091080 sll r2,r9,0x02		Job Unlocked * 4
0005b370: 00491021 addu r2,r2,r9		Job Unlocked * 5
0005b374: 00021040 sll r2,r2,0x01		Job Unlocked * 10
0005b378: 00434021 addu r8,r2,r3
0005b37c: 11200004 beq r9,r0,0x 0005b390		Branch if Job Unlocked = Base
0005b380: 02063821 addu r7,r16,r6		r7 = Unit's Data Pointer + Counter
0005b384: 91040000 lbu r4,0x0000(r8)		Load Required Job Levels
0005b388: 08016ce8 j 0x 0005b3a0
0005b38c: 00000000 nop
0005b390: 10c00002 beq r6,r0,0x 0005b39c		Branch if Counter = 0
0005b394: 34040001 ori r4,r0,0x0001		Job Levels = 0x01
0005b398: 34040011 ori r4,r0,0x0011		Job Levels = 0x11
0005b39c: 02063821 addu r7,r16,r6		r7 = Unit's Data Pointer + Counter
0005b3a0: 90e200d2 lbu r2,0x00d2(r7)		Load Unit's Job Levels
0005b3a4: 00000000 nop
0005b3a8: 00821825 or r3,r4,r2			Enable Job Levels
0005b3ac: 3062000f andi r2,r3,0x000f
0005b3b0: 14400002 bne r2,r0,0x 0005b3bc		Branch if Low Nybble Job Level != 0
0005b3b4: 00602021 addu r4,r3,r0		r4 = Required Job Level
0005b3b8: 34640001 ori r4,r3,0x0001		Low Nybble Job Level = 1
0005b3bc: 308200f0 andi r2,r4,0x00f0
0005b3c0: 14400002 bne r2,r0,0x 0005b3cc		Branch if High Nybble Job Level != 0
0005b3c4: 25080001 addiu r8,r8,0x0001		Pointer ++
0005b3c8: 34840010 ori r4,r4,0x0010		High Nybble Job Level = 1
0005b3cc: 24c60001 addiu r6,r6,0x0001		Counter ++
0005b3d0: 28c2000a slti r2,r6,0x000a
0005b3d4: 1440ffe9 bne r2,r0,0x 0005b37c		Branch if Counter < 10
0005b3d8: a0e400d2 sb r4,0x00d2(r7)		Store Unit's new Job Levels
0005b3dc: 31420040 andi r2,r10,0x0040
0005b3e0: 10400006 beq r2,r0,0x 0005b3fc		Branch if Unit isn't a Female
0005b3e4: 31420080 andi r2,r10,0x0080
0005b3e8: 920200da lbu r2,0x00da(r16)		Load Unit's Bard Job Level
0005b3ec: 00000000 nop
0005b3f0: 304200f0 andi r2,r2,0x00f0		Bard Level = 0
0005b3f4: a20200da sb r2,0x00da(r16)		Store Unit's new Bard Level
0005b3f8: 31420080 andi r2,r10,0x0080
0005b3fc: 1040 0005 beq r2,r0,0x 0005b414		Branch if Unit isn't a Male
0005b400: 260400d2 addiu r4,r16,0x00d2		r4 = Unit's Job Level Pointer
0005b404: 920200db lbu r2,0x00db(r16)		Load Unit's Dancer Level
0005b408: 00000000 nop
0005b40c: 3042000f andi r2,r2,0x000f		Dancer Level = 0
0005b410: a20200db sb r2,0x00db(r16)		Store Unit's new Dancer Level
0005b414: 0c017705 jal 0x 0005dc14		Calculate Unlocked Jobs
0005b418: 01402821 addu r5,r10,r0		r5 = Unit's Gender Byte
0005b41c: 00402821 addu r5,r2,r0		r5 = Unlocked Jobs
0005b420: 0c0177b6 jal 0x 0005ded8		Store 3-Byte Data (Unlocked Jobs)
0005b424: 26040096 addiu r4,r16,0x0096		r4 = Unit's Unlocked Jobs Pointer
0005b428: 9222000a lbu r2,0x000a(r17)		Load ENTD Job ID
0005b42c: 02002021 addu r4,r16,r0		r4 = Unit's Data Pointer
0005b430: 0c016d77 jal 0x 0005b5dc		Transfer Job's Data to Unit's Data
0005b434: a2020003 sb r2,0x0003(r16)		Store Unit's Job ID
0005b438: 9226001d lbu r6,0x001d(r17)		Load ENTD Primary Skillset
0005b43c: 340200ff ori r2,r0,0x00ff		r2 = FF
0005b440: 30c300ff andi r3,r6,0x00ff
0005b444: 1062 0005 beq r3,r2,0x 0005b45c		Branch if Primary Skillset = FF (Job's)
0005b448: 00000000 nop
0005b44c: 10600003 beq r3,r0,0x 0005b45c		Branch if Primary Skillset = 0
0005b450: 340200ff ori r2,r0,0x00ff		r2 = FF
0005b454: a2060012 sb r6,0x0012(r16)		Store Unit's Primary Skillset
0005b458: a2020189 sb r2,0x0189(r16)		Store ? = FF
0005b45c: 9226000b lbu r6,0x000b(r17)		Load ENTD Secondary ID
0005b460: 340200fe ori r2,r0,0x00fe		r2 = FE
0005b464: 30c300ff andi r3,r6,0x00ff		r3 = Secondary ID
0005b468: 1462001e bne r3,r2,0x 0005b4e4		Branch if Secondary ID != Random
0005b46c: 00000000 nop
0005b470: 92020006 lbu r2,0x0006(r16)		Load Unit's Gender Byte
0005b474: 00000000 nop
0005b478: 30420020 andi r2,r2,0x0020
0005b47c: 10400003 beq r2,r0,0x 0005b48c		Branch if Unit isn't a Monster
0005b480: 00000000 nop
0005b484: 08016d3a j 0x 0005b4e8
0005b488: a2000013 sb r0,0x0013(r16)		Store Unit's Secondary ID = 0
0005b48c: 0c016d40 jal 0x 0005b500		Sprite Set and Random Secondary Job Calculation
0005b490: 02002021 addu r4,r16,r0		r4 = Unit's Data Pointer
0005b494: 00402021 addu r4,r2,r0		r4 = Chosen Job ID
0005b498: 308300ff andi r3,r4,0x00ff
0005b49c: 10600009 beq r3,r0,0x 0005b4c4		Branch if a Job wasn't chosen
0005b4a0: 00031040 sll r2,r3,0x01		ID * 2
0005b4a4: 00431021 addu r2,r2,r3		ID * 3
0005b4a8: 3c038006 lui r3,0x8006
0005b4ac: 8c636194 lw r3,0x6194(r3)		Load Job Data Pointer
0005b4b0: 00021100 sll r2,r2,0x04		ID * 48
0005b4b4: 00431021 addu r2,r2,r3
0005b4b8: 90430000 lbu r3,0x0000(r2)		Load Job's Skillset
0005b4bc: 08016d32 j 0x 0005b4c8
0005b4c0: 00000000 nop
0005b4c4: 308300ff andi r3,r4,0x00ff
0005b4c8: 92020012 lbu r2,0x0012(r16)		Load Unit's Primary Skillset ID
0005b4cc: 00000000 nop
0005b4d0: 14620002 bne r3,r2,0x 0005b4dc		Branch if Skillset != Chosen Skillset
0005b4d4: 00000000 nop
0005b4d8: 00001821 addu r3,r0,r0		Skillset = 0
0005b4dc: 08016d3a j 0x 0005b4e8
0005b4e0: a2030013 sb r3,0x0013(r16)		Store Chosen Secondary Skillset
0005b4e4: a2060013 sb r6,0x0013(r16)		Store Secondary Skillset = ENTD Secondary Skillset
0005b4e8: 8fbf0018 lw r31,0x0018(r29)
0005b4ec: 8fb10014 lw r17,0x0014(r29)
0005b4f0: 8fb00010 lw r16,0x0010(r29)
0005b4f4: 27bd0020 addiu r29,r29,0x0020
0005b4f8: 03e00008 jr r31
0005b4fc: 00000000 nop


Return Locations

0005aa40:  Unit Battle Initialization