diff options
author | yenatch <yenatch@gmail.com> | 2014-01-03 16:21:07 -0500 |
---|---|---|
committer | yenatch <yenatch@gmail.com> | 2014-01-03 16:21:07 -0500 |
commit | ffc0b8f9de5c19e732c22b3d4b7f72b2387d7da5 (patch) | |
tree | 11d40bcdc2c65179409e4288df3c15aa755a73ba /main.asm | |
parent | d32e480f03476ce6e261e5553d940b4cb2d33790 (diff) |
repeated critical move table and recomment MoreCalculateDamage
Diffstat (limited to 'main.asm')
-rwxr-xr-x | main.asm | 163 |
1 files changed, 104 insertions, 59 deletions
@@ -65144,124 +65144,161 @@ Func_3df1c: ; 3df1c (f:5f1c) ret MoreCalculateDamage: ; 3df65 (f:5f65) - ld a, [$ff00+$f3] ;FFF3 decides which address to use +; input: +; b: attack +; c: opponent defense +; d: base power +; e: level + + ld a, [$ff00+$f3] ; whose turn? and a ld a, [W_PLAYERMOVEEFFECT] - jr z, .next + jr z, .effect ld a, [$cfcd] -.next - cp a, 7 ;effect to halve opponent defense [suicide moves] - jr nz, .next2 -.halveDefense - srl c ;explosion and selfdestruct will halve the defense... - jr nz, .next2 - inc c ;...with a minimum value of 1 [it is used as a divisor later on] -.next2 - cp a, $1d - jr z, .next3 +.effect + +; EXPLODE_EFFECT halves defense. + cp a, EXPLODE_EFFECT + jr nz, .ok + srl c + jr nz, .ok + inc c ; ...with a minimum value of 1 (used as a divisor later on) +.ok + +; Multi-hit attacks may or may not have 0 bp. + cp a, TWO_TO_FIVE_ATTACKS_EFFECT + jr z, .skipbp cp a, $1e - jr z, .next3 - cp a, $26 ;OHKO? + jr z, .skipbp + +; Calculate OHKO damage based on remaining HP. + cp a, OHKO_EFFECT jp z, Func_3e016 - ld a, d ;if attack base power zero then do nothing + +; Don't calculate damage for moves that don't do any. + ld a, d ; base power and a ret z -.next3 +.skipbp + xor a - ld hl, $ff95 ;multiplication address - ldi [hl], a ;init to zero + ld hl, H_DIVIDEND + ldi [hl], a ldi [hl], a ld [hl], a - ld a, e - add a ;A = level *2 - jr nc, .noCarry -.carry + +; Multiply level by 2 + ld a, e ; level + add a + jr nc, .nc push af - ld a, 1 ;add carry for level if needed - ld [hl], a ;level high byte [previously zero] + ld a, 1 + ld [hl], a pop af -.noCarry +.nc inc hl - ldi [hl], a ;level low byte - ld a, 5 ;[divisor] = 5 + ldi [hl], a + +; Divide by 5 + ld a, 5 ldd [hl], a push bc ld b, 4 - call Divide ;divide level by 5 + call Divide pop bc - inc [hl] ;+2 [?] + +; Add 2 inc [hl] - inc hl ;8bit multiplier + inc [hl] + + inc hl ; multiplier + +; Multiply by attack base power ld [hl], d - call Multiply ;*multiply by attack base power + call Multiply + +; Multiply by attack stat ld [hl], b - call Multiply ;*multiply by attacker attack stat + call Multiply + +; Divide by defender's defense stat ld [hl], c ld b, 4 - call Divide ;*divide by defender defense stat - ld [hl], $32 + call Divide + +; Divide by 50 + ld [hl], 50 ld b, 4 - call Divide ;divide above result by 50 - ld hl, W_DAMAGE ;[stuff below I never got to, was only interested in stuff above] + call Divide + ld hl, W_DAMAGE ld b, [hl] - ld a, [$FF00+$98] + ld a, [H_QUOTIENT + 3] add b - ld [$FF00+$98], a + ld [H_QUOTIENT + 3], a jr nc, .asm_3dfd0 - ld a, [$FF00+$97] + + ld a, [H_QUOTIENT + 2] inc a - ld [$FF00+$97], a + ld [H_QUOTIENT + 2], a and a jr z, .asm_3e004 + .asm_3dfd0 - ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld a, [H_QUOTIENT] ld b, a - ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) + ld a, [H_QUOTIENT + 1] or a jr nz, .asm_3e004 - ld a, [$FF00+$97] - cp $3 + + ld a, [H_QUOTIENT + 2] + cp 998 / $100 jr c, .asm_3dfe8 - cp $4 + cp 998 / $100 + 1 jr nc, .asm_3e004 - ld a, [$FF00+$98] - cp $e6 + ld a, [H_QUOTIENT + 3] + cp 998 % $100 jr nc, .asm_3e004 + .asm_3dfe8 inc hl - ld a, [$FF00+$98] + ld a, [H_QUOTIENT + 3] ld b, [hl] add b ld [hld], a - ld a, [$FF00+$97] + + ld a, [H_QUOTIENT + 2] ld b, [hl] adc b ld [hl], a jr c, .asm_3e004 + ld a, [hl] - cp $3 + cp 998 / $100 jr c, .asm_3e00a - cp $4 + cp 998 / $100 + 1 jr nc, .asm_3e004 inc hl ld a, [hld] - cp $e6 + cp 998 % $100 jr c, .asm_3e00a + .asm_3e004 - ld a, $3 + ld a, 997 / $100 ld [hli], a - ld a, $e5 + ld a, 997 % $100 ld [hld], a + .asm_3e00a inc hl ld a, [hl] - add $2 + add 2 ld [hld], a - jr nc, .asm_3e012 + jr nc, .done inc [hl] -.asm_3e012 - ld a, $1 +.done + + ld a, 1 and a ret @@ -65271,7 +65308,14 @@ Func_3e016: ; 3e016 (f:6016) dec a ret -INCBIN "baserom.gbc",$3e01e,$3e023 - $3e01e + +UnusedHighCriticalMoves: ; 3e01e (f:601e) + db KARATE_CHOP + db RAZOR_LEAF + db CRABHAMMER + db SLASH + db $FF +; 3e023 ; determines if attack is a critical hit ; azure heights claims "the fastest pokémon (who are,not coincidentally, @@ -65350,6 +65394,7 @@ HighCriticalMoves: ; 3e08e (f:608e) db SLASH db $FF + ; function to determine if Counter hits and if so, how much damage it does HandleCounterMove: ; 3e093 (f:6093) ld a,[H_WHOSETURN] ; whose turn |