Difference between revisions of "Steal/Break/Might Sword Hard Coding"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with " Steal/Break/Might Sword Hard Coding 001879c8: 3c038019 lui r3,0x8019 001879cc: 8c632d90 lw r3,0x2d90(r3) Current Action Data Pointer 001879d0: 340200fe ori r2,r0,0x00...")
 
m
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Steal/Break/Might Sword Hard Coding
+
-- Steal/Break/Might Sword Hard Coded routine --
  001879c8: 3c038019 lui r3,0x8019
+
  No Parameters
  001879cc: 8c632d90 lw r3,0x2d90(r3) Current Action Data Pointer
+
   
  001879d0: 340200fe ori r2,r0,0x00fe
+
  Returns r2 = 0x00 if Item is broken/Stolen / Else -0x01 (no Item, Monster, wrong Ability)
  001879d4: a0620019 sb r2,0x0019(r3) Store as 0x00FE
+
  001879d8: 3c048019 lui r4,0x8019
+
  Choose the item to break/steal from the ability ID ([[#Hard coded mechanics|<span style="color:blue">Hard coded</span>]])
  001879dc: 8c842d98 lw r4,0x2d98(r4) Load Defender's Stats
+
    - Set Target current Action Remove item flag (TCA 0x19)
  001879e0: 00000000 nop
+
    - Store item to remove ID in TCA 0x03
  001879e4: 90820006 lbu r2,0x0006(r4) Load Defender's Gender
+
  Note : if two weapons are equiped the better one will be broken (based on weapon enemy level)
  001879e8: 00000000 nop
+
--------------------------------------------------------------------------------------------------------------
  001879ec: 30420020 andi r2,r2,0x0020
+
001879c8: 3c038019 lui r3,0x8019           |
  001879f0: 144000a5 bne r2,r0,0x00187c88 Branch if Gender is a Monster
+
  001879cc: 8c632d90 lw r3,0x2d90(r3)        |{{f/adr|<nowiki>r3 = Target current action (TCA) data pointer</nowiki>}}
001879f4: 3402008a ori r2,r0,0x008a R2 = 8a
+
  001879d0: 340200fe ori r2,r0,0x00fe        |
  001879f8: 3c038019 lui r3,0x8019
+
  001879d4: a0620019 sb r2,0x0019(r3)        |{{f/store|Store 0xfe as remove equipment (everything removed ?)}}
  001879fc: 946338d6 lhu r3,0x38d6(r3) Load Used Ability ID
+
  001879d8: 3c048019 lui r4,0x8019            |
  00187a00: 00000000 nop
+
  001879dc: 8c842d98 lw r4,0x2d98(r4)        |{{f/adr|<nowiki>r4 = Target data location</nowiki>}}
00187a04: 10620005 beq r3,r2,0x00187a1c Branch if used ability is 'Head  Break'
+
001879e0: 00000000 nop                      |
  00187a08: 340200a1 ori r2,r0,0x00a1
+
  001879e4: 90820006 lbu r2,0x0006(r4)        |{{f/load|<nowiki>r2 = Target gender</nowiki>}}
  00187a0c: 10620003 beq r3,r2,0x00187a1c Branch if used ability is 'Blastar  Punch'
+
  001879e8: 00000000 nop                      |
  00187a10: 3402006e ori r2,r0,0x006e
+
  001879ec: 30420020 andi r2,r2,0x0020        |{{f/std|<nowiki>r2 = 0x20 if target is a monster, else 0x00</nowiki>}}
00187a14: 14620013 bne r3,r2,0x00187a64 Branch if used ability is not 'Steal Helmet'
+
  001879f0: 144000a5 bne r2,r0,0x00187c88    {{f/Cond| If target is not a monster }} /Else branch to near End (fail section)
  00187a18: 3402008b ori r2,r0,0x008b
+
  001879f4: 3402008a ori r2,r0,0x008a            |{{f/std|<nowiki>r2 = 0x8a (head break ID)</nowiki>}}
  00187a1c: 3c028019 lui r2,0x8019
+
  001879f8: 3c038019 lui r3,0x8019                |
  00187a20: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  001879fc: 946338d6 lhu r3,0x38d6(r3)            |{{f/load|<nowiki>r3 = Current Ability used Ability ID</nowiki>}} {{f/std|                    0x801938d6 / 801938d6}}
  00187a24: 00000000 nop
+
  00187a00: 00000000 nop                          |
00187a28: 9043001a lbu r3,0x001a(r2) Load Defender's Headgear
+
   
  00187a2c: 340200ff ori r2,r0,0x00ff
+
  {{f/loc| --- Remove HELMET section ---}}
  00187a30: 10620095 beq r3,r2,0x00187c88 Branch if Headgear ID is FF (Doesn't exist?)
+
00187a04: 10620005 beq r3,r2,0x00187a1c        {{f/Cond| If used Ability is not 0x8A (head break)}}
  00187a34: 34020080 ori r2,r0,0x0080 R2 = 80
+
  00187a08: 340200a1 ori r2,r0,0x00a1                |{{f/std|<nowiki>r2 = 0xa1 (blastar punch ID)</nowiki>}}
  00187a38: 3c038019 lui r3,0x8019
+
  00187a0c: 10620003 beq r3,r2,0x00187a1c            {{f/Cond| If used Ability is not Blastar punch }}
  00187a3c: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187a10: 3402006e ori r2,r0,0x006e                    |{{f/std|<nowiki>r2 = 0x6e (steal helmet)</nowiki>}}
  00187a40: 00000000 nop
+
  00187a14: 14620013 bne r3,r2,0x00187a64                {{f/Cond|If ability is steal helmet }} /Else branch to armor section
  00187a44: a0620019 sb r2,0x0019(r3) Store as remove helmet
+
  00187a18: 3402008b ori r2,r0,0x008b                    |{{f/std|<nowiki>r2 = 0x8b (armor break ID)</nowiki>}}
  00187a48: 3c028019 lui r2,0x8019
+
  00187a1c: 3c028019 lui r2,0x8019               {{f/Cond|E }} {{f/Cond|E }}    |
  00187a4c: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  00187a20: 8c422d98 lw r2,0x2d98(r2)                         |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187a50: 3c048019 lui r4,0x8019
+
  00187a24: 00000000 nop                                     |
00187a54: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
  00187a28: 9043001a lbu r3,0x001a(r2)                        |{{f/load|<nowiki>r3 = Target's Helmet ID</nowiki>}}
  00187a58: 9043001a lbu r3,0x001a(r2) Load Defender's Headgear
+
  00187a2c: 340200ff ori r2,r0,0x00ff                        |{{f/std|<nowiki>r2 = 0x0ff</nowiki>}}
  00187a5c: 08061f20 j 0x00187c80
+
  00187a30: 10620095 beq r3,r2,0x00187c88                    {{f/Cond|If Helmet exists (ID <> 0xff)}} /Else branch to  {{f/loc|Fail section}}
  00187a60: 00001021 addu r2,r0,r0 R2 =  0
+
  00187a34: 34020080 ori r2,r0,0x0080                            |{{f/std|<nowiki>r2 = 0x80 (Removed helmet flag)</nowiki>}}
  00187a64: 10620005 beq r3,r2,0x00187a7c Branch if used ability is 'Armor  Break'
+
  00187a38: 3c038019 lui r3,0x8019                                |
  00187a68: 340200a0 ori r2,r0,0x00a0
+
  00187a3c: 8c632d90 lw r3,0x2d90(r3)                            |{{f/adr|<nowiki>r3 = Target current action (TCA) data pointer</nowiki>}}
  00187a6c: 10620003 beq r3,r2,0x00187a7c Branch if used ability is  'Shellbust Stab'
+
  00187a40: 00000000 nop                                          |
  00187a70: 3402006f ori r2,r0,0x006f
+
  00187a44: a0620019 sb r2,0x0019(r3)                            |{{f/store|Set TCA remove item flag to 0x80 (remove helmet)}}
  00187a74: 14620013 bne r3,r2,0x00187ac4 Branch if used ability is not  'Steal Armor'
+
  00187a48: 3c028019 lui r2,0x8019                                |
  00187a78: 3402008c ori r2,r0,0x008c
+
  00187a4c: 8c422d98 lw r2,0x2d98(r2)                            |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187a7c: 3c028019 lui r2,0x8019
+
  00187a50: 3c048019 lui r4,0x8019                                |
00187a80: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
00187a54: 8c842d90 lw r4,0x2d90(r4)                            |{{f/adr|<nowiki>r4 = TCA data pointer</nowiki>}}
  00187a84: 00000000 nop
+
  00187a58: 9043001a lbu r3,0x001a(r2)                            |{{f/load|<nowiki>r3 = Target's Helmet ID</nowiki>}}
  00187a88: 9043001b lbu r3,0x001b(r2) Load Defender's Armor
+
  00187a5c: 08061f20 j 0x00187c80                                {{f/jump|Jump to Store Broken/Stolen Item }}
  00187a8c: 340200ff ori r2,r0,0x00ff
+
  00187a60: 00001021 addu r2,r0,r0                                |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
  00187a90: 1062007d beq r3,r2,0x00187c88 Branch if Armor doesn't exist
+
  00187a94: 34020040 ori r2,r0,0x0040
+
  {{f/loc| --- Remove ARMOR section ---}}
  00187a98: 3c038019 lui r3,0x8019
+
  00187a64: 10620005 beq r3,r2,0x00187a7c        {{f/Cond| if ability is not Armor Break (0x8b)}}
  00187a9c: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187a68: 340200a0 ori r2,r0,0x00a0                |{{f/std|<nowiki>r2 = 0xa0 (shellbust stab)</nowiki>}}
  00187aa0: 00000000 nop
+
  00187a6c: 10620003 beq r3,r2,0x00187a7c            {{f/Cond| if ability is not shellbust stab}}
  00187aa4: a0620019 sb r2,0x0019(r3) Store as remove helmet?
+
  00187a70: 3402006f ori r2,r0,0x006f                    |{{f/std|<nowiki>r2 = 0x6f (Steal Armor)</nowiki>}}
  00187aa8: 3c028019 lui r2,0x8019
+
  00187a74: 14620013 bne r3,r2,0x00187ac4                {{f/Cond| if Ability is steal armor  }} / Else branch to shield section
  00187aac: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  00187a78: 3402008c ori r2,r0,0x008c                    |{{f/std|<nowiki>r2 = 0x8c (shield break ID)</nowiki>}}
  00187ab0: 3c048019 lui r4,0x8019
+
  00187a7c: 3c028019 lui r2,0x8019                {{f/Cond|E }} {{f/Cond|E }}    |
  00187ab4: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
  00187a80: 8c422d98 lw r2,0x2d98(r2)                         |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187ab8: 9043001b lbu r3,0x001b(r2) Load Defender's Armor
+
  00187a84: 00000000 nop                                      |
  00187abc: 08061f20 j 0x00187c80
+
  00187a88: 9043001b lbu r3,0x001b(r2)                       |{{f/load|<nowiki>r3 = Target's armor ID</nowiki>}}
  00187ac0: 00001021 addu r2,r0,r0 R2 = 0
+
  00187a8c: 340200ff ori r2,r0,0x00ff                        |{{f/std|<nowiki>r2 = 0x0ff</nowiki>}}
  00187ac4: 10620003 beq r3,r2,0x00187ad4 Branch if used ability is 'Shield  Break'
+
  00187a90: 1062007d beq r3,r2,0x00187c88                    {{f/Cond| If Armor Exists (Armor ID <> 0xFF) }} /Else branch to  {{f/loc|Fail section}}
  00187ac8: 34020070 ori r2,r0,0x0070
+
  00187a94: 34020040 ori r2,r0,0x0040                            |{{f/std|<nowiki>r2 = 0x40 (Remove Armor flag)</nowiki>}}
00187acc: 1462001f bne r3,r2,0x00187b4c Branch if used ability is not  'Steal Shield'
+
  00187a98: 3c038019 lui r3,0x8019                                |
  00187ad0: 340200a3 ori r2,r0,0x00a3
+
  00187a9c: 8c632d90 lw r3,0x2d90(r3)                            |{{f/adr|<nowiki>r3 = Target current action (TCA) data pointer</nowiki>}}
  00187ad4: 9083001e lbu r3,0x001e(r4) Load Defender's Right Hand Shield
+
  00187aa0: 00000000 nop                                          |
  00187ad8: 340200ff ori r2,r0,0x00ff
+
  00187aa4: a0620019 sb r2,0x0019(r3)                            |{{f/store|Set TCA remove item flag to 0x40 (remove Armor)}}
  00187adc: 1062000c beq r3,r2,0x00187b10 Branch if Right Hand Shield  doesn't exist?
+
  00187aa8: 3c028019 lui r2,0x8019                                |
  00187ae0: 34020008 ori r2,r0,0x0008 R2 = 8
+
  00187aac: 8c422d98 lw r2,0x2d98(r2)                             |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187ae4: 3c038019 lui r3,0x8019
+
  00187ab0: 3c048019 lui r4,0x8019                                |
  00187ae8: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187ab4: 8c842d90 lw r4,0x2d90(r4)                            |{{f/adr|<nowiki>r4 = TCA data pointer</nowiki>}}
  00187aec: 00000000 nop
+
  00187ab8: 9043001b lbu r3,0x001b(r2)                            |{{f/load|<nowiki>r3 = Target's Armor ID</nowiki>}}
  00187af0: a0620019 sb r2,0x0019(r3) Store as Remove Right Hand Shield
+
  00187abc: 08061f20 j 0x00187c80                                {{f/jump|Jump to Store Broken/Stolen Item }}
  00187af4: 3c028019 lui r2,0x8019
+
  00187ac0: 00001021 addu r2,r0,r0                                |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
  00187af8: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
   
  00187afc: 3c048019 lui r4,0x8019
+
  {{f/loc| --- Remove SHIELD section ---}}
  00187b00: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
  00187ac4: 10620003 beq r3,r2,0x00187ad4        {{f/Cond| if ability is not shield Break (0x8c)}}
  00187b04: 9043001e lbu r3,0x001e(r2) Load Defender's Shield
+
  00187ac8: 34020070 ori r2,r0,0x0070                |{{f/std|<nowiki>r2 = 0x70 (steal shield)</nowiki>}}
  00187b08: 08061f20 j 0x00187c80
+
  00187acc: 1462001f bne r3,r2,0x00187b4c            {{f/Cond| if ability is steal shield  }} /Else branch  to accessory section
00187b0c: 00001021 addu r2,r0,r0 R2 = 0
+
  00187ad0: 340200a3 ori r2,r0,0x00a3                |{{f/std|<nowiki>r2 = 0x00a3 (Icewolf ID)</nowiki>}}
  00187b10: 90820020 lbu r2,0x0020(r4) Load Left Hand Shield
+
  00187ad4: 9083001e lbu r3,0x001e(r4)           {{f/Cond|E }}    | {{f/load|<nowiki>r3 = Target right hand shield</nowiki>}}
  00187b14: 00000000 nop
+
  00187ad8: 340200ff ori r2,r0,0x00ff                    |{{f/std|<nowiki>r2 = 0x0ff</nowiki>}}
  00187b18: 1043005b beq r2,r3,0x00187c88 Branch if Left Hand Shield doesn't  exist
+
  00187adc: 1062000c beq r3,r2,0x00187b10                {{f/Cond|If Target right hand shield exist (ID <> 0xFF}} /Else branch to left shield section
  00187b1c: 34020002 ori r2,r0,0x0002
+
  00187ae0: 34020008 ori r2,r0,0x0008                        |{{f/std|<nowiki>r2 = 0x08 (Remove Right Hand Shield flag)</nowiki>}}
00187b20: 3c038019 lui r3,0x8019
+
  00187ae4: 3c038019 lui r3,0x8019                           |
  00187b24: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187ae8: 8c632d90 lw r3,0x2d90(r3)                         |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
  00187b28: 00000000 nop
+
  00187aec: 00000000 nop                                     |
  00187b2c: a0620019 sb r2,0x0019(r3) Store as remove Left Hand Shield
+
  00187af0: a0620019 sb r2,0x0019(r3)                         |{{f/store|Set TCA remove item flag to 0x08 (RH shield)}}
  00187b30: 3c028019 lui r2,0x8019
+
  00187af4: 3c028019 lui r2,0x8019                           |
  00187b34: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  00187af8: 8c422d98 lw r2,0x2d98(r2)                         |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187b38: 3c048019 lui r4,0x8019
+
  00187afc: 3c048019 lui r4,0x8019                           |
  00187b3c: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
  00187b00: 8c842d90 lw r4,0x2d90(r4)                         |{{f/adr|<nowiki>r4= TCA data pointer</nowiki>}}
  00187b40: 90430020 lbu r3,0x0020(r2) Load Left Hand Shield
+
  00187b04: 9043001e lbu r3,0x001e(r2)                       |{{f/load|<nowiki>r3 = RH Shield ID</nowiki>}}
  00187b44: 08061f20 j 0x00187c80
+
  00187b08: 08061f20 j 0x00187c80                             {{f/jump|Jump to Store Broken/Stolen Item }}
  00187b48: 00001021 addu r2,r0,r0 R2 = 0
+
  00187b0c: 00001021 addu r2,r0,r0                           |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
  00187b4c: 10620003 beq r3,r2,0x00187b5c Branch if used ability is 'Icewolf  Bite'
+
  00187b10: 90820020 lbu r2,0x0020(r4)                    |{{f/load|<nowiki>r2 = left hand (LH) shield ID</nowiki>}}
  00187b50: 34020072 ori r2,r0,0x0072
+
  00187b14: 00000000 nop                                  |
  00187b54: 14620010 bne r3,r2,0x00187b98 Branch if used ability is not  'Steal Accessory'
+
00187b18: 1043005b beq r2,r3,0x00187c88                {{f/Cond|If Target left hand shield exist (ID <> 0xFF)  }} /Else branch to  {{f/loc|Fail section}}
  00187b58: 3402008d ori r2,r0,0x008d
+
  00187b1c: 34020002 ori r2,r0,0x0002                        |{{f/std|<nowiki>r2 = 0x02 (Remove Left Hand Shield flag)</nowiki>}}
  00187b5c: 9083001c lbu r3,0x001c(r4) Load Defender's Accessory
+
  00187b20: 3c038019 lui r3,0x8019                            |
  00187b60: 340200ff ori r2,r0,0x00ff
+
  00187b24: 8c632d90 lw r3,0x2d90(r3)                         |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
  00187b64: 10620048 beq r3,r2,0x00187c88 Branch if Accessory doesn't exist?
+
  00187b28: 00000000 nop                                      |
  00187b68: 34020020 ori r2,r0,0x0020
+
  00187b2c: a0620019 sb r2,0x0019(r3)                        |{{f/store|Set TCA remove item flag to 0x02 (LH shield)}}
  00187b6c: 3c038019 lui r3,0x8019
+
  00187b30: 3c028019 lui r2,0x8019                            |
  00187b70: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187b34: 8c422d98 lw r2,0x2d98(r2)                        |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187b74: 00000000 nop
+
00187b38: 3c048019 lui r4,0x8019                            |
00187b78: a0620019 sb r2,0x0019(r3) Store as remove accessory
+
  00187b3c: 8c842d90 lw r4,0x2d90(r4)                         |{{f/adr|<nowiki>r4= TCA data pointer</nowiki>}}
  00187b7c: 3c028019 lui r2,0x8019
+
  00187b40: 90430020 lbu r3,0x0020(r2)                        |{{f/load|<nowiki>r3 = LH Shield ID</nowiki>}}
  00187b80: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  00187b44: 08061f20 j 0x00187c80                            {{f/jump|Jump to Store Broken/Stolen Item }}
  00187b84: 3c048019 lui r4,0x8019
+
  00187b48: 00001021 addu r2,r0,r0                            |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
  00187b88: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
   
  00187b8c: 9043001c lbu r3,0x001c(r2) Load Defender's Accessory
+
  {{f/loc| --- Remove ACCESSORY section ---}}
  00187b90: 08061f20 j 0x00187c80
+
  00187b4c: 10620003 beq r3,r2,0x00187b5c        {{f/Cond|If ability is not Icewolf bite (0xa3)}}
00187b94: 00001021 addu r2,r0,r0 R2 = 0
+
  00187b50: 34020072 ori r2,r0,0x0072                |{{f/std|<nowiki>r2 = 0x72</nowiki>}}
  00187b98: 10620006 beq r3,r2,0x00187bb4 Branch if used ability is 'Weapon  Break'
+
  00187b54: 14620010 bne r3,r2,0x00187b98            {{f/Cond|If ability is steal accessory }} {{f/Cond| /Else branch to weapon section}}
  00187b9c: 2405ffff addiu r5,r0,0xffff R5 = 0xFFFF ?
+
  00187b58: 3402008d ori r2,r0,0x008d                |{{f/std|<nowiki>r2 = 0x8d (weapon break ID)</nowiki>}}
00187ba0: 340200a2 ori r2,r0,0x00a2
+
  00187b5c: 9083001c lbu r3,0x001c(r4)            {{f/Cond|E }}    | {{f/load|<nowiki>r3 = Target's Accessory ID</nowiki>}}
  00187ba4: 10620003 beq r3,r2,0x00187bb4 Branch if used ability is 'Hellcry  Punch'
+
  00187b60: 340200ff ori r2,r0,0x00ff                    |{{f/std|<nowiki>r2 =0x0ff</nowiki>}}
  00187ba8: 34020071 ori r2,r0,0x0071
+
  00187b64: 10620048 beq r3,r2,0x00187c88                 {{f/Cond| If accessory exists}} /Else branch to {{f/loc|Fail section}}
  00187bac: 14620036 bne r3,r2,0x00187c88 Branch if used ability is 'Steal Weapon'
+
  00187b68: 34020020 ori r2,r0,0x0020                        |{{f/std|<nowiki>r2 = 0x20 (remove accessory flag)</nowiki>}}
  00187bb0: 00000000 nop
+
  00187b6c: 3c038019 lui r3,0x8019                            |
  00187bb4: 3c068019 lui r6,0x8019
+
  00187b70: 8c632d90 lw r3,0x2d90(r3)                         |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
00187bb8: 8cc62d98 lw r6,0x2d98(r6) Load Defender's Stats
+
  00187b74: 00000000 nop                                      |
  00187bbc: 00000000 nop
+
  00187b78: a0620019 sb r2,0x0019(r3)                        |{{f/store|Set TCA remove item flag to 0x20 (Accessory)}}
  00187bc0: 90c3001d lbu r3,0x001d(r6) Load Right Hand Weapon
+
  00187b7c: 3c028019 lui r2,0x8019                            |
  00187bc4: 340700ff ori r7,r0,0x00ff
+
  00187b80: 8c422d98 lw r2,0x2d98(r2)                        |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187bc8: 10670007 beq r3,r7,0x00187be8 Branch if Right Hand Weapon  doesn't exist
+
  00187b84: 3c048019 lui r4,0x8019                            |
  00187bcc: 2404ffff addiu r4,r0,0xffff R4 = FFFF
+
  00187b88: 8c842d90 lw r4,0x2d90(r4)                        |{{f/adr|<nowiki>r4 = TCA data pointer</nowiki>}}
  00187bd0: 00031040 sll r2,r3,0x01 Right Hand Weapon * 2
+
  00187b8c: 9043001c lbu r3,0x001c(r2)                        |{{f/load|<nowiki>r3 = Target's Accessory ID (for display)</nowiki>}}
  00187bd4: 00431021 addu r2,r2,r3 Right Hand Weapon * 3
+
  00187b90: 08061f20 j 0x00187c80                            {{f/jump|Jump to Store Broken/Stolen Item }}
  00187bd8: 00021080 sll r2,r2,0x02 Right Hand Weapon * 12
+
00187b94: 00001021 addu r2,r0,r0                            |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
  00187bdc: 3c018006 lui r1,0x8006
+
00187be0: 00220821 addu r1,r1,r2
+
  {{f/loc| --- Remove WEAPON section ---}}
00187be4: 90242eba lbu r4,0x2eba(r1)
+
  00187b98: 10620006 beq r3,r2,0x00187bb4        {{f/Cond| If ability is not weapon break (0x8D)}}
  00187be8: 90c3001f lbu r3,0x001f(r6) Load Left Hand Weapon
+
  00187b9c: 2405ffff addiu r5,r0,-0x0001              |{{f/std|<nowiki>r5 =-0x01 (for later purpose -  r5 will become left hand weapon enemy level if target has a left hand weapon)</nowiki>}}
  00187bec: 00000000 nop
+
  00187ba0: 340200a2 ori r2,r0,0x00a2                |{{f/std|<nowiki>r2 = 0xa2 (Hellcry punch ID)</nowiki>}}
  00187bf0: 10670006 beq r3,r7,0x00187c0c Branch if Left Hand Weapon doesn't  exist
+
  00187ba4: 10620003 beq r3,r2,0x00187bb4            {{f/Cond| if ability is not Hellcry Punch }}
  00187bf4: 00031040 sll r2,r3,0x01 Left Hand Weapon * 2
+
  00187ba8: 34020071 ori r2,r0,0x0071                    |{{f/std|<nowiki>r2 = 0x71 (Steal weapon iD)</nowiki>}}
  00187bf8: 00431021 addu r2,r2,r3 Left Hand Weapon * 3
+
  00187bac: 14620036 bne r3,r2,0x00187c88                {{f/Cond|If ability is steal wepon }} /Else branch to near End (fail section-no hardcoded ability found)
  00187bfc: 00021080 sll r2,r2,0x02 Left Hand Weapon * 12
+
  00187bb0: 00000000 nop                                     |
  00187c00: 3c018006 lui r1,0x8006
+
  00187bb4: 3c068019 lui r6,0x8019                {{f/Cond|E }} {{f/Cond|E }}    |
00187c04: 00220821 addu r1,r1,r2
+
00187bb8: 8cc62d98 lw r6,0x2d98(r6)                        |{{f/adr|<nowiki>r6 = Target data pointer</nowiki>}}
00187c08: 90252eba lbu r5,0x2eba(r1)
+
  00187bbc: 00000000 nop                                     |
  00187c0c: 2402ffff addiu r2,r0,0xffff R2 = 0xFFFF
+
  00187bc0: 90c3001d lbu r3,0x001d(r6)                        |{{f/load|<nowiki>r3 = Target right hand weapon ID</nowiki>}}
00187c10: 14820003 bne r4,r2,0x00187c20
+
  00187bc4: 340700ff ori r7,r0,0x00ff                        |{{f/std|<nowiki>r7 = 0x0ff</nowiki>}}
  00187c14: 00000000 nop
+
  00187bc8: 10670007 beq r3,r7,0x00187be8                    {{f/Cond| If Target right hand weapon exist  }} /Else branch to left hand section
  00187c18: 10a4001b beq r5,r4,0x00187c88
+
  00187bcc: 2404ffff addiu r4,r0,-0x0001                      |{{f/std|<nowiki>r4 = -0x0001</nowiki>}}
  00187c1c: 00000000 nop
+
  00187bd0: 00031040 sll r2,r3,0x01                              |{{f/std|<nowiki>r2 = weapon ID * 2</nowiki>}}
  00187c20: 0085102a slt r2,r4,r5
+
  00187bd4: 00431021 addu r2,r2,r3                               |{{f/std|<nowiki>r2 = weapon ID * 3</nowiki>}}
  00187c24: 1440000c bne r2,r0,0x00187c58
+
  00187bd8: 00021080 sll r2,r2,0x02                              |{{f/std|<nowiki>r2 = weapon ID * 12</nowiki>}}
  00187c28: 34020004 ori r2,r0,0x0004
+
  00187bdc: 3c018006 lui r1,0x8006                                |
  00187c2c: 3c038019 lui r3,0x8019
+
  00187be0: 00220821 addu r1,r1,r2                                |{{f/std|<nowiki>r1 = 0x8006 XXXX (weapon ID *12)</nowiki>}}
  00187c30: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187be4: 90242eba lbu r4,0x2eba(r1)                           |{{f/load|<nowiki>r4 = RH Weapon enemy level</nowiki>}} {{f/std| 80062eb8 + 0x02 + Weapon offset}}
  00187c34: 34020010 ori r2,r0,0x0010
+
  00187be8: 90c3001f lbu r3,0x001f(r6)                        |{{f/load|<nowiki>r3 = Target left hand weapon ID</nowiki>}}
00187c38: a0620019 sb r2,0x0019(r3) Store as remove right hand weapon
+
  00187bec: 00000000 nop                                      |
  00187c3c: 3c028019 lui r2,0x8019
+
  00187bf0: 10670006 beq r3,r7,0x00187c0c                    {{f/Cond| if target left hand weapon exist }} {{f/Cond| /Else branch to weapon resolution section}}
00187c40: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
  00187bf4: 00031040 sll r2,r3,0x01                              |{{f/std|<nowiki>r2 = weapon ID * 2</nowiki>}}
  00187c44: 3c048019 lui r4,0x8019
+
  00187bf8: 00431021 addu r2,r2,r3                                |{{f/std|<nowiki>r2 = weapon ID * 3</nowiki>}}
  00187c48: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
  00187bfc: 00021080 sll r2,r2,0x02                              |{{f/std|<nowiki>r2 = weapon ID * 12</nowiki>}}
  00187c4c: 9043001d lbu r3,0x001d(r2) Load Right Hand Weapon
+
  00187c00: 3c018006 lui r1,0x8006                                |
  00187c50: 08061f20 j 0x00187c80
+
  00187c04: 00220821 addu r1,r1,r2                                |{{f/std|<nowiki>r1 = 0x8006 XXXX (weapon ID *12)</nowiki>}}
00187c54: 00001021 addu r2,r0,r0 R2 = 0
+
  00187c08: 90252eba lbu r5,0x2eba(r1)                           |{{f/load|<nowiki>r5 = LH weapon enemy level</nowiki>}}
  00187c58: 3c038019 lui r3,0x8019
+
  00187c0c: 2402ffff addiu r2,r0,-0x0001                      |{{f/std|<nowiki>r2 = -0x01</nowiki>}}
  00187c5c: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
  00187c10: 14820003 bne r4,r2,0x00187c20                    {{f/Cond|<nowiki> If r4 = -0x01 (No RH weapon)</nowiki>}}
00187c60: 00000000 nop
+
  00187c14: 00000000 nop                                          |
00187c64: a0620019 sb r2,0x0019(r3) Store as remove left hand weapon
+
  00187c18: 10a4001b beq r5,r4,0x00187c88                        {{f/Cond|If LH Weapon Exists (r5 <> -0x01)}} /Else branch to pre-End  (r4 = r5 = -0x01 : target has no weapon it's a fail)
  00187c68: 3c028019 lui r2,0x8019
+
00187c1c: 00000000 nop                                             |
  00187c6c: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
00187c20: 0085102a slt r2,r4,r5                            {{f/Cond|E }}    | {{f/std|<nowiki>r2 = 0x01 if RH weapon Lv < LH weapon Lv</nowiki>}}
00187c70: 3c048019 lui r4,0x8019
+
00187c24: 1440000c bne r2,r0,0x00187c58                            {{f/Cond|If RH Weapon Lv > LH weapon Lv}}
  00187c74: 8c842d90 lw r4,0x2d90(r4) Load Current Action Data Pointer
+
00187c28: 34020004 ori r2,r0,0x0004                                |{{f/std|<nowiki>r2 = 0x04 (remove LH weapon flag)</nowiki>}}
00187c78: 9043001f lbu r3,0x001f(r2) Load Left Hand Weapon
+
00187c2c: 3c038019 lui r3,0x8019                                    |
  00187c7c: 00001021 addu r2,r0,r0 R2 = 0
+
00187c30: 8c632d90 lw r3,0x2d90(r3)                                    |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
  00187c80: 08061f26 j 0x00187c98
+
00187c34: 34020010 ori r2,r0,0x0010                                    |{{f/std|<nowiki>r2 = 0x10 (remove RH weapon flag)</nowiki>}}
00187c84: a0830003 sb r3,0x0003(r4) Store Equipment... ?
+
00187c38: a0620019 sb r2,0x0019(r3)                                    |{{f/store|Set TCA remove item flag to 0x10 (RH weapon)}}
  00187c88: 3c038019 lui r3,0x8019
+
00187c3c: 3c028019 lui r2,0x8019                                        |
00187c8c: 8c632d90 lw r3,0x2d90(r3) Load Current Action Data Pointer
+
00187c40: 8c422d98 lw r2,0x2d98(r2)                                    |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00187c90: 2402ffff addiu r2,r0,0xffff R2 = 0xFFFF
+
00187c44: 3c048019 lui r4,0x8019                                        |
  00187c94: a0600019 sb r0,0x0019(r3) Store equipment as 0 ?
+
00187c48: 8c842d90 lw r4,0x2d90(r4)                                    |{{f/adr|<nowiki>r4 = Target current action data pointer</nowiki>}}
  00187c98: 03e00008 jr r31
+
00187c4c: 9043001d lbu r3,0x001d(r2)                                    |{{f/load|<nowiki>r3 = Right hand weapon ID</nowiki>}}
  00187c9c: 00000000 nop
+
00187c50: 08061f20 j 0x00187c80                                        {{f/jump|Jump to Store Broken/Stolen Item }}
 +
00187c54: 00001021 addu r2,r0,r0                                        |{{f/std|<nowiki>r2 = 0x00 (returned as item removal is sucessfull)</nowiki>}}
 +
00187c58: 3c038019 lui r3,0x8019                                        {{f/Cond|  Else : LH Weapon ID > RH weapon ID}}
 +
00187c5c: 8c632d90 lw r3,0x2d90(r3)                                    |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
 +
00187c60: 00000000 nop                                                  |
 +
00187c64: a0620019 sb r2,0x0019(r3)                                    |{{f/store|Set TCA remove item flag to 0x04 (LH weapon)}}
 +
00187c68: 3c028019 lui r2,0x8019                                        |
 +
00187c6c: 8c422d98 lw r2,0x2d98(r2)                                    |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
 +
00187c70: 3c048019 lui r4,0x8019                                        |
 +
00187c74: 8c842d90 lw r4,0x2d90(r4)                                    |{{f/adr|<nowiki>r4 = Target current action data pointer</nowiki>}}
 +
00187c78: 9043001f lbu r3,0x001f(r2)                                    |{{f/load|<nowiki>r3 = Left hand weapon ID (for display)</nowiki>}}
 +
00187c7c: 00001021 addu r2,r0,r0                                        |{{f/std|<nowiki>r2 = 0x00 (item removal is sucessfull)</nowiki>}}
 +
 +
{{f/loc| --- SUCCESS ---}}
 +
00187c80: 08061f26 j 0x00187c98                    {{f/jump|jump to End}}
 +
00187c84: a0830003 sb r3,0x0003(r4)                |{{f/store|Store Broken/Stolen Item ID in TCA 0x03 (Item to remove)}}
 +
{{f/loc| --- FAIL ---}}
 +
00187c88: 3c038019 lui r3,0x8019                    |>j {{f/std| landing site off all fails}}
 +
00187c8c: 8c632d90 lw r3,0x2d90(r3)                |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}}
 +
00187c90: 2402ffff addiu r2,r0,-0x0001              |{{f/std|<nowiki>r2 = -0x0001</nowiki>}}
 +
00187c94: a0600019 sb r0,0x0019(r3)                |{{f/store|Store 0x00 in TCA removed item (set to 0xFE at the start of the routine)}}
 +
00187c98: 03e00008 jr r31                      '''END'''
 +
00187c9c: 00000000 nop                         
 +
=== Hard coded mechanics ===
 +
Item to break/steal is tied to Ability ID. Any other ability will end with a fail.
 +
 +
- Steal Helmet    0x6e  Helmet
 +
- Steal Armor    0x6f  Armor
 +
- Steal Shield    0x70  Shield
 +
- Steal Weapon    0x71  Weapon
 +
- Steal Accessory 0x72  Accessory
 +
 +
- Head Break      0x8a  Helmet
 +
- Armor Break    0x8b  Armor
 +
- Shield Break    0x8c  Shield
 +
- Weapon Break    0x8d  Weapon
 +
 +
- Blastar Punch  0xa1  Helmet
 +
- Shellbust Stab  0xa0  Armor
 +
- Hellcry Punch  0xa2  Weapon
 +
- Icewolf Bite    0xa3  Accessory                     
 +
 +
=== Return locations ===
 +
'''Battle.bin'''
 +
001896fc: [[25_Equipped:_Break_Hit_(PA%2BWP%2BX)%25|Formula 25 - Equipped: Break Hit (PA+WP+X)%]]
 +
001897a4: [[26_Equipped:_Steal_Hit_(SP%2BX)%25|Formula 26 - Equipped: Steal Hit (SP+X)%]]
 +
00189bb4: [[2E_Equipped:Break_Dmg_(PA*WP)|Formula 2E - Equipped:Break Dmg (PA*WP)]]

Latest revision as of 19:28, 3 September 2024

-- Steal/Break/Might Sword Hard Coded routine --

No Parameters 

Returns r2 = 0x00 if Item is broken/Stolen / Else -0x01 (no Item, Monster, wrong Ability)

Choose the item to break/steal from the ability ID (Hard coded)
   - Set Target current Action Remove item flag (TCA 0x19)
   - Store item to remove ID in TCA 0x03
Note : if two weapons are equiped the better one will be broken (based on weapon enemy level)
--------------------------------------------------------------------------------------------------------------
001879c8: 3c038019 lui r3,0x8019            |
001879cc: 8c632d90 lw r3,0x2d90(r3)         |r3 = Target current action (TCA) data pointer
001879d0: 340200fe ori r2,r0,0x00fe         |
001879d4: a0620019 sb r2,0x0019(r3)         |Store 0xfe as remove equipment (everything removed ?)
001879d8: 3c048019 lui r4,0x8019            |
001879dc: 8c842d98 lw r4,0x2d98(r4)         |r4 = Target data location
001879e0: 00000000 nop                      |
001879e4: 90820006 lbu r2,0x0006(r4)        |r2 = Target gender
001879e8: 00000000 nop                      |
001879ec: 30420020 andi r2,r2,0x0020        |r2 = 0x20 if target is a monster, else 0x00
001879f0: 144000a5 bne r2,r0,0x00187c88     # If target is not a monster  /Else branch to near End (fail section)
001879f4: 3402008a ori r2,r0,0x008a             |r2 = 0x8a (head break ID)
001879f8: 3c038019 lui r3,0x8019                |
001879fc: 946338d6 lhu r3,0x38d6(r3)            |r3 = Current Ability used Ability ID                     0x801938d6 / 801938d6
00187a00: 00000000 nop                          |

 --- Remove HELMET section ---
00187a04: 10620005 beq r3,r2,0x00187a1c         # If used Ability is not 0x8A (head break)
00187a08: 340200a1 ori r2,r0,0x00a1                 |r2 = 0xa1 (blastar punch ID)
00187a0c: 10620003 beq r3,r2,0x00187a1c             # If used Ability is not Blastar punch 
00187a10: 3402006e ori r2,r0,0x006e                     |r2 = 0x6e (steal helmet)
00187a14: 14620013 bne r3,r2,0x00187a64                 #If ability is steal helmet   /Else branch to armor section
00187a18: 3402008b ori r2,r0,0x008b                     |r2 = 0x8b (armor break ID)
00187a1c: 3c028019 lui r2,0x8019                #E  #E      |
00187a20: 8c422d98 lw r2,0x2d98(r2)                         |r2 = Target data pointer
00187a24: 00000000 nop                                      |
00187a28: 9043001a lbu r3,0x001a(r2)                        |r3 = Target's Helmet ID
00187a2c: 340200ff ori r2,r0,0x00ff                         |r2 = 0x0ff
00187a30: 10620095 beq r3,r2,0x00187c88                     #If Helmet exists (ID <> 0xff) /Else branch to  Fail section
00187a34: 34020080 ori r2,r0,0x0080                             |r2 = 0x80 (Removed helmet flag)
00187a38: 3c038019 lui r3,0x8019                                |
00187a3c: 8c632d90 lw r3,0x2d90(r3)                             |r3 = Target current action (TCA) data pointer
00187a40: 00000000 nop                                          |
00187a44: a0620019 sb r2,0x0019(r3)                             |Set TCA remove item flag to 0x80 (remove helmet)
00187a48: 3c028019 lui r2,0x8019                                |
00187a4c: 8c422d98 lw r2,0x2d98(r2)                             |r2 = Target data pointer
00187a50: 3c048019 lui r4,0x8019                                |
00187a54: 8c842d90 lw r4,0x2d90(r4)                             |r4 = TCA data pointer
00187a58: 9043001a lbu r3,0x001a(r2)                            |r3 = Target's Helmet ID
00187a5c: 08061f20 j 0x00187c80                                 >>Jump to Store Broken/Stolen Item 
00187a60: 00001021 addu r2,r0,r0                                |r2 = 0x00 (returned as item removal is sucessfull)

 --- Remove ARMOR section ---
00187a64: 10620005 beq r3,r2,0x00187a7c         # if ability is not Armor Break (0x8b)
00187a68: 340200a0 ori r2,r0,0x00a0                 |r2 = 0xa0 (shellbust stab)
00187a6c: 10620003 beq r3,r2,0x00187a7c             # if ability is not shellbust stab
00187a70: 3402006f ori r2,r0,0x006f                     |r2 = 0x6f (Steal Armor)
00187a74: 14620013 bne r3,r2,0x00187ac4                 # if Ability is steal armor   / Else branch to shield section
00187a78: 3402008c ori r2,r0,0x008c                     |r2 = 0x8c (shield break ID)
00187a7c: 3c028019 lui r2,0x8019                #E  #E      |
00187a80: 8c422d98 lw r2,0x2d98(r2)                         |r2 = Target data pointer
00187a84: 00000000 nop                                      |
00187a88: 9043001b lbu r3,0x001b(r2)                        |r3 = Target's armor ID
00187a8c: 340200ff ori r2,r0,0x00ff                         |r2 = 0x0ff
00187a90: 1062007d beq r3,r2,0x00187c88                     # If Armor Exists (Armor ID <> 0xFF)   /Else branch to  Fail section
00187a94: 34020040 ori r2,r0,0x0040                             |r2 = 0x40 (Remove Armor flag)
00187a98: 3c038019 lui r3,0x8019                                |
00187a9c: 8c632d90 lw r3,0x2d90(r3)                             |r3 = Target current action (TCA) data pointer
00187aa0: 00000000 nop                                          |
00187aa4: a0620019 sb r2,0x0019(r3)                             |Set TCA remove item flag to 0x40 (remove Armor)
00187aa8: 3c028019 lui r2,0x8019                                |
00187aac: 8c422d98 lw r2,0x2d98(r2)                             |r2 = Target data pointer
00187ab0: 3c048019 lui r4,0x8019                                |
00187ab4: 8c842d90 lw r4,0x2d90(r4)                             |r4 = TCA data pointer
00187ab8: 9043001b lbu r3,0x001b(r2)                            |r3 = Target's Armor ID
00187abc: 08061f20 j 0x00187c80                                 >>Jump to Store Broken/Stolen Item 
00187ac0: 00001021 addu r2,r0,r0                                |r2 = 0x00 (returned as item removal is sucessfull)

 --- Remove SHIELD section ---
00187ac4: 10620003 beq r3,r2,0x00187ad4         # if ability is not shield Break (0x8c)
00187ac8: 34020070 ori r2,r0,0x0070                 |r2 = 0x70 (steal shield)
00187acc: 1462001f bne r3,r2,0x00187b4c             # if ability is steal shield   /Else branch  to accessory section
00187ad0: 340200a3 ori r2,r0,0x00a3                 |r2 = 0x00a3 (Icewolf ID)
00187ad4: 9083001e lbu r3,0x001e(r4)            #E      | r3 = Target right hand shield
00187ad8: 340200ff ori r2,r0,0x00ff                     |r2 = 0x0ff
00187adc: 1062000c beq r3,r2,0x00187b10                 #If Target right hand shield exist (ID <> 0xFF)   /Else branch to left shield section
00187ae0: 34020008 ori r2,r0,0x0008                         |r2 = 0x08 (Remove Right Hand Shield flag)
00187ae4: 3c038019 lui r3,0x8019                            |
00187ae8: 8c632d90 lw r3,0x2d90(r3)                         |r3 = TCA data pointer
00187aec: 00000000 nop                                      |
00187af0: a0620019 sb r2,0x0019(r3)                         |Set TCA remove item flag to 0x08 (RH shield)
00187af4: 3c028019 lui r2,0x8019                            |
00187af8: 8c422d98 lw r2,0x2d98(r2)                         |r2 = Target data pointer
00187afc: 3c048019 lui r4,0x8019                            |
00187b00: 8c842d90 lw r4,0x2d90(r4)                         |r4= TCA data pointer
00187b04: 9043001e lbu r3,0x001e(r2)                        |r3 = RH Shield ID
00187b08: 08061f20 j 0x00187c80                             >>Jump to Store Broken/Stolen Item 
00187b0c: 00001021 addu r2,r0,r0                            |r2 = 0x00 (returned as item removal is sucessfull)
00187b10: 90820020 lbu r2,0x0020(r4)                    |r2 = left hand (LH) shield ID
00187b14: 00000000 nop                                  |
00187b18: 1043005b beq r2,r3,0x00187c88                 #If Target left hand shield exist (ID <> 0xFF)    /Else branch to  Fail section
00187b1c: 34020002 ori r2,r0,0x0002                         |r2 = 0x02 (Remove Left Hand Shield flag)
00187b20: 3c038019 lui r3,0x8019                            |
00187b24: 8c632d90 lw r3,0x2d90(r3)                         |r3 = TCA data pointer
00187b28: 00000000 nop                                      |
00187b2c: a0620019 sb r2,0x0019(r3)                         |Set TCA remove item flag to 0x02 (LH shield)
00187b30: 3c028019 lui r2,0x8019                            |
00187b34: 8c422d98 lw r2,0x2d98(r2)                         |r2 = Target data pointer
00187b38: 3c048019 lui r4,0x8019                            |
00187b3c: 8c842d90 lw r4,0x2d90(r4)                         |r4= TCA data pointer
00187b40: 90430020 lbu r3,0x0020(r2)                        |r3 = LH Shield ID
00187b44: 08061f20 j 0x00187c80                             >>Jump to Store Broken/Stolen Item 
00187b48: 00001021 addu r2,r0,r0                            |r2 = 0x00 (returned as item removal is sucessfull)

 --- Remove ACCESSORY section ---
00187b4c: 10620003 beq r3,r2,0x00187b5c         #If ability is not Icewolf bite (0xa3)
00187b50: 34020072 ori r2,r0,0x0072                 |r2 = 0x72
00187b54: 14620010 bne r3,r2,0x00187b98             #If ability is steal accessory  # /Else branch to weapon section
00187b58: 3402008d ori r2,r0,0x008d                 |r2 = 0x8d (weapon break ID)
00187b5c: 9083001c lbu r3,0x001c(r4)            #E      | r3 = Target's Accessory ID
00187b60: 340200ff ori r2,r0,0x00ff                     |r2 =0x0ff
00187b64: 10620048 beq r3,r2,0x00187c88                 # If accessory exists /Else branch to  Fail section
00187b68: 34020020 ori r2,r0,0x0020                         |r2 = 0x20 (remove accessory flag)
00187b6c: 3c038019 lui r3,0x8019                            |
00187b70: 8c632d90 lw r3,0x2d90(r3)                         |r3 = TCA data pointer
00187b74: 00000000 nop                                      |
00187b78: a0620019 sb r2,0x0019(r3)                         |Set TCA remove item flag to 0x20 (Accessory)
00187b7c: 3c028019 lui r2,0x8019                            |
00187b80: 8c422d98 lw r2,0x2d98(r2)                         |r2 = Target data pointer
00187b84: 3c048019 lui r4,0x8019                            |
00187b88: 8c842d90 lw r4,0x2d90(r4)                         |r4 = TCA data pointer
00187b8c: 9043001c lbu r3,0x001c(r2)                        |r3 = Target's Accessory ID (for display)
00187b90: 08061f20 j 0x00187c80                             >>Jump to Store Broken/Stolen Item 
00187b94: 00001021 addu r2,r0,r0                            |r2 = 0x00 (returned as item removal is sucessfull)

 --- Remove WEAPON section ---
00187b98: 10620006 beq r3,r2,0x00187bb4         # If ability is not weapon break (0x8D)
00187b9c: 2405ffff addiu r5,r0,-0x0001              |r5 =-0x01 (for later purpose -  r5 will become left hand weapon enemy level if target has a left hand weapon)
00187ba0: 340200a2 ori r2,r0,0x00a2                 |r2 = 0xa2 (Hellcry punch ID)
00187ba4: 10620003 beq r3,r2,0x00187bb4             # if ability is not Hellcry Punch 
00187ba8: 34020071 ori r2,r0,0x0071                     |r2 = 0x71 (Steal weapon iD)
00187bac: 14620036 bne r3,r2,0x00187c88                 #If ability is steal wepon  /Else branch to near End (fail section-no hardcoded ability found)
00187bb0: 00000000 nop                                      |
00187bb4: 3c068019 lui r6,0x8019                #E  #E      |
00187bb8: 8cc62d98 lw r6,0x2d98(r6)                         |r6 = Target data pointer
00187bbc: 00000000 nop                                      |
00187bc0: 90c3001d lbu r3,0x001d(r6)                        |r3 = Target right hand weapon ID
00187bc4: 340700ff ori r7,r0,0x00ff                         |r7 = 0x0ff
00187bc8: 10670007 beq r3,r7,0x00187be8                     # If Target right hand weapon exist   /Else branch to left hand section
00187bcc: 2404ffff addiu r4,r0,-0x0001                      |r4 = -0x0001
00187bd0: 00031040 sll r2,r3,0x01                               |r2 = weapon ID * 2
00187bd4: 00431021 addu r2,r2,r3                                |r2 = weapon ID * 3
00187bd8: 00021080 sll r2,r2,0x02                               |r2 = weapon ID * 12
00187bdc: 3c018006 lui r1,0x8006                                |
00187be0: 00220821 addu r1,r1,r2                                |r1 = 0x8006 XXXX (weapon ID *12)
00187be4: 90242eba lbu r4,0x2eba(r1)                            |r4 = RH Weapon enemy level  80062eb8 + 0x02 + Weapon offset
00187be8: 90c3001f lbu r3,0x001f(r6)                        |r3 = Target left hand weapon ID
00187bec: 00000000 nop                                      |
00187bf0: 10670006 beq r3,r7,0x00187c0c                     # if target left hand weapon exist  # /Else branch to weapon resolution section
00187bf4: 00031040 sll r2,r3,0x01                               |r2 = weapon ID * 2
00187bf8: 00431021 addu r2,r2,r3                                |r2 = weapon ID * 3
00187bfc: 00021080 sll r2,r2,0x02                               |r2 = weapon ID * 12
00187c00: 3c018006 lui r1,0x8006                                |
00187c04: 00220821 addu r1,r1,r2                                |r1 = 0x8006 XXXX (weapon ID *12)
00187c08: 90252eba lbu r5,0x2eba(r1)                            |r5 = LH weapon enemy level
00187c0c: 2402ffff addiu r2,r0,-0x0001                      |r2 = -0x01
00187c10: 14820003 bne r4,r2,0x00187c20                     # If r4 = -0x01 (No RH weapon)
00187c14: 00000000 nop                                          |
00187c18: 10a4001b beq r5,r4,0x00187c88                         #If LH Weapon Exists (r5 <> -0x01) /Else branch to pre-End  (r4 = r5 = -0x01 : target has no weapon it's a fail)
00187c1c: 00000000 nop                                              |
00187c20: 0085102a slt r2,r4,r5                             #E      | r2 = 0x01 if RH weapon Lv < LH weapon Lv
00187c24: 1440000c bne r2,r0,0x00187c58                             #If RH Weapon Lv > LH weapon Lv
00187c28: 34020004 ori r2,r0,0x0004                                 |r2 = 0x04 (remove LH weapon flag)
00187c2c: 3c038019 lui r3,0x8019                                    |
00187c30: 8c632d90 lw r3,0x2d90(r3)                                     |r3 = TCA data pointer
00187c34: 34020010 ori r2,r0,0x0010                                     |r2 = 0x10 (remove RH weapon flag)
00187c38: a0620019 sb r2,0x0019(r3)                                     |Set TCA remove item flag to 0x10 (RH weapon)
00187c3c: 3c028019 lui r2,0x8019                                        |
00187c40: 8c422d98 lw r2,0x2d98(r2)                                     |r2 = Target data pointer
00187c44: 3c048019 lui r4,0x8019                                        |
00187c48: 8c842d90 lw r4,0x2d90(r4)                                     |r4 = Target current action data pointer
00187c4c: 9043001d lbu r3,0x001d(r2)                                    |r3 = Right hand weapon ID
00187c50: 08061f20 j 0x00187c80                                         >>Jump to Store Broken/Stolen Item 
00187c54: 00001021 addu r2,r0,r0                                        |r2 = 0x00 (returned as item removal is sucessfull)
00187c58: 3c038019 lui r3,0x8019                                        #  Else : LH Weapon ID > RH weapon ID
00187c5c: 8c632d90 lw r3,0x2d90(r3)                                     |r3 = TCA data pointer
00187c60: 00000000 nop                                                  |
00187c64: a0620019 sb r2,0x0019(r3)                                     |Set TCA remove item flag to 0x04 (LH weapon)
00187c68: 3c028019 lui r2,0x8019                                        |
00187c6c: 8c422d98 lw r2,0x2d98(r2)                                     |r2 = Target data pointer
00187c70: 3c048019 lui r4,0x8019                                        |
00187c74: 8c842d90 lw r4,0x2d90(r4)                                     |r4 = Target current action data pointer
00187c78: 9043001f lbu r3,0x001f(r2)                                    |r3 = Left hand weapon ID (for display)
00187c7c: 00001021 addu r2,r0,r0                                        |r2 = 0x00 (item removal is sucessfull)

 --- SUCCESS ---
00187c80: 08061f26 j 0x00187c98                     >>jump to End
00187c84: a0830003 sb r3,0x0003(r4)                 |Store Broken/Stolen Item ID in TCA 0x03 (Item to remove)
 --- FAIL ---
00187c88: 3c038019 lui r3,0x8019                    |>j  landing site off all fails
00187c8c: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00187c90: 2402ffff addiu r2,r0,-0x0001              |r2 = -0x0001
00187c94: a0600019 sb r0,0x0019(r3)                 |Store 0x00 in TCA removed item (set to 0xFE at the start of the routine)
00187c98: 03e00008 jr r31                       END
00187c9c: 00000000 nop                          

Hard coded mechanics

Item to break/steal is tied to Ability ID. Any other ability will end with a fail.

- Steal Helmet    0x6e   Helmet
- Steal Armor     0x6f   Armor
- Steal Shield    0x70   Shield
- Steal Weapon    0x71   Weapon
- Steal Accessory 0x72   Accessory

- Head Break      0x8a   Helmet
- Armor Break     0x8b   Armor
- Shield Break    0x8c   Shield
- Weapon Break    0x8d   Weapon

- Blastar Punch   0xa1   Helmet
- Shellbust Stab  0xa0   Armor
- Hellcry Punch   0xa2   Weapon
- Icewolf Bite    0xa3   Accessory                       

Return locations

Battle.bin
001896fc: Formula 25 - Equipped: Break Hit (PA+WP+X)%
001897a4: Formula 26 - Equipped: Steal Hit (SP+X)%
00189bb4: Formula 2E - Equipped:Break Dmg (PA*WP)