Main Skillset/ability loading

From Final Fantasy Hacktics Wiki
Revision as of 04:30, 25 December 2024 by Nyzer (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Runs when a skillset is selected

BATTLE.BIN - Main Skillset/ability loading
---------------------------------------------------------------------------------------
Parameter : r4 = 0x02 - 1st Menu (All Action menus and Math 1st set of skills)
                 0x01 - 2nd Menu for Math skills
                 0x00 - Last Menu for math skill (spell list)

Returns : Nothing

This Routine will : Initialize Lists of Ability data used in menu
                    Fill The lists (via other routines)
                    Set Menu Size and Headers
                    Set Blinking red/grey abilities
---------------------------------------------------------------------------------------
0013fa6c: 3c028017 lui r2,0x8017            |
0013fa70: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List
0013fa74: 27bdffa8 addiu r29,r29,-0x0058    |
0013fa78: afb20040 sw r18,0x0040(r29)       |
0013fa7c: 3c128015 lui r18,0x8015           |
0013fa80: 8652d08a lh r18,-0x2f76(r18)      |load attacker battle ID 8014d084 - Selected Unit ID
0013fa84: afb5004c sw r21,0x004c(r29)       |
0013fa88: afbf0054 sw r31,0x0054(r29)       |
0013fa8c: afb60050 sw r22,0x0050(r29)       |
0013fa90: afb40048 sw r20,0x0048(r29)       |
0013fa94: afb30044 sw r19,0x0044(r29)       |
0013fa98: afb1003c sw r17,0x003c(r29)       |
0013fa9c: afb00038 sw r16,0x0038(r29)       |
0013faa0: 244300a4 addiu r3,r2,0x00a4       |Pointer to output list "Stock" "Mp" 
0013faa4: 3c018016 lui r1,0x8016            |
0013faa8: ac2269a4 sw r2,0x69a4(r1)         |store skillset ability list pointer
0013faac: 24420148 addiu r2,r2,0x0148       |Pointer to output list "Turns" 
0013fab0: 3c018016 lui r1,0x8016            |
0013fab4: ac2369a8 sw r3,0x69a8(r1)         |store skillset ability list + 0xa4 for MP cost
0013fab8: 3c018016 lui r1,0x8016            |
0013fabc: ac2269ac sw r2,0x69ac(r1)         |Store skillset ability list + 0x0148 for #turns
0013fac0: 0c04b7d0 jal 0x0012df40           |-->0012df40_-_0012df64 Returns Selected unit battle pointer
0013fac4: 0080a821 addu r21,r4,r0           |r21 = PV (number of times gone through menus?)
0013fac8: 0040b021 addu r22,r2,r0           |Pointer to Unit Battle stats
0013facc: 00002821 addu r5,r0,r0            |Initialize counter
0013fad0: 3409ffff ori r9,r0,0xffff         |
0013fad4: 3c028017 lui r2,0x8017            |
0013fad8: 8c423cb8 lw r2,0x3cb8(r2)         |Pointer to menu data 0x80166b10
0013fadc: 340800ff ori r8,r0,0x00ff         |
0013fae0: 84420128 lh r2,0x0128(r2)         |Used Skillset (1 for Primary 2 For Secondary)
0013fae4: 34070001 ori r7,r0,0x0001         |
0013fae8: 3c018017 lui r1,0x8017            |
0013faec: 00220821 addu r1,r1,r2            |
0013faf0: 9031404c lbu r17,0x404c(r1)       |Load action menu ID  (based on used skillset)
0013faf4: 3c018017 lui r1,0x8017            |
0013faf8: 00220821 addu r1,r1,r2            |
0013fafc: 90304060 lbu r16,0x4060(r1)       |Load displayed skillset ID  (based on used skillset)
0013fb00: 3c068015 lui r6,0x8015            |
0013fb04: 24c6d264 addiu r6,r6,-0x2d9c      |8014d264
0013fb08: 3c018017 lui r1,0x8017            |
0013fb0c: a030982d sb r16,-0x67d3(r1)       |store skillset at 0x8016982d
                                            @LOOP - Initialize Abillity lists
0013fb10: 3c038017 lui r3,0x8017                |
0013fb14: 8c634048 lw r3,0x4048(r3)             |Pointer to Ability List
0013fb18: 00052040 sll r4,r5,0x01               |counter * 2
0013fb1c: 00831021 addu r2,r4,r3                |Dynamic Pointer to Ability List (Halfword offset)
0013fb20: 00651821 addu r3,r3,r5                |Dynamic Pointer to Ability List (Byte offset)
0013fb24: a4490000 sh r9,0x0000(r2)             |Initialize Ability ID List (0xffff from 0x00 to 0x100)
0013fb28: a06801ec sb r8,0x01ec(r3)             |Initialize MP cost, Consumed Item ID  with 0xff (0x1ec - 0x26c) 
0013fb2c: 3c028017 lui r2,0x8017                |
0013fb30: 8c424048 lw r2,0x4048(r2)             |Pointer to Ability List
0013fb34: 00000000 nop                          |
0013fb38: 00451021 addu r2,r2,r5                |Dynamic Pointer to Ability List (Byte offset)
0013fb3c: a047023e sb r7,0x023e(r2)             |Intialize CT list with 0x01 in ability CT  (0x23e - 0x2be, there is a lot of overlap with some of these.)
0013fb40: 3c028017 lui r2,0x8017                |
0013fb44: 8c424048 lw r2,0x4048(r2)             |Pointer to Ability List
0013fb48: 00000000 nop                          |
0013fb4c: 00822021 addu r4,r4,r2                |Dynamic Pointer to Ability List (Halfword offset)
0013fb50: 00451021 addu r2,r2,r5                |
0013fb54: a48000a4 sh r0,0x00a4(r4)             |clear "stock" "mp" (0xa4 - 0x1a4 Stock/MP)
0013fb58: a4890148 sh r9,0x0148(r4)             |store 0xffff (0x148 - 0x248)
0013fb5c: a0400290 sb r0,0x0290(r2)             |store 0x00 for silence/performance/reflect (0x290 - 0x310)
0013fb60: 3c028017 lui r2,0x8017                |
0013fb64: 8c424048 lw r2,0x4048(r2)             |Pointer to Ability List
0013fb68: 00000000 nop                          |
0013fb6c: 00451021 addu r2,r2,r5                |Dynamic Pointer to Ability List (Byte offset)
0013fb70: a04702e2 sb r7,0x02e2(r2)             |store 0x1 in # turns to complete (0x2e2 - 0x362)
0013fb74: 3c028017 lui r2,0x8017                |
0013fb78: 8c424048 lw r2,0x4048(r2)             |Pointer to Ability List ...and again
0013fb7c: 00000000 nop                          |
0013fb80: 00451021 addu r2,r2,r5                |Dynamic Pointer to Ability List (Byte offset)
0013fb84: a0480334 sb r8,0x0334(r2)             |store CT list = 0xFF
0013fb88: a4c00000 sh r0,0x0000(r6)             |store normal for ability display (0x8014d264 - 0x8014d300), no Unit ID (0x8014d304), and others From 0x8014d264 to 0x8014d364
0013fb8c: 24a50001 addiu r5,r5,0x0001           |Counter + 1
0013fb90: 28a20050 slti r2,r5,0x0050            |Check limit
0013fb94: 1440ffde bne r2,r0,0x0013fb10     Λ Loop 80 times
0013fb98: 24c60002 addiu r6,r6,0x0002           |Dynamic pointer to Ability display + 2
                                            Set end of lists
0013fb9c: 3c028017 lui r2,0x8017            |
0013fba0: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List
0013fba4: 340300ff ori r3,r0,0x00ff         |
0013fba8: a043023c sb r3,0x023c(r2)         |End MP/Stock List  it is already 0xff…
0013fbac: 3c028017 lui r2,0x8017            |
0013fbb0: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List
0013fbb4: 00000000 nop                      |
0013fbb8: a043028e sb r3,0x028e(r2)         |End CT List  it is already 0xff…
0013fbbc: 3c028017 lui r2,0x8017            |
0013fbc0: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List
0013fbc4: 00000000 nop                      |
0013fbc8: a04302e0 sb r3,0x02e0(r2)         |End Silence Reflect Perform list
0013fbcc: 3c028017 lui r2,0x8017            |
0013fbd0: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List
0013fbd4: 00000000 nop                      |
0013fbd8: a0430332 sb r3,0x0332(r2)         |End Turn list
0013fbdc: 3c028017 lui r2,0x8017            |
0013fbe0: 8c424048 lw r2,0x4048(r2)         |Pointer to Ability List

**Section 1 - Load ability-relevant data**
                                        ------- Action Menu 0x00 - Default -----------
0013fbe4: 16200014 bne r17,r0,0x0013fc38    #If Action Menu = 0x00
0013fbe8: a0430384 sb r3,0x0384(r2)             |
0013fbec: 02402021 addu r4,r18,r0               |r4 = attacker ID
0013fbf0: 3c068017 lui r6,0x8017                |
0013fbf4: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fbf8: 02002821 addu r5,r16,r0               |r5 = skillset ID
0013fbfc: afa00014 sw r0,0x0014(r29)            |
0013fc00: 24c701ec addiu r7,r6,0x01ec           |Pointer to MP Cost/ Stock List
0013fc04: 24c2023e addiu r2,r6,0x023e           |Pointer to Ability CT
0013fc08: afa20010 sw r2,0x0010(r29)            |Send Ability CT pointer through stack
0013fc0c: 24c20290 addiu r2,r6,0x0290           | Pointer to Silence/persevere/Reflect
0013fc10: afa20018 sw r2,0x0018(r29)            |Send silence/performance/reflect pointer  through stack
0013fc14: 24c202e2 addiu r2,r6,0x02e2           | Pointer to Nb of Turns List
0013fc18: 0c0605f0 jal 0x001817c0               |-->Load_ability_data_for_skillset Fill List and returns Nb of usable Abilities (known - sword - materia - frog)
0013fc1c: afa2001c sw r2,0x001c(r29)            |Send Nb of Turns pointer through stack
0013fc20: 3c058017 lui r5,0x8017                |
0013fc24: 8ca54048 lw r5,0x4048(r5)             |Pointer to Ability List
0013fc28: 34060050 ori r6,r0,0x0050             |Size of data to transfer 0x50
0013fc2c: 24a40334 addiu r4,r5,0x0334           | Pointer to Ability CT
0013fc30: 0c052fd5 jal 0x0014bf54               |-->Copy 0x50 Bytes from r5 to r4
0013fc34: 24a5023e addiu r5,r5,0x023e           |Pointer to Ability CT

                                        ------- Action Menu 0x01 - Item inventory -----------
0013fc38: 34140001 ori r20,r0,0x0001        |
0013fc3c: 16340007 bne r17,r20,0x0013fc5c   #If Action Menu = 0x01
0013fc40: 34130002 ori r19,r0,0x0002            |
0013fc44: 02402021 addu r4,r18,r0               |r4 = unit ID
0013fc48: 3c068017 lui r6,0x8017                |
0013fc4c: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fc50: 02002821 addu r5,r16,r0               |
0013fc54: 0c0606dc jal 0x00181b70               |-->Item_Ability_Loading
0013fc58: 24c601ec addiu r6,r6,0x01ec           |Item Used List per Ability ID (don't parse other arguments through stack)

                                        ------- Action Menu0x02 - Weapon inventory -----------
0013fc5c: 16330008 bne r17,r19,0x0013fc80   #If Action Menu = 0x02
0013fc60: 34020003 ori r2,r0,0x0003             |
0013fc64: 02402021 addu r4,r18,r0               |r4 = unit ID
0013fc68: 3c068017 lui r6,0x8017                |
0013fc6c: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fc70: 02002821 addu r5,r16,r0               |skillset
0013fc74: 0c06072e jal 0x00181cb8               |-->Throw Ability & Item Loading
0013fc78: 24c601ec addiu r6,r6,0x01ec           |Item Used list per Item ID
0013fc7c: 34020003 ori r2,r0,0x0003             |math skill check

                                        ------- Action Menu 0x03 - Mathematics  -----------
0013fc80: 16220014 bne r17,r2,0x0013fcd4    #If Action Menu = 0x03
0013fc84: 00000000 nop                          |
0013fc88: 16b30005 bne r21,r19,0x0013fca0       #If PV = 0x02 : Load 1st set of Math abilities
0013fc8c: 02402021 addu r4,r18,r0                   |r4 = attacker ID
0013fc90: 3c068017 lui r6,0x8017                    |
0013fc94: 8cc64048 lw r6,0x4048(r6)                 |Pointer to Ability List
0013fc98: 0c0607bc jal 0x00181ef0                   |-->Math_Skill_Ability_Display Checks for primary menu
0013fc9c: 02002821 addu r5,r16,r0                   |r5 = skillset ID
0013fca0: 16b40005 bne r21,r20,0x0013fcb8       #if PV = 0x01 : Load 2nd set of Math abilities
0013fca4: 02402021 addu r4,r18,r0                   |r4 = attacker ID
0013fca8: 3c068017 lui r6,0x8017                    |
0013fcac: 8cc64048 lw r6,0x4048(r6)                 |Pointer to Ability List
0013fcb0: 0c0607c5 jal 0x00181f14                   |-->Math_Skill_Ability_Display Checks for secondary menu
0013fcb4: 02002821 addu r5,r16,r0                   |Skillset ID
0013fcb8: 16a00007 bne r21,r0,0x0013fcd8        #if PV = 0x00 : Load Math spell list
0013fcbc: 34020006 ori r2,r0,0x0006                 |
0013fcc0: 02402021 addu r4,r18,r0                   |r4 = attacker ID
0013fcc4: 3c068017 lui r6,0x8017                    |
0013fcc8: 8cc64048 lw r6,0x4048(r6)                 |Pointer to Ability List
0013fccc: 0c06081a jal 0x00182068                   |-->Math_Skill_ability_loading Loop through Valid skillset and seek known Spells
0013fcd0: 02002821 addu r5,r16,r0                   |Skillset ID

                                        ------- Action Menu 0x06 Monsters / Frog  -----------
0013fcd4: 34020006 ori r2,r0,0x0006         |
0013fcd8: 1622000a bne r17,r2,0x0013fd04    #If Action Menu = 0x06
0013fcdc: 34020007 ori r2,r0,0x0007             |
0013fce0: 02402021 addu r4,r18,r0               |Unit ID
0013fce4: 02002821 addu r5,r16,r0               |Skillset ID
0013fce8: 3c068017 lui r6,0x8017                |
0013fcec: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fcf0: 00003821 addu r7,r0,r0                |r7 = 0
0013fcf4: 24c20290 addiu r2,r6,0x0290           | Pointer to Silence/persevere/Reflect
0013fcf8: 0c0608b3 jal 0x001822cc               |-->Monster_skill,_frog_attack_ability_loading
0013fcfc: afa20010 sw r2,0x0010(r29)            |send silence/reflectable/performance pointer through stack
0013fd00: 34020007 ori r2,r0,0x0007             |

                                        ------- Action Menu 0x07 Katana Inventory -----------
0013fd04: 16220008 bne r17,r2,0x0013fd28    #If Action Menu = 0x07
0013fd08: 3402000a ori r2,r0,0x000a             |
0013fd0c: 02402021 addu r4,r18,r0               |Unit ID
0013fd10: 3c068017 lui r6,0x8017                |
0013fd14: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fd18: 02002821 addu r5,r16,r0               |Skillset ID
0013fd1c: 0c060999 jal 0x00182664               |-->Draw_Out
0013fd20: 24c601ec addiu r6,r6,0x01ec           |Pointer to MP Cost/ Stock List
0013fd24: 3402000a ori r2,r0,0x000a             |

                                        ------- Action Menu 0x0A - Aim -----------
0013fd28: 16220010 bne r17,r2,0x0013fd6c    #If Action Menu = 0x0A
0013fd2c: 34020003 ori r2,r0,0x0003             |
0013fd30: 02402021 addu r4,r18,r0               |Unit ID
0013fd34: 3c068017 lui r6,0x8017                |
0013fd38: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0013fd3c: 02002821 addu r5,r16,r0               |
0013fd40: 24c701ec addiu r7,r6,0x01ec           |Raw Ability CT Use MP list to store charge CT ?
0013fd44: 24c202e2 addiu r2,r6,0x02e2           |Turns
0013fd48: 0c0609ed jal 0x001827b4               |-->Charge_Skillset_Loading
0013fd4c: afa20010 sw r2,0x0010(r29)            # turns in stack + 0x10
0013fd50: 3c058017 lui r5,0x8017                |
0013fd54: 8ca54048 lw r5,0x4048(r5)             |Ability ID list
0013fd58: 34060050 ori r6,r0,0x0050             |r6 = 0x80
0013fd5c: 24a40334 addiu r4,r5,0x0334           |Ability CT?
0013fd60: 0c052fd5 jal 0x0014bf54               |-->Copy 0x50 Bytes from r5 to r4
0013fd64: 24a501ec addiu r5,r5,0x01ec           |Raw ability CT
0013fd68: 34020003 ori r2,r0,0x0003             |

**2nd Section -  Set Usabilities / Menu data **
                                        ------ POST ACTION MENU MAIN SECTION ----
0013fd6c: 12220002 beq r17,r2,0x0013fd78    #If Action Menu is not Mathematics
0013fd70: 341200ac ori r18,r0,0x00ac        |default r18 to 0xac (menu type flags?)
0013fd74: 0000a821 addu r21,r0,r0               |r21 = 0 if not math skill (Last Math skill menu has already r21 to 0x00)
0013fd78: 34020003 ori r2,r0,0x0003         |
0013fd7c: 3c018016 lui r1,0x8016            |
0013fd80: a42269a0 sh r2,0x69a0(r1)         |store stock/mp/turns display (initialised)
0013fd84: 3c018016 lui r1,0x8016            |
0013fd88: a42269a2 sh r2,0x69a2(r1)         |store stock/mp/turns display (initialised)
0013fd8c: 3402006a ori r2,r0,0x006a         |
0013fd90: 3c018016 lui r1,0x8016            |
0013fd94: a422699a sh r2,0x699a(r1)         |store MP display X offset
0013fd98: 3402007e ori r2,r0,0x007e         |
0013fd9c: 3c018016 lui r1,0x8016            |
0013fda0: a422699c sh r2,0x699c(r1)         |store turn display X offset
0013fda4: 00111080 sll r2,r17,0x02          |Action Menu ID*4
0013fda8: 3c018016 lui r1,0x8016            |
0013fdac: a420699e sh r0,0x699e(r1)         |store Ability name display
0013fdb0: 3c018017 lui r1,0x8017            |
0013fdb4: 00220821 addu r1,r1,r2            |
0013fdb8: 84239266 lh r3,-0x6d9a(r1)        |80169266 + Action menu byte*4 (if action menu calls inventory or not?)  * details in notes
0013fdbc: 34020001 ori r2,r0,0x0001         |
0013fdc0: 14620048 bne r3,r2,0x0013fee4     #If used Action Menu Call inventory (r3 = 0x01)
0013fdc4: 00003021 addu r6,r0,r0            |Defaut Menu dimension/Tags

                                            Item/Throw/Draw Out - Set usability based on item quantity
0013fdc8: 3c048017 lui r4,0x8017                |
0013fdcc: 8c844048 lw r4,0x4048(r4)             |load ability list address
0013fdd0: 0c04fe80 jal 0x0013fa00               |-->0013fa00_-_0013fa34
0013fdd4: 248501ec addiu r5,r4,0x01ec           |Item Used
0013fdd8: 00408021 addu r16,r2,r0               |r16 = # of abilities
0013fddc: 3c058017 lui r5,0x8017                |
0013fde0: 8ca54048 lw r5,0x4048(r5)             |load skillset data
0013fde4: 02003021 addu r6,r16,r0               # of abilities
0013fde8: 24a40148 addiu r4,r5,0x0148           |r4 = Turns
0013fdec: 0c04fe8e jal 0x0013fa38               |-->0013fa38_-_0013fa68 do for each r6, load from r5, store in r4 **Set Turns**
0013fdf0: 24a502e2 addiu r5,r5,0x02e2           |r5 = turns
0013fdf4: 00003021 addu r6,r0,r0                |
0013fdf8: 1a000019 blez r16,0x0013fe60          #branch if no abilities found
0013fdfc: 00002821 addu r5,r0,r0                    |
0013fe00: 34070004 ori r7,r0,0x0004                 |
0013fe04: 3c048015 lui r4,0x8015                    |
0013fe08: 2484d264 addiu r4,r4,0xd264               |load availability Data
0013fe0c: 3c038017 lui r3,0x8017                    |
0013fe10: 8c634048 lw r3,0x4048(r3)                 |load Ability ID list
                                                    @LOOP : Grey Out item abilities
0013fe14: 00000000 nop                                  |
0013fe18: 94620000 lhu r2,0x0000(r3)                    |load ability
0013fe1c: 3c018006 lui r1,0x8006                        |
0013fe20: 00220821 addu r1,r1,r2                        |
0013fe24: 902296e0 lbu r2,-0x6920(r1)                   |load item quantity
0013fe28: 00000000 nop                                  |
0013fe2c: a46200a4 sh r2,0x00a4(r3)                     |store item quantity
0013fe30: 946200a4 lhu r2,0x00a4(r3)                    |load item quantity
0013fe34: 00000000 nop                                  |
0013fe38: 14400003 bne r2,r0,0x0013fe48                 #If No items
0013fe3c: 00000000 nop                                      |
0013fe40: 0804ff93 j 0x0013fe4c                             |
0013fe44: a4870000 sh r7,0x0000(r4)                         |store grayed out ability
                                                        Else : if item quantity != 0
0013fe48: 34060001 ori r6,r0,0x0001                         |set ability usable?
0013fe4c: 24840002 addiu r4,r4,0x0002                   |count another availability if item is usable
0013fe50: 24a50001 addiu r5,r5,0x0001                   |counter + 1
0013fe54: 00b0102a slt r2,r5,r16                        |
0013fe58: 1440ffee bne r2,r0,0x0013fe14             Λ Loop - do for all Items in list
0013fe5c: 24630002 addiu r3,r3,0x0002                   |next ability ID
0013fe60: 10c00003 beq r6,r0,0x0013fe70         #branch if there is consumable items
0013fe64: 34070007 ori r7,r0,0x0007             |Control Value = 0x07
0013fe68: 0804ffa7 j 0x0013fe9c                     |
0013fe6c: 2652fffc addiu r18,r18,0xfffc             |if items are available, r18 = 0xa8
                                                Else : if no items with quantity > 0 found
0013fe70: 02003021 addu r6,r16,r0                   |
0013fe74: 34120094 ori r18,r0,0x0094                |if no items can be found, r18 = 0x94
0013fe78: 3c058017 lui r5,0x8017                    |
0013fe7c: 8ca54048 lw r5,0x4048(r5)                 |r5 = skillset abilities
0013fe80: 34020002 ori r2,r0,0x0002                 |
0013fe84: 3c018016 lui r1,0x8016                    |
0013fe88: a42269a2 sh r2,0x69a2(r1)                 |Remove "stock" display numbers
0013fe8c: 24a400a4 addiu r4,r5,0x00a4               |r4 = item quantities
0013fe90: 0c04fe8e jal 0x0013fa38                   |-->0013fa38_-_0013fa68
0013fe94: 24a502e2 addiu r5,r5,0x02e2               |r5 = 01 data
0013fe98: 34070008 ori r7,r0,0x0008                 |Control value = 0x08
0013fe9c: 34093800 ori r9,r0,0x3800             |Store Item display
0013fea0: 3c048016 lui r4,0x8016                |
0013fea4: 2484699a addiu r4,r4,0x699a           |8016699a
0013fea8: 94820000 lhu r2,0x0000(r4)            |load Stock numbers display location
0013feac: 3c038016 lui r3,0x8016                |
0013feb0: 9463699c lhu r3,0x699c(r3)            |load Turns display location
0013feb4: 2442fffc addiu r2,r2,0xfffc           |move left by 4
0013feb8: 2463fffc addiu r3,r3,0xfffc           |move left by 4
0013febc: a4820000 sh r2,0x0000(r4)             |store new location
0013fec0: 34020007 ori r2,r0,0x0007             |
0013fec4: 3c018016 lui r1,0x8016                |
0013fec8: a423699c sh r3,0x699c(r1)             |store new location
0013fecc: 1622005e bne r17,r2,0x00140048        #branch if not Draw out
0013fed0: 34060011 ori r6,r0,0x0011             |Item/Throw
0013fed4: 08050012 j 0x00140048                     >>Jump
0013fed8: 34060017 ori r6,r0,0x0017                 |Katana
                                                -- 2 shitty lines, reached by backward branching --
0013fedc: 0804ffd5 j 0x0013ff54                 >>Skip Next Section
0013fee0: 34060001 ori r6,r0,0x0001             |Dimension Tag if at least one Ability in list has a MP cost

                                            Not Item/throw/draw out 
0013fee4: 00008021 addu r16,r0,r0               |Initialize counter
0013fee8: 3404ffff ori r4,r0,0xffff             |
0013feec: 3c038017 lui r3,0x8017                |
0013fef0: 8c634048 lw r3,0x4048(r3)             |Pointer to Ability List
                                                @LOOP - Count listed Abilities
0013fef4: 00000000 nop                              |
0013fef8: 94620000 lhu r2,0x0000(r3)                |Ability ID
0013fefc: 00000000 nop                              |
0013ff00: 10440005 beq r2,r4,0x0013ff18             #if ID = 0xfff : Exit Loop (end of listed abilities)
0013ff04: 00000000 nop                              |
0013ff08: 26100001 addiu r16,r16,0x0001             |Counter + 1
0013ff0c: 2a020040 slti r2,r16,0x0040               |Check list limit
0013ff10: 1440fff8 bne r2,r0,0x0013fef4         Λ Loop until last Ability or end of list
0013ff14: 24630002 addiu r3,r3,0x0002               |Dynamic list pointer (halfword offset)

                                                Defaut Action Menu (0x00)
0013ff18: 1620000f bne r17,r0,0x0013ff58        #if Used Action Menu = Default
0013ff1c: 34020003 ori r2,r0,0x0003                 |
0013ff20: 1a00000d blez r16,0x0013ff58              #If There is no Ability in List : Branch to  Next Section
0013ff24: 00002821 addu r5,r0,r0                    |Initialize counter
0013ff28: 3c038017 lui r3,0x8017                        |
0013ff2c: 8c634048 lw r3,0x4048(r3)                 |Pointer to Ability List
0013ff30: 00000000 nop                              |
0013ff34: 00651021 addu r2,r3,r5                    |Dynamic Pointer to Ability List (Byte offset)
                                                    @Loop - MP Cost
0013ff38: 904201ec lbu r2,0x01ec(r2)                    |load MP cost
0013ff3c: 00000000 nop                                  |
0013ff40: 1440ffe6 bne r2,r0,0x0013fedc                 #Branch back if ability has MP cost (set custom menu dimensions/tags) and exit loop Seriously ?
0013ff44: 24a50001 addiu r5,r5,0x0001                   |counter++
0013ff48: 00b0102a slt r2,r5,r16                        |set if yet to search all abilities
0013ff4c: 1440fffa bne r2,r0,0x0013ff38             Λ Loop (all listed abilities)
0013ff50: 00651021 addu r2,r3,r5                        |Dynamic Pointer to Ability List (Byte offset)
0013ff54: 34020003 ori r2,r0,0x0003                     |

                                                Mathematics Action Menu (0x03)
0013ff58: 1622000a bne r17,r2,0x0013ff84        #If Action Menu is Mathematics
0013ff5c: 00000000 nop                              |
0013ff60: 1aa00008 blez r21,0x0013ff84              #If Not Loading Spell list (Preset value <> 0x00) :  Skip Section
0013ff64: 34020002 ori r2,r0,0x0002                     |
0013ff68: 34120088 ori r18,r0,0x0088                    |if math skill, r18 = 0x88
0013ff6c: 3c018016 lui r1,0x8016                        |
0013ff70: a42269a0 sh r2,0x69a0(r1)                     |store 0x0002
0013ff74: 3c018016 lui r1,0x8016                        |
0013ff78: a42269a2 sh r2,0x69a2(r1)                     |store 0x0002
0013ff7c: 08050010 j 0x00140040                         |
0013ff80: 34070009 ori r7,r0,0x0009                     |jump down, Set control value = 0x09

                                                Not Mathematics (Item - Throw - Draw Out - Default)
0013ff84: 10c00019 beq r6,r0,0x0013ffec         #If Ability Has a MP cost
0013ff88: 00000000 nop                              |
0013ff8c: 16200018 bne r17,r0,0x0013fff0            #If Not Defaut Action Menu :  Skip Section
0013ff90: 02003021 addu r6,r16,r0                   |For Each Ability
0013ff94: 3c058017 lui r5,0x8017                    |
0013ff98: 8ca54048 lw r5,0x4048(r5)                 |Pointer to Ability List
0013ff9c: 2652fff8 addiu r18,r18,-0x0008            |if default menu, r18 = 0xa4 (menu width includes MP)
0013ffa0: 24a400a4 addiu r4,r5,0x00a4               |Pointer MP List
0013ffa4: 0c04fe80 jal 0x0013fa00                   |-->Set MP Values Copy data from r5 (byte) to r4(halfwords)
0013ffa8: 24a501ec addiu r5,r5,0x01ec               |Pointer MP List
0013ffac: 3c058017 lui r5,0x8017                    |
0013ffb0: 8ca54048 lw r5,0x4048(r5)                 |Pointer to Ability List
0013ffb4: 02003021 addu r6,r16,r0                   |For Each Ability
0013ffb8: 24a40148 addiu r4,r5,0x0148               |Pointer Turn List
0013ffbc: 0c04fe8e jal 0x0013fa38                   |-->Transfer Turns Copy data from r5 (byte) to r4(halfwords)
0013ffc0: 24a502e2 addiu r5,r5,0x02e2               |Pointer Turn List
0013ffc4: 34070006 ori r7,r0,0x0006                 |menu header type = "Ability"     "Ref" "MP" "Turns"
0013ffc8: 3c048016 lui r4,0x8016                    |
0013ffcc: 2484699a addiu r4,r4,0x699a               |8016699a
0013ffd0: 94820000 lhu r2,0x0000(r4)                |load "MP" header display location
0013ffd4: 3c038016 lui r3,0x8016                    |
0013ffd8: 9463699c lhu r3,0x699c(r3)                |load "turns" header display
0013ffdc: 2442fff8 addiu r2,r2,0xfff8               |r2 -= 0x08
0013ffe0: 2463fff8 addiu r3,r3,0xfff8               |r3 -= 0x08
0013ffe4: 0805000e j 0x00140038                     |
0013ffe8: a4820000 sh r2,0x0000(r4)                 |store new "MP" header display location
                                                Else : Ability Without MP Cost (Or not default action menu)
0013ffec: 02003021 addu r6,r16,r0                   |
0013fff0: 3c058017 lui r5,0x8017                    |
0013fff4: 8ca54048 lw r5,0x4048(r5)                 |
0013fff8: 34120094 ori r18,r0,0x0094                |if menu cannot not use items, is not default, or isn't math, r18 = 0x94
0013fffc: 24a400a4 addiu r4,r5,0x00a4               |Pointer MP/Stock List
00140000: 0c04fe8e jal 0x0013fa38                   |-->Transfer Turns Copy data from r5 (byte) to r4(halfwords)
00140004: 24a502e2 addiu r5,r5,0x02e2               |Pointer MP/Stock List
00140008: 34070005 ori r7,r0,0x0005                 |
0014000c: 34020002 ori r2,r0,0x0002                 |
00140010: 3c018016 lui r1,0x8016                    |
00140014: a42269a2 sh r2,0x69a2(r1)                 |store no stock/mp display?
00140018: 3c028016 lui r2,0x8016                    |
0014001c: 9442699a lhu r2,0x699a(r2)                |load mp/stock display location
00140020: 3c038016 lui r3,0x8016                    |
00140024: 9463699c lhu r3,0x699c(r3)                |turns display location
00140028: 2442fffc addiu r2,r2,0xfffc               |
0014002c: 2463fffc addiu r3,r3,0xfffc               |move to the left by 4
00140030: 3c018016 lui r1,0x8016                    |
00140034: a422699a sh r2,0x699a(r1)                 |store new
00140038: 3c018016 lui r1,0x8016                |
0014003c: a423699c sh r3,0x699c(r1)             |store new display location
00140040: 34097000 ori r9,r0,0x7000         |Default Ability Type
00140044: 34060005 ori r6,r0,0x0005         |
00140048: 3c028017 lui r2,0x8017            |
0014004c: 8c423cb8 lw r2,0x3cb8(r2)         |80166b10 - Menu Data
00140050: 00002821 addu r5,r0,r0            |
00140054: a45200b8 sh r18,0x00b8(r2)        |store menu type? 3 times. 0x94 means no abilities available?
00140058: a45200c0 sh r18,0x00c0(r2)        |
0014005c: a45200c8 sh r18,0x00c8(r2)        |
00140060: a44700e0 sh r7,0x00e0(r2)         |store menu headers set
00140064: 1a000031 blez r16,0x0014012c      #If There is abilities in the list
00140068: a44600ee sh r6,0x00ee(r2)         |store skillset type?
0014006c: 34080008 ori r8,r0,0x0008             |blinking red
00140070: 340a0006 ori r10,r0,0x0006            |
00140074: 3c068017 lui r6,0x8017                |
00140078: 8cc64048 lw r6,0x4048(r6)             |Pointer to Ability List
0014007c: 3c078015 lui r7,0x8015                |
00140080: 24e7d264 addiu r7,r7,0xd264           |Pointer to Ability Display
00140084: 00c02021 addu r4,r6,r0                |Pointer to Ability List
                                                @Loop - Set usability for default abilities based on MP
00140088: 94c20000 lhu r2,0x0000(r6)                |load ability ID
0014008c: 00000000 nop                              |
00140090: 00491025 or r2,r2,r9                      |Add ability type flags (r9 is 0x7000)
00140094: 1620000e bne r17,r0,0x001400d0            #If Action Menu ID is Default (0x00)
00140098: a4c20000 sh r2,0x0000(r6)                 |store ability with type flags
0014009c: 96c2002c lhu r2,0x002c(r22)                   |load Unit MP
001400a0: 908301ec lbu r3,0x01ec(r4)                    |load MP cost
001400a4: 00000000 nop                                  |
001400a8: 00431023 subu r2,r2,r3                        |MP - MP cost
001400ac: 04410006 bgez r2,0x001400c8                   #If unit has not enough MP
001400b0: 00000000 nop                                      |
001400b4: 90820334 lbu r2,0x0334(r4)                        |Load CT
001400b8: 00000000 nop                                      |
001400bc: 10400002 beq r2,r0,0x001400c8                     #If There is a CT
001400c0: 00000000 nop                                          |
001400c4: a4e80000 sh r8,0x0000(r7)                             |Set ability blinking red
001400c8: 12200003 beq r17,r0,0x001400d8                #Avoid Monster check and go to monster-default section could just be a jump…
001400cc: 00000000 nop                                      |
001400d0: 162a0010 bne r17,r10,0x00140114           #If Action Menu is Monster (0x06)   (Or Default)
001400d4: 00000000 nop                                  |
001400d8: 90820290 lbu r2,0x0290(r4)                    |load silence/persevere/reflect flags
001400dc: 00000000 nop                                  |
001400e0: 30420002 andi r2,r2,0x0002                    |
001400e4: 1040000b beq r2,r0,0x00140114                 #If Affected by silance
001400e8: 00000000 nop                                      |
001400ec: 90820334 lbu r2,0x0334(r4)                        |Load CT
001400f0: 00000000 nop                                      |
001400f4: 10400007 beq r2,r0,0x00140114                     #If no CT : Avoid blinking red
001400f8: 00000000 nop                                          |
001400fc: 92c20059 lbu r2,0x0059(r22)                       |Load current status 2
00140100: 00000000 nop                                      |
00140104: 30420008 andi r2,r2,0x0008                        |
00140108: 10400002 beq r2,r0,0x00140114                     #If Unit has Silence
0014010c: 00000000 nop                                          |
00140110: a4e80000 sh r8,0x0000(r7)                             |set skill blinking red (0x08)
00140114: 24e70002 addiu r7,r7,0x0002               |Dynamic Pointer to Ability display (Halfword offset)
00140118: 24840001 addiu r4,r4,0x0001               |Dynamic Pointer to Ability List (Byte offset)
0014011c: 24a50001 addiu r5,r5,0x0001               |Loop counter + 1
00140120: 00b0102a slt r2,r5,r16                    |
00140124: 1440ffd8 bne r2,r0,0x00140088         Λ do for all abilities
00140128: 24c60002 addiu r6,r6,0x0002               |Dynamic Pointer to Ability List (Halfword offset)
0014012c: 1600000e bne r16,r0,0x00140168    #If There is no Ability in list
00140130: 34037000 ori r3,r0,0x7000             |
00140134: 3c028017 lui r2,0x8017                |
00140138: 8c423cb8 lw r2,0x3cb8(r2)             |load menu data
0014013c: 34100001 ori r16,r0,0x0001            |
00140140: a44000e0 sh r0,0x00e0(r2)             |store no menu type
00140144: 3c028017 lui r2,0x8017                |
00140148: 8c424048 lw r2,0x4048(r2)             |Pointer to Ability List
0014014c: 00000000 nop                          |
00140150: a4430000 sh r3,0x0000(r2)             |store not-usable
00140154: a44000a4 sh r0,0x00a4(r2)             |
00140158: a4400148 sh r0,0x0148(r2)             |
0014015c: 34020004 ori r2,r0,0x0004             |
00140160: 3c018015 lui r1,0x8015                |
00140164: a422d264 sh r2,-0x2d9c(r1)            |store greyed out skillset?
00140168: 3c048017 lui r4,0x8017                |
0014016c: 8c843cb8 lw r4,0x3cb8(r4)         |load menu data
00140170: 34020030 ori r2,r0,0x0030         |
00140174: a48200be sh r2,0x00be(r4)         |store 0xbe byte
00140178: 2a020007 slti r2,r16,0x0007       |
0014017c: 14400009 bne r2,r0,0x001401a4     #If Nb of Abilities in List > 0x06
00140180: 34020006 ori r2,r0,0x0006             |
00140184: 2602fffa addiu r2,r16,-0x0006         |abilities - 6
00140188: 3c018016 lui r1,0x8016                |
0014018c: a4226996 sh r2,0x6996(r1)             |store number of scrollable slots
00140190: 34020006 ori r2,r0,0x0006             |
00140194: 3c018016 lui r1,0x8016                |
00140198: a4226994 sh r2,0x6994(r1)             |store 6 number of displayed slots
0014019c: 08050072 j 0x001401c8                 |
001401a0: 00000000 nop                          |
                                            Else Nb Of Abilities < 0x06
001401a4: 00501023 subu r2,r2,r16               |
001401a8: 3c018016 lui r1,0x8016                |
001401ac: a4206996 sh r0,0x6996(r1)             |store number of scrollable slots
001401b0: 3c018016 lui r1,0x8016                |
001401b4: a4306994 sh r16,0x6994(r1)            |store number of abilities
001401b8: 948300be lhu r3,0x00be(r4)            |
001401bc: 000210c0 sll r2,r2,0x03               |
001401c0: 00621821 addu r3,r3,r2                |
001401c4: a48300be sh r3,0x00be(r4)             |
001401c8: 3c028017 lui r2,0x8017                |
001401cc: 8c424038 lw r2,0x4038(r2)         |load block # Currently running thread
001401d0: 34030001 ori r3,r0,0x0001         |
001401d4: 00021280 sll r2,r2,0x0a           |
001401d8: 3c018017 lui r1,0x8017            |
001401dc: 00220821 addu r1,r1,r2            |
001401e0: ac239870 sw r3,-0x6790(r1)        |169870
001401e4: 3c018017 lui r1,0x8017            |
001401e8: 00220821 addu r1,r1,r2            |
001401ec: ac209874 sw r0,-0x678c(r1)        |169874
001401f0: 3c018017 lui r1,0x8017            |
001401f4: 00220821 addu r1,r1,r2            |
001401f8: ac239878 sw r3,-0x6788(r1)        |169878
001401fc: 8fbf0054 lw r31,0x0054(r29)       END
00140200: 8fb60050 lw r22,0x0050(r29)
00140204: 8fb5004c lw r21,0x004c(r29)
00140208: 8fb40048 lw r20,0x0048(r29)
0014020c: 8fb30044 lw r19,0x0044(r29)
00140210: 8fb20040 lw r18,0x0040(r29)
00140214: 8fb1003c lw r17,0x003c(r29)
00140218: 8fb00038 lw r16,0x0038(r29)
0014021c: 27bd0058 addiu r29,r29,0x0058
00140220: 03e00008 jr r31
00140224: 00000000 nop

Notes

Data at 0x80169266 : 2 halfwords per action menu ID
This routine only uses 0x00

0x80169266               0x00    0x02
-------------------------------------
0x00     Default         0000    0003
0x04     Item Inventory  0001    0003
0x08     Throw           0001    0003
0x12     Math Skill      0000    fffd
0x16     Elemental       0000    fffd
0x20     Blank           0000    0003
0x24     Monster         0000    0003
0x28     Katana          0001    fffd
0x32     Attack          0000    fffd
0x36     Jump            0000    fffd
0x40     Charge          0000    fffd
0x44     Defend          0000    0505
0x48     Equip Change    0605    0524
0x52     Unknown         0505    0505
0x56     Blank           0505    0505
0x60     Unknown         1010    0010

Return location

Battle.bin
0014cf18: Call_Inner_Subroutine  (via jalr)