Difference between revisions of "Load Known Ability Flag"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with " Load Known Ability Flag 0019aa50: 000410c0 sll r2,r4,0x03 Unit's ID * 8 0019aa54: 00441023 subu r2,r2,r4 ID * 7 0019aa58: 00021180 sll r2,r2,0x06 ID * 1c0 0019aa5c: 3c...")
 
m
 
Line 1: Line 1:
  Load Known Ability Flag
+
  [[Routine_Locations#BATTLE.BIN_RAM|BATTLE.BIN]] : Load Known Ability Flag
  0019aa50: 000410c0 sll r2,r4,0x03 Unit's ID * 8
+
-------------------------------------------------------------------------------------------
  0019aa54: 00441023 subu r2,r2,r4 ID * 7
+
Parameters : r4 = Unit's ID
  0019aa58: 00021180 sll r2,r2,0x06 ID * 1c0
+
              r5 = Skillset ID
  0019aa5c: 3c038019 lui r3,0x8019
+
              r6 = Ability counter (position in skillset)
  0019aa60: 246308cc addiu r3,r3,0x08cc
+
Returns : r2 = 0x01 if Ability is known
  0019aa64: 00432021 addu r4,r2,r3
+
          r2 = 0x00 if not
  0019aa68: 90820006 lbu r2,0x0006(r4) Load Unit's Gender Byte
+
          r2 = 0x01 by default if unit is using a skillset with no data in unit's data.
  0019aa6c: 00000000 nop
+
-------------------------------------------------------------------------------------------
  0019aa70: 30420020 andi r2,r2,0x0020
+
  0019aa50: 000410c0 sll r2,r4,0x03           |{{f/std|Unit's ID * 8}}
  0019aa74: 14400022 bne r2,r0,0x 0019ab00 Branch if Unit is a monster
+
  0019aa54: 00441023 subu r2,r2,r4           |{{f/std|ID * 7}}
  0019aa78: 34020001 ori r2,r0,0x0001 r2 = 1
+
  0019aa58: 00021180 sll r2,r2,0x06           |{{f/std|ID * 1c0}}
  0019aa7c: 24a3fffb addiu r3,r5,0xfffb r3 = Skillset ID - 5 (Basic Skill)
+
  0019aa5c: 3c038019 lui r3,0x8019           |
  0019aa80: 2c620013 sltiu r2,r3,0x0013
+
  0019aa60: 246308cc addiu r3,r3,0x08cc       |
  0019aa84: 10400003 beq r2,r0,0x 0019aa94 Branch if Skillset isn't Generic (-mime)
+
  0019aa64: 00432021 addu r4,r2,r3           |{{f/adr|Unit Battle data pointer}}
  0019aa88: 00000000 nop
+
  0019aa68: 90820006 lbu r2,0x0006(r4)       |{{f/load|Load Unit's ENTD flags}}
  0019aa8c: 08066ab0 j 0x 0019aac0
+
  0019aa6c: 00000000 nop                     |
  0019aa90: 00602821 addu r5,r3,r0 r5 = Skillset ID
+
  0019aa70: 30420020 andi r2,r2,0x0020       |{{f/std|Check for monster}}
  0019aa94: 90820012 lbu r2,0x0012(r4) Load Unit's Primary Skillset
+
  0019aa74: 14400022 bne r2,r0,0x0019ab00    {{f/Cond|If unit is not a monster}} / Else branch to {{f/loc|END}} with r2 = 0x01
  0019aa98: 00000000 nop
+
  0019aa78: 34020001 ori r2,r0,0x0001         |{{f/std|<nowiki>r2 = 1</nowiki>}}
  0019aa9c: 10a20007 beq r5,r2,0x 0019aabc Branch if Skillset = Primary Skillset
+
  0019aa7c: 24a3fffb addiu r3,r5,-0x05            |{{f/std|<nowiki>r3 = Skillset ID - 5 (Basic Skill = 0x00)</nowiki>}}
  0019aaa0: 00000000 nop
+
  0019aa80: 2c620013 sltiu r2,r3,0x0013           |{{f/std|Check If Skillset is generic (but not mime)}}
  0019aaa4: 90820162 lbu r2,0x0162(r4) Load Unit's Special Skillset?
+
  0019aa84: 10400003 beq r2,r0,0x0019aa94        {{f/Cond|If Skillset is a generic skillset}}
  0019aaa8: 00000000 nop
+
  0019aa88: 00000000 nop                             |{{f/std|}}
  0019aaac: 10a20004 beq r5,r2,0x 0019aac0 Branch if Skillset = Special Skillset?
+
  0019aa8c: 08066ab0 j 0x0019aac0                    {{f/jump|Avoid not generic section}}
  0019aab0: 00002821 addu r5,r0,r0 Skillset = 0 (Base)
+
  0019aa90: 00602821 addu r5,r3,r0                   |{{f/std|Skillset ID - 5 (0x00 for Basic skill)}}
  0019aab4: 08066ac0 j 0x 0019ab00
+
                                                {{f/Cond|Else - Mime or Not generic skillset}}
  0019aab8: 34020001 ori r2,r0,0x0001 r2 = 1
+
  0019aa94: 90820012 lbu r2,0x0012(r4)               |{{f/load|Load Unit's Primary Skillset}}
  0019aabc: 00002821 addu r5,r0,r0 Skillset = 0 (Base)
+
  0019aa98: 00000000 nop                             |
  0019aac0: 00c01821 addu r3,r6,r0 r3 = Counter
+
  0019aa9c: 10a20007 beq r5,r2,0x0019aabc            {{f/Cond|If skillset is not primary skillset}}
  0019aac4: 00051040 sll r2,r5,0x01 Skillset ID * 2
+
  0019aaa0: 00000000 nop                                 |{{f/std|}}
  0019aac8: 00451021 addu r2,r2,r5 ID * 3
+
  0019aaa4: 90820162 lbu r2,0x0162(r4)                   |{{f/load|Load Unit's Special Skillset?}}
  0019aacc: 00441021 addu r2,r2,r4
+
  0019aaa8: 00000000 nop                                 |
  0019aad0: 04c10002 bgez r6,0x 0019aadc Branch if Preset Value >= 0
+
  0019aaac: 10a20004 beq r5,r2,0x0019aac0                {{f/Cond|If skillset is not special skillset}} /Else Branch with skillset = 0x00
  0019aad4: 24420099 addiu r2,r2,0x0099 r2 = Pointer to Unit's Known abilties
+
  0019aab0: 00002821 addu r5,r0,r0                       |{{f/std|<nowiki>Skillset = 0 (Base skillset)</nowiki>}}
  0019aad8: 24c30007 addiu r3,r6,0x0007 Counter + 7
+
  0019aab4: 08066ac0 j 0x0019ab00                            {{f/jump|Jump to}} {{f/loc|END}} returns r2 = 0x01 - Ability is known
  0019aadc: 000320c3 sra r4,r3,0x03 Counter / 8
+
  0019aab8: 34020001 ori r2,r0,0x0001                         |
  0019aae0: 00441021 addu r2,r2,r4
+
                                                    {{f/Cond|Else : Skillset is primary skillset (not generic)}}
  0019aae4: 90420000 lbu r2,0x0000(r2) Load known Ability Byte
+
  0019aabc: 00002821 addu r5,r0,r0                       |{{f/std|<nowiki>r5 = 0x00 (Base skillset)</nowiki>}}
  0019aae8: 000420c0 sll r4,r4,0x03 Counter / 8 * 8
+
  0019aac0: 00c01821 addu r3,r6,r0               |{{f/std|<nowiki>r3 = Counter</nowiki>}}
  0019aaec: 00c42023 subu r4,r6,r4 C Mod = Counter - Counter / 8 * 8
+
  0019aac4: 00051040 sll r2,r5,0x01               |{{f/std|<nowiki>Skillset ID * 2 (note : if skillset is not a generic one, ID = 0x00)</nowiki>}}
  0019aaf0: 34030080 ori r3,r0,0x0080 r3 = 0x80
+
  0019aac8: 00451021 addu r2,r2,r5               |{{f/std|Skillset ID *3}}
  0019aaf4: 00831807 srav r3,r3,r4 0x80 / 2^(C Mod) (get ability to load)
+
  0019aacc: 00441021 addu r2,r2,r4               |{{f/std|Unit data pointer + skillset offset}}
  0019aaf8: 00431024 and r2,r2,r3 Get Known Ability
+
  0019aad0: 04c10002 bgez r6,0x0019aadc          {{f/Cond|If Counter < 0x00}}
  0019aafc: 0002102b sltu r2,r0,r2 r2 = 1 if known, r2 = 0 otherwise
+
  0019aad4: 24420099 addiu r2,r2,0x0099           |{{f/adr|Pointer to Unit's Known skillset's abilties}}
  0019ab00: 03e00008 jr r31
+
  0019aad8: 24c30007 addiu r3,r6,0x0007               |{{f/std|Counter + 7}}
 +
  0019aadc: 000320c3 sra r4,r3,0x03               |{{f/std|Counter / 8 (0x00 or 0x1) - Ability Offset in Unit's known abilities}}
 +
  0019aae0: 00441021 addu r2,r2,r4               |{{f/adr|Pointer to ability known byte in unit's skillset data}}
 +
  0019aae4: 90420000 lbu r2,0x0000(r2)           |{{f/load|Load known Ability Byte}}
 +
  0019aae8: 000420c0 sll r4,r4,0x03               |{{f/std|Counter / 8 * 8 (0x00 or 0x08)}}
 +
  0019aaec: 00c42023 subu r4,r6,r4               |{{f/std|Position of ability known flag in byte}}
 +
  0019aaf0: 34030080 ori r3,r0,0x0080             |{{f/std|<nowiki>r3 = 0x80</nowiki>}}
 +
  0019aaf4: 00831807 srav r3,r3,r4               |{{f/std|Bitmask to known flag}}
 +
  0019aaf8: 00431024 and r2,r2,r3                 |{{f/std|Check Ability known flag}}
 +
  0019aafc: 0002102b sltu r2,r0,r2               |{{f/std|<nowiki>r2 = 0x1 if known, r2 = 0x0 otherwise</nowiki>}}
 +
  0019ab00: 03e00008 jr r31                   END
 
  0019ab04: 00000000 nop
 
  0019ab04: 00000000 nop
 +
=== Return locations ===
 +
'''BATTLE.BIN'''
 +
00195120: [[Set_AI_ability_considerations_for_all_units_and_self]]
 +
00197664: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]
 +
001976a4: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]
 +
001976e4: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]
 +
0019a6bc: [[Usable_Ability_Setting]]
 +
0019a720: [[Usable_Ability_Setting]]
 +
0019a788: [[Usable_Ability_Setting]]
 +
0019a94c: [[Usable_Ability_Setting]]
 +
0019bcf4: [[Math_Skill_Targeting]]
 +
0019bd34: [[Math_Skill_Targeting]]
 +
0019be14: [[Math_Skill_Targeting]]
 +
0019be40: [[Math_Skill_Targeting]]

Latest revision as of 11:54, 22 April 2023

BATTLE.BIN : Load Known Ability Flag
-------------------------------------------------------------------------------------------
Parameters : r4 = Unit's ID
             r5 = Skillset ID
             r6 = Ability counter (position in skillset)
Returns : r2 = 0x01 if Ability is known
          r2 = 0x00 if not
          r2 = 0x01 by default if unit is using a skillset with no data in unit's data.
-------------------------------------------------------------------------------------------
0019aa50: 000410c0 sll r2,r4,0x03           |Unit's ID * 8
0019aa54: 00441023 subu r2,r2,r4            |ID * 7
0019aa58: 00021180 sll r2,r2,0x06           |ID * 1c0
0019aa5c: 3c038019 lui r3,0x8019            |
0019aa60: 246308cc addiu r3,r3,0x08cc       |
0019aa64: 00432021 addu r4,r2,r3            |Unit Battle data pointer
0019aa68: 90820006 lbu r2,0x0006(r4)        |Load Unit's ENTD flags
0019aa6c: 00000000 nop                      |
0019aa70: 30420020 andi r2,r2,0x0020        |Check for monster
0019aa74: 14400022 bne r2,r0,0x0019ab00     #If unit is not a monster / Else branch to END with r2 = 0x01
0019aa78: 34020001 ori r2,r0,0x0001         |r2 = 1
0019aa7c: 24a3fffb addiu r3,r5,-0x05            |r3 = Skillset ID - 5 (Basic Skill = 0x00)
0019aa80: 2c620013 sltiu r2,r3,0x0013           |Check If Skillset is generic (but not mime)
0019aa84: 10400003 beq r2,r0,0x0019aa94         #If Skillset is a generic skillset
0019aa88: 00000000 nop                              |
0019aa8c: 08066ab0 j 0x0019aac0                     >>Avoid not generic section
0019aa90: 00602821 addu r5,r3,r0                    |Skillset ID - 5 (0x00 for Basic skill)
                                                #Else - Mime or Not generic skillset
0019aa94: 90820012 lbu r2,0x0012(r4)                |Load Unit's Primary Skillset
0019aa98: 00000000 nop                              |
0019aa9c: 10a20007 beq r5,r2,0x0019aabc             #If skillset is not primary skillset
0019aaa0: 00000000 nop                                  |
0019aaa4: 90820162 lbu r2,0x0162(r4)                    |Load Unit's Special Skillset?
0019aaa8: 00000000 nop                                  |
0019aaac: 10a20004 beq r5,r2,0x0019aac0                 #If skillset is not special skillset /Else Branch with skillset = 0x00
0019aab0: 00002821 addu r5,r0,r0                        |Skillset = 0 (Base skillset)
0019aab4: 08066ac0 j 0x0019ab00                             >>Jump to END returns r2 = 0x01 - Ability is known
0019aab8: 34020001 ori r2,r0,0x0001                         |
                                                    #Else : Skillset is primary skillset (not generic)
0019aabc: 00002821 addu r5,r0,r0                        |r5 = 0x00 (Base skillset)
0019aac0: 00c01821 addu r3,r6,r0                |r3 = Counter
0019aac4: 00051040 sll r2,r5,0x01               |Skillset ID * 2 (note : if skillset is not a generic one, ID = 0x00)
0019aac8: 00451021 addu r2,r2,r5                |Skillset ID *3
0019aacc: 00441021 addu r2,r2,r4                |Unit data pointer + skillset offset
0019aad0: 04c10002 bgez r6,0x0019aadc           #If Counter < 0x00
0019aad4: 24420099 addiu r2,r2,0x0099           |Pointer to Unit's Known skillset's abilties
0019aad8: 24c30007 addiu r3,r6,0x0007               |Counter + 7
0019aadc: 000320c3 sra r4,r3,0x03               |Counter / 8 (0x00 or 0x1) - Ability Offset in Unit's known abilities
0019aae0: 00441021 addu r2,r2,r4                |Pointer to ability known byte in unit's skillset data
0019aae4: 90420000 lbu r2,0x0000(r2)            |Load known Ability Byte
0019aae8: 000420c0 sll r4,r4,0x03               |Counter / 8 * 8 (0x00 or 0x08)
0019aaec: 00c42023 subu r4,r6,r4                |Position of ability known flag in byte
0019aaf0: 34030080 ori r3,r0,0x0080             |r3 = 0x80
0019aaf4: 00831807 srav r3,r3,r4                |Bitmask to known flag
0019aaf8: 00431024 and r2,r2,r3                 |Check Ability known flag
0019aafc: 0002102b sltu r2,r0,r2                |r2 = 0x1 if known, r2 = 0x0 otherwise
0019ab00: 03e00008 jr r31                   END
0019ab04: 00000000 nop

Return locations

BATTLE.BIN
00195120: Set_AI_ability_considerations_for_all_units_and_self
00197664: Store_ability/skillset_data,_set_AI_settings_for_ability?
001976a4: Store_ability/skillset_data,_set_AI_settings_for_ability?
001976e4: Store_ability/skillset_data,_set_AI_settings_for_ability?
0019a6bc: Usable_Ability_Setting
0019a720: Usable_Ability_Setting
0019a788: Usable_Ability_Setting
0019a94c: Usable_Ability_Setting
0019bcf4: Math_Skill_Targeting
0019bd34: Math_Skill_Targeting
0019be14: Math_Skill_Targeting
0019be40: Math_Skill_Targeting