Difference between revisions of "Talk Skill"
Jump to navigation
Jump to search
(Adds labels to make page easier to navigate (does not solve poor readability of jr r2 locations)) |
m |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | No Parameters - Returns Nothing | |
− | 00186c04: 3c028019 lui r2,0x8019 | + | Hard coded : effect depends on ability ID |
− | 00186c08: 944238d6 lhu r2,0x38d6(r2) | + | |
− | 00186c0c: 27bdffe8 addiu r29,r29, | + | If The Ability is not a talk skill one, it will jump to the Apply status routine (default section) |
− | 00186c10: 2443ff8b addiu r3,r2, | + | Otherwise it will handle the stats/gil modification (See [[#Hard coded mechanics]]) |
− | 00186c14: 2c620007 sltiu r2,r3,0x0007 | + | -------------------------------------------------------------------------------------------- |
− | 00186c18: 1040002d beq r2,r0,0x00186cd0 | + | 00186c04: 3c028019 lui r2,0x8019 | |
− | 00186c1c: afbf0010 sw r31,0x0010(r29) | + | 00186c08: 944238d6 lhu r2,0x38d6(r2) |{{f/load|<nowiki>r2 = Current Ability used Ability ID</nowiki>}} |
− | 00186c20: 00031080 sll r2,r3,0x02 | + | 00186c0c: 27bdffe8 addiu r29,r29,-0x0018 | |
− | 00186c24: 3c018017 lui r1,0x8017 | + | 00186c10: 2443ff8b addiu r3,r2,-0x0075 |{{f/std|<nowiki>r2 = Used Ability ID - 0x75 </nowiki>}} |
− | 00186c28: 00220821 addu r1,r1,r2 | + | 00186c14: 2c620007 sltiu r2,r3,0x0007 |{{f/std|<nowiki>r2 = 0x01 if Used Ability is between Persuade (0x75) and Negotiate (0x7b)</nowiki>}} |
− | 00186c2c: 8c22427c lw r2,0x427c(r1) | + | 00186c18: 1040002d beq r2,r0,0x00186cd0 {{f/Cond|If used Ability is a Talk Skill Ability with Stat alteration}} {{f/std| Death sentence Adress send to Status Ability section}} |
− | 00186c30: 00000000 nop | + | 00186c1c: afbf0010 sw r31,0x0010(r29) | |
− | 00186c34: 00400008 jr r2 | + | 00186c20: 00031080 sll r2,r3,0x02 |{{f/std|<nowiki>r2 = Used Ability Offset (Jump Address Table) - (Ability ID - 0x75)*4</nowiki>}} |
− | 00186c38: 00000000 nop | + | 00186c24: 3c018017 lui r1,0x8017 | |
− | + | 00186c28: 00220821 addu r1,r1,r2 |{{f/std|<nowiki>r1 = 0x80170000 + Used Ability Offset</nowiki>}} | |
− | + | 00186c2c: 8c22427c lw r2,0x427c(r1) |{{f/adr|<nowiki>r2 = Jump Adress for used Ability</nowiki>}} | |
− | + | 00186c30: 00000000 nop | | |
− | + | 00186c34: 00400008 jr r2 |{{f/std|Jump to dedicated section}} [[Talk_Skill_Ability_Table|<span style="color:blue">Talk_Skill_Ability_Table<span>]] | |
− | + | 00186c38: 00000000 nop | | |
− | + | ||
− | + | {{f/loc| --- Negotiate --- }} | |
− | 00186c3c: 0c0619d1 jal 0x00186744 | + | 00186c3c: 0c0619d1 jal 0x00186744 |{{f/jal|Steal Gil|Steal Gil}} Calculate Stolen Gil (Speed * Lv), update Target and Attacker Action data (gain or loss) |
− | 00186c40: 00000000 nop | + | 00186c40: 00000000 nop | |
− | 00186c44: 08061b3c j 0x00186cf0 | + | 00186c44: 08061b3c j 0x00186cf0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186c48: 00000000 nop | + | 00186c48: 00000000 nop | |
− | 00186c4c: 3c038019 lui r3,0x8019 | + | |
− | 00186c50: 8c632d90 lw r3,0x2d90(r3) | + | {{f/loc| --- Persuade --- }} |
− | 00186c54: 3402007f ori r2,r0,0x007f | + | 00186c4c: 3c038019 lui r3,0x8019 | |
− | 00186c58: 08061b38 j 0x00186ce0 | + | 00186c50: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r2 = Target Current Action (TCA) data pointer</nowiki>}} |
− | 00186c5c: a0620013 sb r2,0x0013(r3) | + | 00186c54: 3402007f ori r2,r0,0x007f |{{f/std|<nowiki>r2 = 0x7f (CT0)</nowiki>}} |
− | 00186c60: 3c028019 lui r2,0x8019 | + | 00186c58: 08061b38 j 0x00186ce0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186c64: 904238fa lbu r2,0x38fa(r2) | + | 00186c5c: a0620013 sb r2,0x0013(r3) |{{f/store|Set TCA CT change to - 127 (CT00)}} |
− | 00186c68: 3c038019 lui r3,0x8019 | + | |
− | 00186c6c: 8c632d90 lw r3,0x2d90(r3) | + | {{f/loc| --- Praise --- }} |
− | 00186c70: 34420080 ori r2,r2,0x0080 | + | 00186c60: 3c028019 lui r2,0x8019 | |
− | 00186c74: 08061b38 j 0x00186ce0 | + | 00186c64: 904238fa lbu r2,0x38fa(r2) |{{f/load|<nowiki>r2 = Current Ability used Ability Y</nowiki>}} |
− | 00186c78: a0620016 sb r2,0x0016(r3) | + | 00186c68: 3c038019 lui r3,0x8019 | |
− | 00186c7c: 3c028019 lui r2,0x8019 | + | 00186c6c: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}} |
− | 00186c80: 904238fa lbu r2,0x38fa(r2) | + | 00186c70: 34420080 ori r2,r2,0x0080 |{{f/std|<nowiki>r2 = Y with bonus flag</nowiki>}} |
− | 00186c84: 3c038019 lui r3,0x8019 | + | 00186c74: 08061b38 j 0x00186ce0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186c88: 8c632d90 lw r3,0x2d90(r3) | + | 00186c78: a0620016 sb r2,0x0016(r3) |{{f/store|Set TCA Brave change to +Y}} |
− | 00186c8c: 3042007f andi r2,r2,0x007f | + | |
− | 00186c90: 08061b38 j 0x00186ce0 | + | {{f/loc| --- Threaten --- }} |
− | 00186c94: a0620016 sb r2,0x0016(r3) | + | 00186c7c: 3c028019 lui r2,0x8019 | |
− | 00186c98: 3c028019 lui r2,0x8019 | + | 00186c80: 904238fa lbu r2,0x38fa(r2) |{{f/load|<nowiki>r2 = Current Ability used Ability Y</nowiki>}} |
− | 00186c9c: 904238fa lbu r2,0x38fa(r2) | + | 00186c84: 3c038019 lui r3,0x8019 | |
− | 00186ca0: 3c038019 lui r3,0x8019 | + | 00186c88: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}} |
− | 00186ca4: 8c632d90 lw r3,0x2d90(r3) | + | 00186c8c: 3042007f andi r2,r2,0x007f |{{f/std|<nowiki>r2 = Y without bonus flag</nowiki>}} |
− | 00186ca8: 34420080 ori r2,r2,0x0080 | + | 00186c90: 08061b38 j 0x00186ce0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186cac: 08061b38 j 0x00186ce0 | + | 00186c94: a0620016 sb r2,0x0016(r3) |{{f/store|Set TCA Brave change to -Y}} |
− | 00186cb0: a0620017 sb r2,0x0017(r3) | + | |
− | 00186cb4: 3c028019 lui r2,0x8019 | + | {{f/loc| --- Preach --- }} |
− | 00186cb8: 904238fa lbu r2,0x38fa(r2) | + | 00186c98: 3c028019 lui r2,0x8019 | |
− | 00186cbc: 3c038019 lui r3,0x8019 | + | 00186c9c: 904238fa lbu r2,0x38fa(r2) |{{f/load|<nowiki>r2 = Current Ability used Ability Y</nowiki>}} |
− | 00186cc0: 8c632d90 lw r3,0x2d90(r3) | + | 00186ca0: 3c038019 lui r3,0x8019 | |
− | 00186cc4: 3042007f andi r2,r2,0x007f | + | 00186ca4: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}} |
− | 00186cc8: 08061b38 j 0x00186ce0 | + | 00186ca8: 34420080 ori r2,r2,0x0080 |{{f/std|<nowiki>r2 = Y with bonus flag</nowiki>}} |
− | 00186ccc: a0620017 sb r2,0x0017(r3) | + | 00186cac: 08061b38 j 0x00186ce0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186cd0: 0c061fc9 jal 0x00187f24 | + | 00186cb0: a0620017 sb r2,0x0017(r3) |{{f/store|Set TCA Faith change to +Y}} |
− | 00186cd4: 00000000 nop | + | |
− | 00186cd8: 08061b3c j 0x00186cf0 | + | {{f/loc| --- Solution --- }} |
− | 00186cdc: 00000000 nop | + | 00186cb4: 3c028019 lui r2,0x8019 | |
− | 00186ce0: 3c038019 lui r3,0x8019 | + | 00186cb8: 904238fa lbu r2,0x38fa(r2) |{{f/load|<nowiki>r2 = Current Ability used Ability Y</nowiki>}} |
− | 00186ce4: 8c632d90 lw r3,0x2d90(r3) | + | 00186cbc: 3c038019 lui r3,0x8019 | |
− | 00186ce8: 34020001 ori r2,r0,0x0001 | + | 00186cc0: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}} |
− | 00186cec: a0620025 sb r2,0x0025(r3) | + | 00186cc4: 3042007f andi r2,r2,0x007f |{{f/std|<nowiki>r2 = Y without bonus flag</nowiki>}} |
− | 00186cf0: 8fbf0010 lw r31,0x0010(r29) | + | 00186cc8: 08061b38 j 0x00186ce0 {{f/jump|Jumps to Set Attack type as pseudo status}} |
− | 00186cf4: 27bd0018 addiu r29,r29,0x0018 | + | 00186ccc: a0620017 sb r2,0x0017(r3) |{{f/store|Set TCA Faith change to -Y}} |
+ | |||
+ | {{f/loc| --- Invitation, Death Sentence, Insult, Mimic Daravon --- }} | ||
+ | 00186cd0: 0c061fc9 jal 0x00187f24 |{{f/jal|Apply status (to action)|Apply status (to action)}} | ||
+ | 00186cd4: 00000000 nop | | ||
+ | 00186cd8: 08061b3c j 0x00186cf0 {{f/jump|Jumps to END}} | ||
+ | 00186cdc: 00000000 nop | | ||
+ | |||
+ | ''' Set Attack Type to pseudo status section ''' | ||
+ | 00186ce0: 3c038019 lui r3,0x8019 | | ||
+ | 00186ce4: 8c632d90 lw r3,0x2d90(r3) |{{f/adr|<nowiki>r3 = TCA data pointer</nowiki>}} | ||
+ | 00186ce8: 34020001 ori r2,r0,0x0001 |{{f/std|<nowiki>r2 = 0x01</nowiki>}} | ||
+ | 00186cec: a0620025 sb r2,0x0025(r3) |{{f/store|Set TCA Attack type to pseudo status (disables other flags)}} | ||
+ | 00186cf0: 8fbf0010 lw r31,0x0010(r29) END | ||
+ | 00186cf4: 27bd0018 addiu r29,r29,0x0018| | ||
00186cf8: 03e00008 jr r31 | 00186cf8: 03e00008 jr r31 | ||
00186cfc: 00000000 nop | 00186cfc: 00000000 nop | ||
− | </ | + | === Hard coded mechanics === |
+ | Jump Address is determined by Ability ID - see [[Talk_Skill_Ability_Table|<span style="color:blue">Talk_Skill_Ability_Table<span>]] | ||
+ | |||
+ | 0x75 Persuade CT = 0x00 | ||
+ | 0x76 Praise Brave Bonus | ||
+ | 0x77 Threaten Brave Malus | ||
+ | 0x78 Preach Faith Bonus | ||
+ | 0x79 Solution Faith Malus | ||
+ | 0x7a Death sentence Jump to default section - (Apply status) | ||
+ | 0x7b Negotiate Steal Gil | ||
+ | |||
+ | === Return locations === | ||
+ | '''Battle.bin''' | ||
+ | 00189a80: [[2A_Hit_(MA%2BX)%25_//_AffectBraveOrFaith(Y)]] |
Latest revision as of 20:32, 22 April 2022
No Parameters - Returns Nothing Hard coded : effect depends on ability ID If The Ability is not a talk skill one, it will jump to the Apply status routine (default section) Otherwise it will handle the stats/gil modification (See #Hard coded mechanics) -------------------------------------------------------------------------------------------- 00186c04: 3c028019 lui r2,0x8019 | 00186c08: 944238d6 lhu r2,0x38d6(r2) |r2 = Current Ability used Ability ID 00186c0c: 27bdffe8 addiu r29,r29,-0x0018 | 00186c10: 2443ff8b addiu r3,r2,-0x0075 |r2 = Used Ability ID - 0x75 00186c14: 2c620007 sltiu r2,r3,0x0007 |r2 = 0x01 if Used Ability is between Persuade (0x75) and Negotiate (0x7b) 00186c18: 1040002d beq r2,r0,0x00186cd0 #If used Ability is a Talk Skill Ability with Stat alteration Death sentence Adress send to Status Ability section 00186c1c: afbf0010 sw r31,0x0010(r29) | 00186c20: 00031080 sll r2,r3,0x02 |r2 = Used Ability Offset (Jump Address Table) - (Ability ID - 0x75)*4 00186c24: 3c018017 lui r1,0x8017 | 00186c28: 00220821 addu r1,r1,r2 |r1 = 0x80170000 + Used Ability Offset 00186c2c: 8c22427c lw r2,0x427c(r1) |r2 = Jump Adress for used Ability 00186c30: 00000000 nop | 00186c34: 00400008 jr r2 |Jump to dedicated section Talk_Skill_Ability_Table 00186c38: 00000000 nop | --- Negotiate --- 00186c3c: 0c0619d1 jal 0x00186744 |-->Steal Gil Calculate Stolen Gil (Speed * Lv), update Target and Attacker Action data (gain or loss) 00186c40: 00000000 nop | 00186c44: 08061b3c j 0x00186cf0 >>Jumps to Set Attack type as pseudo status 00186c48: 00000000 nop | --- Persuade --- 00186c4c: 3c038019 lui r3,0x8019 | 00186c50: 8c632d90 lw r3,0x2d90(r3) |r2 = Target Current Action (TCA) data pointer 00186c54: 3402007f ori r2,r0,0x007f |r2 = 0x7f (CT0) 00186c58: 08061b38 j 0x00186ce0 >>Jumps to Set Attack type as pseudo status 00186c5c: a0620013 sb r2,0x0013(r3) |Set TCA CT change to - 127 (CT00) --- Praise --- 00186c60: 3c028019 lui r2,0x8019 | 00186c64: 904238fa lbu r2,0x38fa(r2) |r2 = Current Ability used Ability Y 00186c68: 3c038019 lui r3,0x8019 | 00186c6c: 8c632d90 lw r3,0x2d90(r3) |r3 = TCA data pointer 00186c70: 34420080 ori r2,r2,0x0080 |r2 = Y with bonus flag 00186c74: 08061b38 j 0x00186ce0 >>Jumps to Set Attack type as pseudo status 00186c78: a0620016 sb r2,0x0016(r3) |Set TCA Brave change to +Y --- Threaten --- 00186c7c: 3c028019 lui r2,0x8019 | 00186c80: 904238fa lbu r2,0x38fa(r2) |r2 = Current Ability used Ability Y 00186c84: 3c038019 lui r3,0x8019 | 00186c88: 8c632d90 lw r3,0x2d90(r3) |r3 = TCA data pointer 00186c8c: 3042007f andi r2,r2,0x007f |r2 = Y without bonus flag 00186c90: 08061b38 j 0x00186ce0 >>Jumps to Set Attack type as pseudo status 00186c94: a0620016 sb r2,0x0016(r3) |Set TCA Brave change to -Y --- Preach --- 00186c98: 3c028019 lui r2,0x8019 | 00186c9c: 904238fa lbu r2,0x38fa(r2) |r2 = Current Ability used Ability Y 00186ca0: 3c038019 lui r3,0x8019 | 00186ca4: 8c632d90 lw r3,0x2d90(r3) |r3 = TCA data pointer 00186ca8: 34420080 ori r2,r2,0x0080 |r2 = Y with bonus flag 00186cac: 08061b38 j 0x00186ce0 >>Jumps to Set Attack type as pseudo status 00186cb0: a0620017 sb r2,0x0017(r3) |Set TCA Faith change to +Y --- Solution --- 00186cb4: 3c028019 lui r2,0x8019 | 00186cb8: 904238fa lbu r2,0x38fa(r2) |r2 = Current Ability used Ability Y 00186cbc: 3c038019 lui r3,0x8019 | 00186cc0: 8c632d90 lw r3,0x2d90(r3) |r3 = TCA data pointer 00186cc4: 3042007f andi r2,r2,0x007f |r2 = Y without bonus flag 00186cc8: 08061b38 j 0x00186ce0 >>Jumps to Set Attack type as pseudo status 00186ccc: a0620017 sb r2,0x0017(r3) |Set TCA Faith change to -Y --- Invitation, Death Sentence, Insult, Mimic Daravon --- 00186cd0: 0c061fc9 jal 0x00187f24 |-->Apply status (to action) 00186cd4: 00000000 nop | 00186cd8: 08061b3c j 0x00186cf0 >>Jumps to END 00186cdc: 00000000 nop | Set Attack Type to pseudo status section 00186ce0: 3c038019 lui r3,0x8019 | 00186ce4: 8c632d90 lw r3,0x2d90(r3) |r3 = TCA data pointer 00186ce8: 34020001 ori r2,r0,0x0001 |r2 = 0x01 00186cec: a0620025 sb r2,0x0025(r3) |Set TCA Attack type to pseudo status (disables other flags) 00186cf0: 8fbf0010 lw r31,0x0010(r29) END 00186cf4: 27bd0018 addiu r29,r29,0x0018| 00186cf8: 03e00008 jr r31 00186cfc: 00000000 nop
Hard coded mechanics
Jump Address is determined by Ability ID - see Talk_Skill_Ability_Table 0x75 Persuade CT = 0x00 0x76 Praise Brave Bonus 0x77 Threaten Brave Malus 0x78 Preach Faith Bonus 0x79 Solution Faith Malus 0x7a Death sentence Jump to default section - (Apply status) 0x7b Negotiate Steal Gil
Return locations
Battle.bin 00189a80: 2A_Hit_(MA+X)%_//_AffectBraveOrFaith(Y)