Difference between revisions of "Load ability data for skillset"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(reformatting test)
Line 1: Line 1:
  
 
  Load ability data for skillset (MP, CT, Turns, req. sword booleans)
 
  Load ability data for skillset (MP, CT, Turns, req. sword booleans)
  001817c0: 27bdfed0 addiu r29,r29,0xfed0
+
  0x001817C0: addiu r29, r29, 0xFED0
  001817c4: afa400b0 sw r4,0x00b0(r29)
+
  0x001817C4: sw r4, 0x00B0(r29)
  001817c8: 8fa400b0 lw r4,0x00b0(r29)             unit data?
+
  0x001817C8: lw r4, 0x00B0(r29)         unit data?
  001817cc: afb40118 sw r20,0x0118(r29)
+
  0x001817CC: sw r20, 0x0118(r29)
  001817d0: 8fb40140 lw r20,0x0140(r29)             0x10 stack address
+
  0x001817D0: lw r20, 0x0140(r29)         0x10 stack address
  001817d4: afb20110 sw r18,0x0110(r29)
+
  0x001817D4: sw r18, 0x0110(r29)
  001817d8: 8fb20148 lw r18,0x0148(r29)             0x18 stack address
+
  0x001817D8: lw r18, 0x0148(r29)         0x18 stack address
  001817dc: afb1010c sw r17,0x010c(r29)
+
  0x001817DC: sw r17, 0x010C(r29)
  001817e0: 8fb1014c lw r17,0x014c(r29)             0x1c stack address
+
  0x001817E0: lw r17, 0x014C(r29)         0x1c stack address
  001817e4: afbe0128 sw r30,0x0128(r29)
+
  0x001817E4: sw r30, 0x0128(r29)
  001817e8: 0000f021 addu r30,r0,r0
+
  0x001817E8: addu r30, r0, r0
  001817ec: afbf012c sw r31,0x012c(r29)
+
  0x001817EC: sw r31, 0x012C(r29)
  001817f0: afb70124 sw r23,0x0124(r29)
+
  0x001817F0: sw r23, 0x0124(r29)
  001817f4: afb60120 sw r22,0x0120(r29)
+
  0x001817F4: sw r22, 0x0120(r29)
  001817f8: afb5011c sw r21,0x011c(r29)
+
  0x001817F8: sw r21, 0x011C(r29)
  001817fc: afb30114 sw r19,0x0114(r29)
+
  0x001817FC: sw r19, 0x0114(r29)
  00181800: afb00108 sw r16,0x0108(r29)
+
  0x00181800: sw r16, 0x0108(r29)
  00181804: afa600c0 sw r6,0x00c0(r29)             stack address (0x20)
+
  0x00181804: sw r6, 0x00C0(r29)         stack address (0x20)
  00181808: afa000e0 sw r0,0x00e0(r29)
+
  0x00181808: sw r0, 0x00E0(r29)
  0018180c: afa000e8 sw r0,0x00e8(r29)
+
  0x0018180C: sw r0, 0x00E8(r29)
  00181810: afa000f0 sw r0,0x00f0(r29)
+
  0x00181810: sw r0, 0x00F0(r29)
  00181814: afa000f8 sw r0,0x00f8(r29)
+
  0x00181814: sw r0, 0x00F8(r29)
  00181818: afa00100 sw r0,0x0100(r29)
+
  0x00181818: sw r0, 0x0100(r29)
  0018181c: afa700c8 sw r7,0x00c8(r29)             Stack address (0x48)
+
  0x0018181C: sw r7, 0x00C8(r29)         Stack address (0x48)
  00181820: 0c060435 jal 0x 001810d4 load unit data (r2)
+
  0x00181820: jal 0x001810D4              load unit data (r2)
  00181824: a3a500b8 sb r5,0x00b8(r29) store primary skillset
+
  0x00181824: sb r5, 0x00B8(r29)         store primary skillset
  00181828: 00408021 addu r16,r2,r0
+
  0x00181828: addu r16, r2, r0
  0018182c: 120000c3 beq r16,r0,0x 00181b3c
+
  0x0018182C: beq r16, r0, 0x00181B3C
  00181830: 00001021 addu r2,r0,r0
+
  0x00181830: addu r2, r0, r0
  00181834: 9202005a lbu r2,0x005a(r16) load statii
+
  0x00181834: lbu r2, 0x005A(r16)         load statii
  00181838: 00000000 nop
+
  0x00181838: nop
  0018183c: 30420002 andi r2,r2,0x0002
+
  0x0018183C: andi r2, r2, 0x0002
  00181840: 10400003 beq r2,r0,0x 00181850 branch if not frog
+
  0x00181840: beq r2, r0, 0x00181850      branch if not frog
  00181844: 00000000 nop
+
  0x00181844: nop
  00181848: 34090001 ori r9,r0,0x0001
+
  0x00181848: ori r9, r0, 0x0001
  0018184c: afa90100 sw r9,0x0100(r29)                 frog flag
+
  0x0018184C: sw r9, 0x0100(r29)         frog flag
  00181850: 92020090 lbu r2,0x0090(r16) load support 2
+
  0x00181850: lbu r2, 0x0090(r16)         load support 2
  00181854: 00000000 nop
+
  0x00181854: nop
  00181858: 30420080 andi r2,r2,0x0080
+
  0x00181858: andi r2, r2, 0x0080
  0018185c: 10400003 beq r2,r0,0x 0018186c branch if not half of MP
+
  0x0018185C: beq r2, r0, 0x0018186C      branch if not half of MP
  00181860: 00000000 nop
+
  0x00181860: nop
  00181864: 34080001 ori r8,r0,0x0001
+
  0x00181864: ori r8, r0, 0x0001
  00181868: afa800f8 sw r8,0x00f8(r29)                 half mp flag
+
  0x00181868: sw r8, 0x00F8(r29)         half mp flag
  0018186c: 92030092 lbu r3,0x0092(r16) load support 4
+
  0x0018186C: lbu r3, 0x0092(r16)         load support 4
  00181870: 00000000 nop
+
  0x00181870: nop
  00181874: 30620004 andi r2,r3,0x0004
+
  0x00181874: andi r2, r3, 0x0004
  00181878: 10400003 beq r2,r0,0x 00181888 branch if not non-charge
+
  0x00181878: beq r2, r0, 0x00181888      branch if not non-charge
  0018187c: 34090002 ori r9,r0,0x0002
+
  0x0018187C: ori r9, r0, 0x0002
  00181880: 08060626 j 0x 00181898
+
  0x00181880: j 0x00181898
  00181884: afa900f0 sw r9,0x00f0(r29)                 non charge flag
+
  0x00181884: sw r9, 0x00F0(r29)         non charge flag
  00181888: 30620008 andi r2,r3,0x0008
+
  0x00181888: andi r2, r3, 0x0008
  0018188c: 10400002 beq r2,r0,0x 00181898 branch if not short charge
+
  0x0018188C: beq r2, r0, 0x00181898      branch if not short charge
  00181890: 34080001 ori r8,r0,0x0001
+
  0x00181890: ori r8, r0, 0x0001
  00181894: afa800f0 sw r8,0x00f0(r29)                 short charge flag
+
  0x00181894: sw r8, 0x00F0(r29)         short charge flag
  00181898: 27a40010 addiu r4,r29,0x0010
+
  0x00181898: addiu r4, r29, 0x0010
  0018189c: 0c060dc3 jal 0x0018370c Calculate AT list
+
  0x0018189C: jal 0x0018370C              Calculate AT list
  001818a0: 00002821 addu r5,r0,r0
+
  0x001818A0: addu r5, r0, r0
  001818a4: 92030184 lbu r3,0x0184(r16) load equipped flags
+
  0x001818A4: lbu r3, 0x0184(r16)         load equipped flags
  001818a8: 00000000 nop
+
  0x001818A8: nop
  001818ac: 30620004 andi r2,r3,0x0004
+
  0x001818AC: andi r2, r3, 0x0004
  001818b0: 10400003 beq r2,r0,0x 001818c0 branch if materia blade not equipped
+
  0x001818B0: beq r2, r0, 0x001818C0      branch if materia blade not equipped
  001818b4: 30620008 andi r2,r3,0x0008
+
  0x001818B4: andi r2, r3, 0x0008
  001818b8: 34090001 ori r9,r0,0x0001
+
  0x001818B8: ori r9, r0, 0x0001
  001818bc: afa900e0 sw r9,0x00e0(r29)                 materia blade flag
+
  0x001818BC: sw r9, 0x00E0(r29)         materia blade flag
  001818c0: 10400003 beq r2,r0,0x 001818d0 branch if sword not equipped
+
  0x001818C0: beq r2, r0, 0x001818D0      branch if sword not equipped
  001818c4: 00000000 nop
+
  0x001818C4: nop
  001818c8: 34080001 ori r8,r0,0x0001
+
  0x001818C8: ori r8, r0, 0x0001
  001818cc: afa800e8 sw r8,0x00e8(r29)                 sword flag
+
  0x001818CC: sw r8, 0x00E8(r29)         sword flag
  001818d0: 92020006 lbu r2,0x0006(r16) load gender
+
  0x001818D0: lbu r2, 0x0006(r16)         load gender
  001818d4: 00000000 nop
+
  0x001818D4: nop
  001818d8: 30420020 andi r2,r2,0x0020
+
  0x001818D8: andi r2, r2, 0x0020
  001818dc: 14400016 bne r2,r0,0x 00181938 branch if not human
+
  0x001818DC: bne r2, r0, 0x00181938      branch if not human
  001818e0: 00000000 nop
+
  0x001818E0: nop
  001818e4: 93a900b8 lbu r9,0x00b8(r29) load primary skillset
+
  0x001818E4: lbu r9, 0x00B8(r29)         load primary skillset
  001818e8: 00000000 nop
+
  0x001818E8: nop
  001818ec: 2522fffb addiu r2,r9,0xfffb primary skillset - 5
+
  0x001818EC: addiu r2, r9, 0xFFFB        primary skillset - 5
  001818f0: 304200ff andi r2,r2,0x00ff
+
  0x001818F0: andi r2, r2, 0x00FF
  001818f4: 2c420013 sltiu r2,r2,0x0013
+
  0x001818F4: sltiu r2, r2, 0x0013
  001818f8: 10400004 beq r2,r0,0x 0018190c branch if not a generic skillset
+
  0x001818F8: beq r2, r0, 0x0018190C      branch if not a generic skillset
  001818fc: 00000000 nop
+
  0x001818FC: nop
  00181900: 93a200b8 lbu r2,0x00b8(r29) load primary skillset
+
  0x00181900: lbu r2, 0x00B8(r29)         load primary skillset
  00181904: 0806064f j 0x 0018193c
+
  0x00181904: j 0x0018193C
  00181908: 2445fffb addiu r5,r2,0xfffb
+
  0x00181908: addiu r5, r2, 0xFFFB
  0018190c: 92020012 lbu r2,0x0012(r16) load primary skillset
+
  0x0018190C: lbu r2, 0x0012(r16)         load primary skillset
  00181910: 93a300b8 lbu r3,0x00b8(r29)
+
  0x00181910: lbu r3, 0x00B8(r29)
  00181914: 00000000 nop
+
  0x00181914: nop
  00181918: 10620005 beq r3,r2,0x 00181930 branch if loaded skillset = units primary skillset
+
  0x00181918: beq r3, r2, 0x00181930      branch if loaded skillset = units primary skillset
  0018191c: 00002821 addu r5,r0,r0
+
  0x0018191C: addu r5, r0, r0
  00181920: 92020162 lbu r2,0x0162(r16) load special skillset
+
  0x00181920: lbu r2, 0x0162(r16)         load special skillset
  00181924: 00000000 nop
+
  0x00181924: nop
  00181928: 14620003 bne r3,r2,0x 00181938 branch if not units primary skillset
+
  0x00181928: bne r3, r2, 0x00181938      branch if not units primary skillset
  0018192c: 00000000 nop
+
  0x0018192C: nop
  00181930: 08060650 j 0x 00181940
+
  0x00181930: j 0x00181940
  00181934: 2402ffff addiu r2,r0,0xffff
+
  0x00181934: addiu r2, r0, 0xFFFF
  00181938: 2405ffff addiu r5,r0,0xffff
+
  0x00181938: addiu r5, r0, 0xFFFF
  0018193c: 2402ffff addiu r2,r0,0xffff
+
  0x0018193C: addiu r2, r0, 0xFFFF
  00181940: 14a20004 bne r5,r2,0x 00181954 branch if skillset - 5 is not 0xff
+
  0x00181940: bne r5, r2, 0x00181954      branch if skillset - 5 is not 0xff
  00181944: 3c0800ff lui r8,0x00ff
+
  0x00181944: lui r8, 0x00FF
 
  store known abilities = all
 
  store known abilities = all
  00181948: 3508ffff ori r8,r8,0xffff
+
  0x00181948: ori r8, r8, 0xFFFF
  0018194c: 08060658 j 0x 00181960
+
  0x0018194C: j 0x00181960
  00181950: afa800d0 sw r8,0x00d0(r29)                   store known abilities = all
+
  0x00181950: sw r8, 0x00D0(r29)         store known abilities = all
  
  00181954: 0c017880 jal 0x0005e200 get known abilities
+
  0x00181954: jal 0x0005E200              get known abilities
  00181958: 02002021 addu r4,r16,r0
+
  0x00181958: addu r4, r16, r0
  0018195c: afa200d0 sw r2,0x00d0(r29) store known abilities (fffec0)
+
  0x0018195C: sw r2, 0x00D0(r29)         store known abilities (fffec0)
  00181960: 00009821 addu r19,r0,r0
+
  0x00181960: addu r19, r0, r0
  00181964: 03d1b821 addu r23,r30,r17                   0x90 stack address(item)
+
  0x00181964: addu r23, r30, r17         0x90 stack address(item)
  00181968: 03d2b021 addu r22,r30,r18                   0x18 stack address
+
  0x00181968: addu r22, r30, r18         0x18 stack address
  0018196c: 8fa900c8 lw r9,0x00c8(r29)                   0x48 stack address(item)
+
  0x0018196C: lw r9, 0x00C8(r29)         0x48 stack address(item)
  00181970: 03d4a821 addu r21,r30,r20                   0x60 stack address
+
  0x00181970: addu r21, r30, r20         0x60 stack address
  00181974: 03c9a021 addu r20,r30,r9        
+
  0x00181974: addu r20, r30, r9                  
  00181978: 3c020080 lui r2,0x0080
+
  0x00181978: lui r2, 0x0080
  
  0018197c: 8fa800d0 lw r8,0x00d0(r29) load known abilities?
+
  0x0018197C: lw r8, 0x00D0(r29)         load known abilities?
  00181980: 02621007 srav r2,r2,r19
+
  0x00181980: srav r2, r2, r19
  00181984: 01021024 and r2,r8,r2 known abilities and 0x800000
+
  0x00181984: and r2, r8, r2             known abilities and 0x800000
  00181988: 10400064 beq r2,r0,0x 00181b1c
+
  0x00181988: beq r2, r0, 0x00181B1C
  0018198c: 00000000 nop
+
  0x0018198C: nop
  00181990: 93a400b8 lbu r4,0x00b8(r29) load skillset
+
  0x00181990: lbu r4, 0x00B8(r29)         load skillset
  00181994: 0c01695a jal 0x0005a568 load ability from skillset
+
  0x00181994: jal 0x0005A568              load ability from skillset
  00181998: 02602821 addu r5,r19,r0
+
  0x00181998: addu r5, r19, r0
  0018199c: 8fa90100 lw r9,0x0100(r29) load frog flag
+
  0x0018199C: lw r9, 0x0100(r29)         load frog flag
  001819a0: 00402021 addu r4,r2,r0
+
  0x001819A0: addu r4, r2, r0
  001819a4: 11200006 beq r9,r0,0x 001819c0 branch if ?? status present?
+
  0x001819A4: beq r9, r0, 0x001819C0      branch if ?? status present?
  001819a8: a7a400d8 sh r4,0x00d8(r29) store ability
+
  0x001819A8: sh r4, 0x00D8(r29)         store ability
 
if frog
 
if frog
  001819ac: 00041400 sll r2,r4,0x10
+
  0x001819AC: sll r2, r4, 0x10
  001819b0: 00021403 sra r2,r2,0x10
+
  0x001819B0: sra r2, r2, 0x10
  001819b4: 3403001d ori r3,r0,0x001d
+
  0x001819B4: ori r3, r0, 0x001D
  001819b8: 14430058 bne r2,r3,0x 00181b1c branch if ability is not 0x1d frog?
+
  0x001819B8: bne r2, r3, 0x00181B1C      branch if ability is not 0x1d frog?
  001819bc: 00000000 nop
+
  0x001819BC: nop
  
  001819c0: 00041400 sll r2,r4,0x10
+
  0x001819C0: sll r2, r4, 0x10
  001819c4: 00021c03 sra r3,r2,0x10
+
  0x001819C4: sra r3, r2, 0x10
  001819c8: 10600054 beq r3,r0,0x 00181b1c branch if ability = 0
+
  0x001819C8: beq r3, r0, 0x00181B1C      branch if ability = 0
  001819cc: 2482ffff addiu r2,r4,0xffff
+
  0x001819CC: addiu r2, r4, 0xFFFF
  001819d0: 3042ffff andi r2,r2,0xffff
+
  0x001819D0: andi r2, r2, 0xFFFF
  001819d4: 2c42016f sltiu r2,r2,0x016f
+
  0x001819D4: sltiu r2, r2, 0x016F
  001819d8: 10400036 beq r2,r0,0x 00181ab4 branch if ability is not a regular ability
+
  0x001819D8: beq r2, r0, 0x00181AB4      branch if ability is not a regular ability
 
  regular ability
 
  regular ability
  001819dc: 000310c0 sll r2,r3,0x03
+
  0x001819DC: sll r2, r3, 0x03
  001819e0: 00431023 subu r2,r2,r3
+
  0x001819E0: subu r2, r2, r3
  001819e4: 00021040 sll r2,r2,0x01
+
  0x001819E4: sll r2, r2, 0x01
  001819e8: 3c038006 lui r3,0x8006
+
  0x001819E8: lui r3, 0x8006
  001819ec: 2463fbf0 addiu r3,r3,0xfbf0 load ability data pointer 2
+
  0x001819EC: addiu r3, r3, 0xFBF0        load ability data pointer 2
  001819f0: 00432021 addu r4,r2,r3
+
  0x001819F0: addu r4, r2, r3
  001819f4: 90830006 lbu r3,0x0006(r4)
+
  0x001819F4: lbu r3, 0x0006(r4)
  001819f8: 00000000 nop
+
  0x001819F8: nop
  001819fc: 30620008 andi r2,r3,0x0008
+
  0x001819FC: andi r2, r3, 0x0008
  00181a00: 10400005 beq r2,r0,0x 00181a18 ability requires sword check
+
  0x00181A00: beq r2, r0, 0x00181A18      ability requires sword check
  00181a04: 00000000 nop
+
  0x00181A04: nop
  00181a08: 8fa800e8 lw r8,0x00e8(r29)
+
  0x00181A08: lw r8, 0x00E8(r29)
  00181a0c: 00000000 nop
+
  0x00181A0C: nop
  00181a10: 11000042 beq r8,r0,0x 00181b1c
+
  0x00181A10: beq r8, r0, 0x00181B1C
  00181a14: 00000000 nop
+
  0x00181A14: nop
  00181a18: 30620004 andi r2,r3,0x0004
+
  0x00181A18: andi r2, r3, 0x0004
  00181a1c: 10400005 beq r2,r0,0x 00181a34 ability requires materia blade check
+
  0x00181A1C: beq r2, r0, 0x00181A34      ability requires materia blade check
  00181a20: 00000000 nop
+
  0x00181A20: nop
  00181a24: 8fa900e0 lw r9,0x00e0(r29)
+
  0x00181A24: lw r9, 0x00E0(r29)
  00181a28: 00000000 nop
+
  0x00181A28: nop
  00181a2c: 1120003b beq r9,r0,0x 00181b1c
+
  0x00181A2C: beq r9, r0, 0x00181B1C
  00181a30: 00000000 nop
+
  0x00181A30: nop
  00181a34: 8fa800f8 lw r8,0x00f8(r29) load (half of mp check?)
+
  0x00181A34: lw r8, 0x00F8(r29)         load (half of mp check?)
  00181a38: 9091000d lbu r17,0x000d(r4) load MP cost
+
  0x00181A38: lbu r17, 0x000D(r4)         load MP cost
  00181a3c: 11000002 beq r8,r0,0x 00181a48
+
  0x00181A3C: beq r8, r0, 0x00181A48
  00181a40: 26220001 addiu r2,r17,0x0001
+
  0x00181A40: addiu r2, r17, 0x0001
  00181a44: 00028843 sra r17,r2,0x01 MP cost / 2
+
  0x00181A44: sra r17, r2, 0x01           MP cost / 2
  00181a48: 9082000c lbu r2,0x000c(r4) load CT
+
  0x00181A48: lbu r2, 0x000C(r4)         load CT
  00181a4c: 90830005 lbu r3,0x0005(r4) load flags 3
+
  0x00181A4C: lbu r3, 0x0005(r4)         load flags 3
  00181a50: 3050007f andi r16,r2,0x007f r16 = CT
+
  0x00181A50: andi r16, r2, 0x007F        r16 = CT
  00181a54: 000321c2 srl r4,r3,0x07
+
  0x00181A54: srl r4, r3, 0x07
  00181a58: 30620020 andi r2,r3,0x0020 affected by silence
+
  0x00181A58: andi r2, r3, 0x0020         affected by silence
  00181a5c: 00021102 srl r2,r2,0x04
+
  0x00181A5C: srl r2, r2, 0x04
  00181a60: 30630004 andi r3,r3,0x0004 persevere
+
  0x00181A60: andi r3, r3, 0x0004         persevere
  00181a64: 1460000b bne r3,r0,0x 00181a94 branch if persevere true
+
  0x00181A64: bne r3, r0, 0x00181A94      branch if persevere true
  00181a68: 00829025 or r18,r4,r2 r18 = silence and persevere checks
+
  0x00181A68: or r18, r4, r2             r18 = silence and persevere checks
  00181a6c: 8fa900f0 lw r9,0x00f0(r29)
+
  0x00181A6C: lw r9, 0x00F0(r29)
  00181a70: 34020001 ori r2,r0,0x0001
+
  0x00181A70: ori r2, r0, 0x0001
  00181a74: 15220002 bne r9,r2,0x 00181a80 short charge check
+
  0x00181A74: bne r9, r2, 0x00181A80      short charge check
  00181a78: 26020001 addiu r2,r16,0x0001
+
  0x00181A78: addiu r2, r16, 0x0001
  00181a7c: 00028043 sra r16,r2,0x01 (CT+1) / 2
+
  0x00181A7C: sra r16, r2, 0x01           (CT+1) / 2
  00181a80: 8fa800f0 lw r8,0x00f0(r29)
+
  0x00181A80: lw r8, 0x00F0(r29)
  00181a84: 34020002 ori r2,r0,0x0002
+
  0x00181A84: ori r2, r0, 0x0002
  00181a88: 15020003 bne r8,r2,0x 00181a98 non-charge check
+
  0x00181A88: bne r8, r2, 0x00181A98      non-charge check
  00181a8c: 02002821 addu r5,r16,r0 store (CT + 1)/2
+
  0x00181A8C: addu r5, r16, r0           store (CT + 1)/2
  00181a90: 00008021 addu r16,r0,r0
+
  0x00181A90: addu r16, r0, r0
  00181a94: 02002821 addu r5,r16,r0 store 0 CT
+
  0x00181A94: addu r5, r16, r0           store 0 CT
  00181a98: 8fa400b0 lw r4,0x00b0(r29) load Unit ID
+
  0x00181A98: lw r4, 0x00B0(r29)         load Unit ID
  00181a9c: 0c0605c8 jal 0x 00181720 ability loading?
+
  0x00181A9C: jal 0x00181720              ability loading?
  00181aa0: 27a60010 addiu r6,r29,0x0010
+
  0x00181AA0: addiu r6, r29, 0x0010
  00181aa4: a2910000 sb r17,0x0000(r20) store MP cost ??? stack
+
  0x00181AA4: sb r17, 0x0000(r20)         store MP cost ??? stack
  00181aa8: a2b00000 sb r16,0x0000(r21) store CT      0x60 stack
+
  0x00181AA8: sb r16, 0x0000(r21)         store CT      0x60 stack
  00181aac: 080606bc j 0x 00181af0
+
  0x00181AAC: j 0x00181AF0
  00181ab0: a2d20000 sb r18,0x0000(r22) store silence/persevere checks? 0x18 stack
+
  0x00181AB0: sb r18, 0x0000(r22)         store silence/persevere checks? 0x18 stack
  00181ab4: 2482fe6a addiu r2,r4,0xfe6a
+
  0x00181AB4: addiu r2, r4, 0xFE6A
  00181ab8: 3042ffff andi r2,r2,0xffff
+
  0x00181AB8: andi r2, r2, 0xFFFF
  00181abc: 2c420008 sltiu r2,r2,0x0008
+
  0x00181ABC: sltiu r2, r2, 0x0008
  00181ac0: 1040000c beq r2,r0,0x 00181af4 branch if not charge ability
+
  0x00181AC0: beq r2, r0, 0x00181AF4      branch if not charge ability
  00181ac4: 00031040 sll r2,r3,0x01
+
  0x00181AC4: sll r2, r3, 0x01
  00181ac8: 27a60010 addiu r6,r29,0x0010
+
  0x00181AC8: addiu r6, r29, 0x0010
  00181acc: 3c018006 lui r1,0x8006
+
  0x00181ACC: lui r1, 0x8006
  00181ad0: 00220821 addu r1,r1,r2
+
  0x00181AD0: addu r1, r1, r2
  00181ad4: 90300d18 lbu r16,0x0d18(r1) load CT?
+
  0x00181AD4: lbu r16, 0x0D18(r1)         load CT?
  00181ad8: 8fa400b0 lw r4,0x00b0(r29)                   unit id
+
  0x00181AD8: lw r4, 0x00B0(r29)         unit id
  00181adc: 0c0605c8 jal 0x 00181720
+
  0x00181ADC: jal 0x00181720
  00181ae0: 02002821 addu r5,r16,r0
+
  0x00181AE0: addu r5, r16, r0
  00181ae4: a2800000 sb r0,0x0000(r20) store 0 for mp cost    ??? stack
+
  0x00181AE4: sb r0, 0x0000(r20)         store 0 for mp cost    ??? stack
  00181ae8: a2b00000 sb r16,0x0000(r21) store CT              0x60 stack
+
  0x00181AE8: sb r16, 0x0000(r21)         store CT              0x60 stack
  00181aec: a2c00000 sb r0,0x0000(r22) store 0 for silence/persevere checks    0x18
+
  0x00181AEC: sb r0, 0x0000(r22)         store 0 for silence/persevere checks    0x18
  00181af0: a2e20000 sb r2,0x0000(r23) store Turns            0x90 stack
+
  0x00181AF0: sb r2, 0x0000(r23)         store Turns            0x90 stack
  00181af4: 26f70001 addiu r23,r23,0x0001
+
  0x00181AF4: addiu r23, r23, 0x0001
  00181af8: 26d60001 addiu r22,r22,0x0001
+
  0x00181AF8: addiu r22, r22, 0x0001
  00181afc: 26b50001 addiu r21,r21,0x0001
+
  0x00181AFC: addiu r21, r21, 0x0001
  00181b00: 26940001 addiu r20,r20,0x0001
+
  0x00181B00: addiu r20, r20, 0x0001
  00181b04: 97a800d8 lhu r8,0x00d8(r29) load ability ID
+
  0x00181B04: lhu r8, 0x00D8(r29)         load ability ID
  00181b08: 8fa900c0 lw r9,0x00c0(r29) load pointer address 0x20
+
  0x00181B08: lw r9, 0x00C0(r29)         load pointer address 0x20
  00181b0c: 27de0001 addiu r30,r30,0x0001
+
  0x00181B0C: addiu r30, r30, 0x0001
  00181b10: a5280000 sh r8,0x0000(r9) store ability ID
+
  0x00181B10: sh r8, 0x0000(r9)           store ability ID
  00181b14: 25290002 addiu r9,r9,0x0002
+
  0x00181B14: addiu r9, r9, 0x0002
  00181b18: afa900c0 sw r9,0x00c0(r29) store new stack pointer?
+
  0x00181B18: sw r9, 0x00C0(r29)         store new stack pointer?
  00181b1c: 26730001 addiu r19,r19,0x0001
+
  0x00181B1C: addiu r19, r19, 0x0001
  00181b20: 2a620010 slti r2,r19,0x0010 run 15 times - for each ability?
+
  0x00181B20: slti r2, r19, 0x0010       run 15 times - for each ability?
  00181b24: 1440ff95 bne r2,r0,0x 0018197c
+
  0x00181B24: bne r2, r0, 0x0018197C
  00181b28: 3c020080 lui r2,0x0080
+
  0x00181B28: lui r2, 0x0080
  
  00181b2c: 8fa900c0 lw r9,0x00c0(r29)                   0x20 address
+
  0x00181B2C: lw r9, 0x00C0(r29)         0x20 address
  00181b30: 2402ffff addiu r2,r0,0xffff                  store end of list
+
  0x00181B30: addiu r2, r0, 0xFFFF        store end of list
  00181b34: a5220000 sh r2,0x0000(r9) store ??
+
  0x00181B34: sh r2, 0x0000(r9)           store ??
  00181b38: 03c01021 addu r2,r30,r0 return number of abilities?
+
  0x00181B38: addu r2, r30, r0           return number of abilities?
  00181b3c: 8fbf012c lw r31,0x012c(r29)
+
  0x00181B3C: lw r31, 0x012C(r29)
  00181b40: 8fbe0128 lw r30,0x0128(r29)
+
  0x00181B40: lw r30, 0x0128(r29)
  00181b44: 8fb70124 lw r23,0x0124(r29)
+
  0x00181B44: lw r23, 0x0124(r29)
  00181b48: 8fb60120 lw r22,0x0120(r29)
+
  0x00181B48: lw r22, 0x0120(r29)
  00181b4c: 8fb5011c lw r21,0x011c(r29)
+
  0x00181B4C: lw r21, 0x011C(r29)
  00181b50: 8fb40118 lw r20,0x0118(r29)
+
  0x00181B50: lw r20, 0x0118(r29)
  00181b54: 8fb30114 lw r19,0x0114(r29)
+
  0x00181B54: lw r19, 0x0114(r29)
  00181b58: 8fb20110 lw r18,0x0110(r29)
+
  0x00181B58: lw r18, 0x0110(r29)
  00181b5c: 8fb1010c lw r17,0x010c(r29)
+
  0x00181B5C: lw r17, 0x010C(r29)
  00181b60: 8fb00108 lw r16,0x0108(r29)
+
  0x00181B60: lw r16, 0x0108(r29)
  00181b64: 27bd0130 addiu r29,r29,0x0130
+
  0x00181B64: addiu r29, r29, 0x0130
  00181b68: 03e00008 jr r31
+
  0x00181B68: jr r31
  00181b6c: 00000000 nop
+
  0x00181B6C: nop

Revision as of 07:35, 2 February 2016

Load ability data for skillset (MP, CT, Turns, req. sword booleans)
0x001817C0: addiu r29, r29, 0xFED0
0x001817C4: sw r4, 0x00B0(r29)
0x001817C8: lw r4, 0x00B0(r29)          unit data?
0x001817CC: sw r20, 0x0118(r29)
0x001817D0: lw r20, 0x0140(r29)         0x10 stack address
0x001817D4: sw r18, 0x0110(r29)
0x001817D8: lw r18, 0x0148(r29)         0x18 stack address
0x001817DC: sw r17, 0x010C(r29)
0x001817E0: lw r17, 0x014C(r29)         0x1c stack address
0x001817E4: sw r30, 0x0128(r29)
0x001817E8: addu r30, r0, r0
0x001817EC: sw r31, 0x012C(r29)
0x001817F0: sw r23, 0x0124(r29)
0x001817F4: sw r22, 0x0120(r29)
0x001817F8: sw r21, 0x011C(r29)
0x001817FC: sw r19, 0x0114(r29)
0x00181800: sw r16, 0x0108(r29)
0x00181804: sw r6, 0x00C0(r29)          stack address (0x20)
0x00181808: sw r0, 0x00E0(r29)
0x0018180C: sw r0, 0x00E8(r29)
0x00181810: sw r0, 0x00F0(r29)
0x00181814: sw r0, 0x00F8(r29)
0x00181818: sw r0, 0x0100(r29)
0x0018181C: sw r7, 0x00C8(r29)          Stack address (0x48)
0x00181820: jal 0x001810D4              load unit data (r2)
0x00181824: sb r5, 0x00B8(r29)          store primary skillset
0x00181828: addu r16, r2, r0
0x0018182C: beq r16, r0, 0x00181B3C
0x00181830: addu r2, r0, r0
0x00181834: lbu r2, 0x005A(r16)         load statii
0x00181838: nop
0x0018183C: andi r2, r2, 0x0002
0x00181840: beq r2, r0, 0x00181850      branch if not frog
0x00181844: nop
0x00181848: ori r9, r0, 0x0001
0x0018184C: sw r9, 0x0100(r29)          frog flag
0x00181850: lbu r2, 0x0090(r16)         load support 2
0x00181854: nop
0x00181858: andi r2, r2, 0x0080
0x0018185C: beq r2, r0, 0x0018186C      branch if not half of MP
0x00181860: nop
0x00181864: ori r8, r0, 0x0001
0x00181868: sw r8, 0x00F8(r29)          half mp flag
0x0018186C: lbu r3, 0x0092(r16)         load support 4
0x00181870: nop
0x00181874: andi r2, r3, 0x0004
0x00181878: beq r2, r0, 0x00181888      branch if not non-charge
0x0018187C: ori r9, r0, 0x0002
0x00181880: j 0x00181898
0x00181884: sw r9, 0x00F0(r29)          non charge flag
0x00181888: andi r2, r3, 0x0008
0x0018188C: beq r2, r0, 0x00181898      branch if not short charge
0x00181890: ori r8, r0, 0x0001
0x00181894: sw r8, 0x00F0(r29)          short charge flag
0x00181898: addiu r4, r29, 0x0010
0x0018189C: jal 0x0018370C              Calculate AT list
0x001818A0: addu r5, r0, r0
0x001818A4: lbu r3, 0x0184(r16)         load equipped flags
0x001818A8: nop
0x001818AC: andi r2, r3, 0x0004
0x001818B0: beq r2, r0, 0x001818C0      branch if materia blade not equipped
0x001818B4: andi r2, r3, 0x0008
0x001818B8: ori r9, r0, 0x0001
0x001818BC: sw r9, 0x00E0(r29)          materia blade flag
0x001818C0: beq r2, r0, 0x001818D0      branch if sword not equipped
0x001818C4: nop
0x001818C8: ori r8, r0, 0x0001
0x001818CC: sw r8, 0x00E8(r29)          sword flag
0x001818D0: lbu r2, 0x0006(r16)         load gender
0x001818D4: nop
0x001818D8: andi r2, r2, 0x0020
0x001818DC: bne r2, r0, 0x00181938      branch if not human
0x001818E0: nop
0x001818E4: lbu r9, 0x00B8(r29)         load primary skillset
0x001818E8: nop
0x001818EC: addiu r2, r9, 0xFFFB        primary skillset - 5
0x001818F0: andi r2, r2, 0x00FF
0x001818F4: sltiu r2, r2, 0x0013
0x001818F8: beq r2, r0, 0x0018190C      branch if not a generic skillset
0x001818FC: nop
0x00181900: lbu r2, 0x00B8(r29)         load primary skillset
0x00181904: j 0x0018193C
0x00181908: addiu r5, r2, 0xFFFB
0x0018190C: lbu r2, 0x0012(r16)         load primary skillset
0x00181910: lbu r3, 0x00B8(r29)
0x00181914: nop
0x00181918: beq r3, r2, 0x00181930      branch if loaded skillset = units primary skillset
0x0018191C: addu r5, r0, r0
0x00181920: lbu r2, 0x0162(r16)         load special skillset
0x00181924: nop
0x00181928: bne r3, r2, 0x00181938      branch if not units primary skillset
0x0018192C: nop
0x00181930: j 0x00181940
0x00181934: addiu r2, r0, 0xFFFF
0x00181938: addiu r5, r0, 0xFFFF
0x0018193C: addiu r2, r0, 0xFFFF
0x00181940: bne r5, r2, 0x00181954      branch if skillset - 5 is not 0xff
0x00181944: lui r8, 0x00FF
store known abilities = all
0x00181948: ori r8, r8, 0xFFFF
0x0018194C: j 0x00181960
0x00181950: sw r8, 0x00D0(r29)          store known abilities = all
0x00181954: jal 0x0005E200              get known abilities
0x00181958: addu r4, r16, r0
0x0018195C: sw r2, 0x00D0(r29)          store known abilities (fffec0)
0x00181960: addu r19, r0, r0
0x00181964: addu r23, r30, r17          0x90 stack address(item)
0x00181968: addu r22, r30, r18          0x18 stack address
0x0018196C: lw r9, 0x00C8(r29)          0x48 stack address(item)
0x00181970: addu r21, r30, r20          0x60 stack address
0x00181974: addu r20, r30, r9                    
0x00181978: lui r2, 0x0080
0x0018197C: lw r8, 0x00D0(r29)          load known abilities?
0x00181980: srav r2, r2, r19
0x00181984: and r2, r8, r2              known abilities and 0x800000
0x00181988: beq r2, r0, 0x00181B1C
0x0018198C: nop
0x00181990: lbu r4, 0x00B8(r29)         load skillset
0x00181994: jal 0x0005A568              load ability from skillset
0x00181998: addu r5, r19, r0
0x0018199C: lw r9, 0x0100(r29)          load frog flag
0x001819A0: addu r4, r2, r0
0x001819A4: beq r9, r0, 0x001819C0      branch if ?? status present?
0x001819A8: sh r4, 0x00D8(r29)          store ability

if frog

0x001819AC: sll r2, r4, 0x10
0x001819B0: sra r2, r2, 0x10
0x001819B4: ori r3, r0, 0x001D
0x001819B8: bne r2, r3, 0x00181B1C      branch if ability is not 0x1d frog?
0x001819BC: nop
0x001819C0: sll r2, r4, 0x10
0x001819C4: sra r3, r2, 0x10
0x001819C8: beq r3, r0, 0x00181B1C      branch if ability = 0
0x001819CC: addiu r2, r4, 0xFFFF
0x001819D0: andi r2, r2, 0xFFFF
0x001819D4: sltiu r2, r2, 0x016F
0x001819D8: beq r2, r0, 0x00181AB4      branch if ability is not a regular ability
regular ability
0x001819DC: sll r2, r3, 0x03
0x001819E0: subu r2, r2, r3
0x001819E4: sll r2, r2, 0x01
0x001819E8: lui r3, 0x8006
0x001819EC: addiu r3, r3, 0xFBF0        load ability data pointer 2
0x001819F0: addu r4, r2, r3
0x001819F4: lbu r3, 0x0006(r4)
0x001819F8: nop
0x001819FC: andi r2, r3, 0x0008
0x00181A00: beq r2, r0, 0x00181A18      ability requires sword check
0x00181A04: nop
0x00181A08: lw r8, 0x00E8(r29)
0x00181A0C: nop
0x00181A10: beq r8, r0, 0x00181B1C
0x00181A14: nop
0x00181A18: andi r2, r3, 0x0004
0x00181A1C: beq r2, r0, 0x00181A34      ability requires materia blade check
0x00181A20: nop
0x00181A24: lw r9, 0x00E0(r29)
0x00181A28: nop
0x00181A2C: beq r9, r0, 0x00181B1C
0x00181A30: nop
0x00181A34: lw r8, 0x00F8(r29)          load (half of mp check?)
0x00181A38: lbu r17, 0x000D(r4)         load MP cost
0x00181A3C: beq r8, r0, 0x00181A48
0x00181A40: addiu r2, r17, 0x0001
0x00181A44: sra r17, r2, 0x01           MP cost / 2
0x00181A48: lbu r2, 0x000C(r4)          load CT
0x00181A4C: lbu r3, 0x0005(r4)          load flags 3
0x00181A50: andi r16, r2, 0x007F        r16 = CT
0x00181A54: srl r4, r3, 0x07
0x00181A58: andi r2, r3, 0x0020         affected by silence
0x00181A5C: srl r2, r2, 0x04
0x00181A60: andi r3, r3, 0x0004         persevere
0x00181A64: bne r3, r0, 0x00181A94      branch if persevere true
0x00181A68: or r18, r4, r2              r18 = silence and persevere checks
0x00181A6C: lw r9, 0x00F0(r29)
0x00181A70: ori r2, r0, 0x0001
0x00181A74: bne r9, r2, 0x00181A80      short charge check
0x00181A78: addiu r2, r16, 0x0001
0x00181A7C: sra r16, r2, 0x01           (CT+1) / 2
0x00181A80: lw r8, 0x00F0(r29)
0x00181A84: ori r2, r0, 0x0002
0x00181A88: bne r8, r2, 0x00181A98      non-charge check
0x00181A8C: addu r5, r16, r0            store (CT + 1)/2
0x00181A90: addu r16, r0, r0
0x00181A94: addu r5, r16, r0            store 0 CT
0x00181A98: lw r4, 0x00B0(r29)          load Unit ID
0x00181A9C: jal 0x00181720              ability loading?
0x00181AA0: addiu r6, r29, 0x0010
0x00181AA4: sb r17, 0x0000(r20)         store MP cost ??? stack
0x00181AA8: sb r16, 0x0000(r21)         store CT      0x60 stack
0x00181AAC: j 0x00181AF0
0x00181AB0: sb r18, 0x0000(r22)         store silence/persevere checks? 0x18 stack
0x00181AB4: addiu r2, r4, 0xFE6A
0x00181AB8: andi r2, r2, 0xFFFF
0x00181ABC: sltiu r2, r2, 0x0008
0x00181AC0: beq r2, r0, 0x00181AF4      branch if not charge ability
0x00181AC4: sll r2, r3, 0x01
0x00181AC8: addiu r6, r29, 0x0010
0x00181ACC: lui r1, 0x8006
0x00181AD0: addu r1, r1, r2
0x00181AD4: lbu r16, 0x0D18(r1)         load CT?
0x00181AD8: lw r4, 0x00B0(r29)          unit id
0x00181ADC: jal 0x00181720
0x00181AE0: addu r5, r16, r0
0x00181AE4: sb r0, 0x0000(r20)          store 0 for mp cost    ??? stack
0x00181AE8: sb r16, 0x0000(r21)         store CT               0x60 stack
0x00181AEC: sb r0, 0x0000(r22)          store 0 for silence/persevere checks    0x18
0x00181AF0: sb r2, 0x0000(r23)          store Turns            0x90 stack
0x00181AF4: addiu r23, r23, 0x0001
0x00181AF8: addiu r22, r22, 0x0001
0x00181AFC: addiu r21, r21, 0x0001
0x00181B00: addiu r20, r20, 0x0001
0x00181B04: lhu r8, 0x00D8(r29)         load ability ID
0x00181B08: lw r9, 0x00C0(r29)          load pointer address 0x20
0x00181B0C: addiu r30, r30, 0x0001
0x00181B10: sh r8, 0x0000(r9)           store ability ID
0x00181B14: addiu r9, r9, 0x0002
0x00181B18: sw r9, 0x00C0(r29)          store new stack pointer?
0x00181B1C: addiu r19, r19, 0x0001
0x00181B20: slti r2, r19, 0x0010        run 15 times - for each ability?
0x00181B24: bne r2, r0, 0x0018197C
0x00181B28: lui r2, 0x0080
0x00181B2C: lw r9, 0x00C0(r29)          0x20 address
0x00181B30: addiu r2, r0, 0xFFFF        store end of list
0x00181B34: sh r2, 0x0000(r9)           store ??
0x00181B38: addu r2, r30, r0            return number of abilities?
0x00181B3C: lw r31, 0x012C(r29)
0x00181B40: lw r30, 0x0128(r29)
0x00181B44: lw r23, 0x0124(r29)
0x00181B48: lw r22, 0x0120(r29)
0x00181B4C: lw r21, 0x011C(r29)
0x00181B50: lw r20, 0x0118(r29)
0x00181B54: lw r19, 0x0114(r29)
0x00181B58: lw r18, 0x0110(r29)
0x00181B5C: lw r17, 0x010C(r29)
0x00181B60: lw r16, 0x0108(r29)
0x00181B64: addiu r29, r29, 0x0130
0x00181B68: jr r31
0x00181B6C: nop