Difference between revisions of "Damage and Knockback Routine (Dash, tackle, throw stone)"
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 | + | 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) | + | 00186930: 906338fa lbu r3,0x38fa(r3) ^ |
− | 00186934: 00000000 nop | + | 00186934: 00000000 nop ~ |
− | 00186938: | + | 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) | + | 00186954: 946338ce lhu r3,0x38ce(r3) ^ |
− | 00186958: 24420001 addiu r2,r2,0x0001 | + | 00186958: 24420001 addiu r2,r2,0x0001 r2 += 1 // r2 = 1..Y |
− | 0018695c: | + | 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) | + | 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) | + | 00186998: 90630024 lbu r3,0x0024(r3) r3 = attacker.Brave |
− | 0018699c: 00000000 nop | + | 0018699c: 00000000 nop |
− | 001869a0: | + | 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) | + | 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 | + | 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: | + | 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