Difference between revisions of "Damage and Knockback Routine (Dash, tackle, throw stone)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(rewrite)
Line 1: Line 1:
  0018691c: 27bdffe8 addiu r29,r29,0xffe8
+
  0018691c: 27bdffe8 addiu r29,r29,0xffe8     ~
  00186920: afbf0010 sw r31,0x0010(r29)
+
  00186920: afbf0010 sw r31,0x0010(r29)       ~
  00186924: 0c063ba8 jal 0x 0018eea0 random process
+
  00186924: 0c063ba8 jal 0x [[0018eea0]]          r2 = rand 0x0..7FFF
  00186928: 00000000 nop
+
  00186928: 00000000 nop                     ~
  0018692c: 3c038019 lui r3,0x8019
+
  0018692c: 3c038019 lui r3,0x8019           r3 = ability param Y
  00186930: 906338fa lbu r3,0x38fa(r3) load ability Y
+
  00186930: 906338fa lbu r3,0x38fa(r3)       ^
  00186934: 00000000 nop
+
  00186934: 00000000 nop                     ~
  00186938: 0043 0018 mult r2,r3
+
  00186938: 00430018 mult r2,r3               r2 = Y * rand(0x7FFF)
  0018693c: 00001012 mflo r2
+
  0018693c: 00001012 mflo r2                 ^
  00186940: 04410002 bgez r2,0x 0018694c
+
  00186940: 04410002 bgez r2,0x 0018694c     if r2 < 0:        //if negative
  00186944: 00000000 nop
+
  00186944: 00000000 nop                     ~
  00186948: 24427fff addiu r2,r2,0x7fff
+
  00186948: 24427fff addiu r2,r2,0x7fff           r2 += 0x7fff  //force positive?
  0018694c: 000213c3 sra r2,r2,0x0f
+
  0018694c: 000213c3 sra r2,r2,0x0f           r2 /= 0x8000      // r2 = 0..(Y-1)
  00186950: 3c038019 lui r3,0x8019
+
  00186950: 3c038019 lui r3,0x8019           load XA
  00186954: 946338ce lhu r3,0x38ce(r3) load XA
+
  00186954: 946338ce lhu r3,0x38ce(r3)       ^
  00186958: 24420001 addiu r2,r2,0x0001
+
  00186958: 24420001 addiu r2,r2,0x0001       r2 += 1            // r2 = 1..Y
  0018695c: 0043 0018 mult r2,r3
+
  0018695c: 00430018 mult r2,r3               // see 00186978
  00186960: 3c048019 lui r4,0x8019
+
  00186960: 3c048019 lui r4,0x8019           r4 = target action data pointer
  00186964: 8c842d90 lw r4,0x2d90(r4)
+
  00186964: 8c842d90 lw r4,0x2d90(r4)         ^
  00186968: 34020080 ori r2,r0,0x0080
+
  00186968: 34020080 ori r2,r0,0x0080         target action data .0x25 = 0x80  //?
  0018696c: a0820025 sb r2,0x0025(r4)
+
  0018696c: a0820025 sb r2,0x0025(r4)         ^
  00186970: 3c038019 lui r3,0x8019
+
  00186970: 3c038019 lui r3,0x8019           r3 = is-prediction
  00186974: 8c63f5fc lw r3,-0x0a04(r3)
+
  00186974: 8c63f5fc lw r3,-0x0a04(r3)       ^
  00186978: 00001012 mflo r2
+
  00186978: 00001012 mflo r2                 r2 = XA * 1..Y
  0018697c: 14600017 bne r3,r0,0x 001869dc
+
  0018697c: 14600017 bne r3,r0,0x 001869dc   v HP damage = XA*Rand
  00186980: a4820004 sh r2,0x0004(r4) HP damage = XA*Rand
+
  00186980: a4820004 sh r2,0x0004(r4)         ^ if not just predicting:  //try knockback
  00186984: 0c063ba8 jal 0x 0018eea0
+
  00186984: 0c063ba8 jal 0x [[0018eea0]]              r2 = rand(0x7FFF)
  00186988: 00000000 nop
+
  00186988: 00000000 nop                        
  0018698c: 3c038019 lui r3,0x8019
+
  0018698c: 3c038019 lui r3,0x8019               r3 = attacker data pointer
  00186990: 8c632d94 lw r3,0x2d94(r3)
+
  00186990: 8c632d94 lw r3,0x2d94(r3)             ^
  00186994: 00000000 nop
+
  00186994: 00000000 nop                        
  00186998: 90630024 lbu r3,0x0024(r3) attacker HP
+
  00186998: 90630024 lbu r3,0x0024(r3)           r3 = attacker.Brave
  0018699c: 00000000 nop
+
  0018699c: 00000000 nop                    
  001869a0: 0043 0018 mult r2,r3 attacker HP*rand
+
  001869a0: 00430018 mult r2,r3                   r5 = attacker.Brave * 0..7FFF = 0..(atkr.Br-1)
  001869a4: 00002812 mflo r5
+
  001869a4: 00002812 mflo r5                     ^
  001869a8: 04a10002 bgez r5,0x 001869b4
+
  001869a8: 04a10002 bgez r5,0x 001869b4         if r5 < 0:      //unnecessary
  001869ac: 00000000 nop
+
  001869ac: 00000000 nop                    
  001869b0: 24a57fff addiu r5,r5,0x7fff
+
  001869b0: 24a57fff addiu r5,r5,0x7fff               r5 += 0x7fff    //make positive
  001869b4: 3c028019 lui r2,0x8019
+
  001869b4: 3c028019 lui r2,0x8019               r2 = target data pointer
  001869b8: 8c422d98 lw r2,0x2d98(r2)
+
  001869b8: 8c422d98 lw r2,0x2d98(r2)             ^
  001869bc: 00000000 nop
+
  001869bc: 00000000 nop                    
  001869c0: 90440024 lbu r4,0x0024(r2) load target HP
+
  001869c0: 90440024 lbu r4,0x0024(r2)           r4 = target.Brave
  001869c4: 0c017833 jal 0x0005e0cc
+
  001869c4: 0c017833 jal 0x0005e0cc               if roll_success(
  001869c8: 00052bc3 sra r5,r5,0x0f
+
  001869c8: 00052bc3 sra r5,r5,0x0f                   chance := 0..(atkr.Br-1) / target.Brave
  001869cc: 14400003 bne r2,r0,0x 001869dc
+
  001869cc: 14400003 bne r2,r0,0x 001869dc           // Yes, two rolls are involved.
  001869d0: 00000000 nop
+
  001869d0: 00000000 nop                         ):
  001869d4: 0c0610fb jal 0x 001843ec                     Knockback Calculation
+
  001869d4: 0c0610fb jal 0x [[001843ec]]              Knockback Calculation
  001869d8: 00000000 nop
+
  001869d8: 00000000 nop                        
  001869dc: 8fbf0010 lw r31,0x0010(r29)
+
  001869dc: 8fbf0010 lw r31,0x0010(r29)       return
  001869e0: 27bd 0018 addiu r29,r29,0x 0018
+
  001869e0: 27bd0018 addiu r29,r29,0x 0018   ^
  001869e4: 03e00008 jr r31
+
  001869e4: 03e00008 jr r31                   ^
 
  001869e8: 00000000 nop
 
  001869e8: 00000000 nop

Revision as of 00:41, 8 February 2016

0018691c: 27bdffe8 addiu r29,r29,0xffe8     ~
00186920: afbf0010 sw r31,0x0010(r29)       ~
00186924: 0c063ba8 jal 0x 0018eea0          r2 = rand 0x0..7FFF
00186928: 00000000 nop                      ~
0018692c: 3c038019 lui r3,0x8019            r3 = ability param Y
00186930: 906338fa lbu r3,0x38fa(r3)        ^
00186934: 00000000 nop                      ~
00186938: 00430018 mult r2,r3               r2 = Y * rand(0x7FFF)
0018693c: 00001012 mflo r2                  ^
00186940: 04410002 bgez r2,0x 0018694c      if r2 < 0:         //if negative
00186944: 00000000 nop                      ~
00186948: 24427fff addiu r2,r2,0x7fff           r2 += 0x7fff   //force positive?
0018694c: 000213c3 sra r2,r2,0x0f           r2 /= 0x8000       // r2 = 0..(Y-1)
00186950: 3c038019 lui r3,0x8019            load XA
00186954: 946338ce lhu r3,0x38ce(r3)        ^
00186958: 24420001 addiu r2,r2,0x0001       r2 += 1            // r2 = 1..Y
0018695c: 00430018 mult r2,r3               // see 00186978
00186960: 3c048019 lui r4,0x8019            r4 = target action data pointer
00186964: 8c842d90 lw r4,0x2d90(r4)         ^
00186968: 34020080 ori r2,r0,0x0080         target action data .0x25 = 0x80  //?
0018696c: a0820025 sb r2,0x0025(r4)         ^
00186970: 3c038019 lui r3,0x8019            r3 = is-prediction
00186974: 8c63f5fc lw r3,-0x0a04(r3)        ^
00186978: 00001012 mflo r2                  r2 = XA * 1..Y
0018697c: 14600017 bne r3,r0,0x 001869dc    v HP damage = XA*Rand
00186980: a4820004 sh r2,0x0004(r4)         ^ if not just predicting:   //try knockback
00186984: 0c063ba8 jal 0x 0018eea0              r2 = rand(0x7FFF)
00186988: 00000000 nop                         
0018698c: 3c038019 lui r3,0x8019                r3 = attacker data pointer
00186990: 8c632d94 lw r3,0x2d94(r3)             ^
00186994: 00000000 nop                          
00186998: 90630024 lbu r3,0x0024(r3)            r3 = attacker.Brave
0018699c: 00000000 nop                      
001869a0: 00430018 mult r2,r3                   r5 = attacker.Brave * 0..7FFF = 0..(atkr.Br-1)
001869a4: 00002812 mflo r5                      ^
001869a8: 04a10002 bgez r5,0x 001869b4          if r5 < 0:      //unnecessary
001869ac: 00000000 nop                      
001869b0: 24a57fff addiu r5,r5,0x7fff               r5 += 0x7fff    //make positive
001869b4: 3c028019 lui r2,0x8019                r2 = target data pointer
001869b8: 8c422d98 lw r2,0x2d98(r2)             ^
001869bc: 00000000 nop                      
001869c0: 90440024 lbu r4,0x0024(r2)            r4 = target.Brave
001869c4: 0c017833 jal 0x0005e0cc               if roll_success(
001869c8: 00052bc3 sra r5,r5,0x0f                   chance := 0..(atkr.Br-1) / target.Brave
001869cc: 14400003 bne r2,r0,0x 001869dc            // Yes, two rolls are involved.
001869d0: 00000000 nop                          ):
001869d4: 0c0610fb jal 0x 001843ec              Knockback Calculation
001869d8: 00000000 nop                          
001869dc: 8fbf0010 lw r31,0x0010(r29)       return
001869e0: 27bd0018 addiu r29,r29,0x 0018    ^
001869e4: 03e00008 jr r31                   ^
001869e8: 00000000 nop