Difference between revisions of "Load ability data for skillset"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
Line 95: Line 95:
 
  0x00181930: j 0x00181940
 
  0x00181930: j 0x00181940
 
  0x00181934: addiu r2, r0, 0xFFFF
 
  0x00181934: addiu r2, r0, 0xFFFF
 +
 
  0x00181938: addiu r5, r0, 0xFFFF
 
  0x00181938: addiu r5, r0, 0xFFFF
 
  0x0018193C: addiu r2, r0, 0xFFFF
 
  0x0018193C: addiu r2, r0, 0xFFFF
 
  0x00181940: bne r5, r2, 0x00181954      branch if skillset - 5 is not 0xff
 
  0x00181940: bne r5, r2, 0x00181954      branch if skillset - 5 is not 0xff
 
  0x00181944: lui r8, 0x00FF
 
  0x00181944: lui r8, 0x00FF
 +
 
  store known abilities = all
 
  store known abilities = all
 
  0x00181948: ori r8, r8, 0xFFFF
 
  0x00181948: ori r8, r8, 0xFFFF
Line 107: Line 109:
 
  0x00181958: addu r4, r16, r0
 
  0x00181958: addu r4, r16, r0
 
  0x0018195C: sw r2, 0x00D0(r29)          store known abilities (fffec0)
 
  0x0018195C: sw r2, 0x00D0(r29)          store known abilities (fffec0)
 +
 +
skip here if defaulting to all abilities known
 
  0x00181960: addu r19, r0, r0
 
  0x00181960: addu r19, r0, r0
 
  0x00181964: addu r23, r30, r17          0x90 stack address(item)
 
  0x00181964: addu r23, r30, r17          0x90 stack address(item)

Revision as of 00:22, 3 October 2019

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              Get unit data pointer? (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)
skip here if defaulting to all abilities known 
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              Ability Loading?
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