ref: 494f4c13fe2a45d0569bde2fc06e1bdf3fbfc857
parent: 8f55647441707de49e472d9f75a3939967d172ad
author: yenatch <[email protected]>
date: Fri Apr 19 22:53:08 EDT 2013
damagecalc is actually damagestats; itemmultiplier is actually damagecalc
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -3416,7 +3416,7 @@
BattleCommand06: ; 352dc
-; damagecalc
+; damagestats
ld a, [hBattleTurn]
and a
@@ -3427,64 +3427,87 @@
PlayerAttackDamage: ; 352e2
+; Return move power d, player level e, enemy defense c and player attack b.
call ResetDamage
+
ld hl, PlayerMovePower
ld a, [hli]
and a
ld d, a
ret z
+
ld a, [hl]
- cp $14
- jr nc, .asm_35315 ; 352ef $24
+ cp FIRE
+ jr nc, .special
+
+
+; Physical
ld hl, EnemyMonDef
ld a, [hli]
ld b, a
ld c, [hl]
+
+; Reflect
ld a, [$c700]
bit 4, a
- jr z, .asm_35302 ; 352fc $4
+ jr z, .physicalcrit
sla c
rl b
-.asm_35302
+
+.physicalcrit
ld hl, BattleMonAtk
call GetDamageStatsCritical
- jr c, .asm_3533c ; 35308 $32
+ jr c, .thickclub
+
ld hl, $c6c3
ld a, [hli]
ld b, a
ld c, [hl]
ld hl, $c6b6
- jr .asm_3533c ; 35313 $27
-.asm_35315
+ jr .thickclub
+
+
+.special
ld hl, EnemyMonSpclDef
ld a, [hli]
ld b, a
ld c, [hl]
+
+; Light Screen
ld a, [$c700]
bit 3, a
- jr z, .asm_35326 ; 35320 $4
+ jr z, .specialcrit
sla c
rl b
-.asm_35326
+
+.specialcrit
ld hl, BattleMonSpclAtk
call GetDamageStatsCritical
- jr c, .asm_35337 ; 3532c $9
+ jr c, .lightball
+
ld hl, $c6c9
ld a, [hli]
ld b, a
ld c, [hl]
ld hl, $c6bc
-.asm_35337
+
+.lightball
+; Note: Returns player special attack at hl in hl.
call LightBallBoost
- jr .asm_3533f ; 3533a $3
-.asm_3533c
+ jr .done
+
+.thickclub
+; Note: Returns player attack at hl in hl.
call ThickClubBoost
-.asm_3533f
+
+.done
call Function0x3534d
+
ld a, [BattleMonLevel]
ld e, a
call DittoMetalPowder
+
ld a, 1
and a
ret
@@ -3492,34 +3515,44 @@
Function0x3534d: ; 3534d
+; Truncate 16-bit values hl and bc to 8-bit values b and c respectively.
+; b = hl, c = bc
+
ld a, h
or b
- jr z, .asm_3536b ; 0x3534f $1a
+ jr z, .asm_3536b
+
srl b
rr c
srl b
rr c
+
ld a, c
or b
- jr nz, .asm_3535e ; 0x3535b $1
+ jr nz, .asm_3535e
inc c
+
.asm_3535e
srl h
rr l
srl h
rr l
+
ld a, l
or h
- jr nz, .asm_3536b ; 0x35368 $1
+ jr nz, .asm_3536b
inc l
+
.asm_3536b
ld a, [InLinkBattle]
- cp $3
- jr z, .asm_35376 ; 0x35370 $4
+ cp 3
+ jr z, .done
+
ld a, h
or b
jr nz, Function0x3534d
-.asm_35376
+
+.done
ld b, l
ret
; 35378
@@ -3679,14 +3712,14 @@
; Reflect
ld a, [PlayerScreens]
bit 4, a
- jr z, .asm_35416
+ jr z, .physicalcrit
sla c
rl b
-.asm_35416
+.physicalcrit
ld hl, EnemyMonAtk
call GetDamageStatsCritical
- jr c, .asm_35450
+ jr c, .thickclub
ld hl, $c6b8
ld a, [hli]
@@ -3693,7 +3726,7 @@
ld b, a
ld c, [hl]
ld hl, $c6c1
- jr .asm_35450
+ jr .thickclub
.Special
@@ -3705,14 +3738,14 @@
; Light Screen
ld a, [PlayerScreens]
bit 3, a
- jr z, .asm_3543a
+ jr z, .specialcrit
sla c
rl b
-.asm_3543a
+.specialcrit
ld hl, EnemyMonSpclAtk
call GetDamageStatsCritical
- jr c, .asm_3544b
+ jr c, .lightball
ld hl, $c6be
ld a, [hli]
ld b, a
@@ -3719,18 +3752,20 @@
ld c, [hl]
ld hl, $c6c7
-.asm_3544b
+.lightball
call LightBallBoost
- jr .asm_35453
+ jr .done
-.asm_35450
+.thickclub
call ThickClubBoost
-.asm_35453
+.done
call Function0x3534d
+
ld a, [EnemyMonLevel]
ld e, a
call DittoMetalPowder
+
ld a, 1
and a
ret
@@ -3997,167 +4032,237 @@
BattleCommand62: ; 35612
-; itemmultiplier
+; damagecalc
+; Return a damage value for move power d, player level e, enemy defense c and player attack b.
+
+; Return 1 if successful, else 0.
+
ld a, BATTLE_VARS_MOVE_EFFECT
call CleanGetBattleVarPair
- cp $7
- jr nz, .asm_35620 ; 35619 $5
+
+; Selfdestruct and Explosion halve defense.
+ cp $7 ; selfdestruct / explosion
+ jr nz, .asm_35620
+
srl c
- jr nz, .asm_35620 ; $3561d $1
+ jr nz, .asm_35620
inc c
+
.asm_35620
- cp $1d
- jr z, .asm_3562b ; 35622 $7
- cp $1e
- jr z, .asm_3562b ; 35626 $3
+
+; Variable-hit moves and Conversion can have a power of 0.
+ cp $1d ; multihit
+ jr z, .asm_3562b
+
+ cp $1e ; conversion
+ jr z, .asm_3562b
+
+; No damage if move power is 0.
ld a, d
and a
ret z
+
.asm_3562b
+; Minimum defense value is 1.
ld a, c
and a
- jr nz, .asm_35631 ; 3562d $2
- ld c, $1
+ jr nz, .asm_35631
+ ld c, 1
.asm_35631
+
+
xor a
- ld hl, $ffb3
+ ld hl, hDividend
ld [hli], a
ld [hli], a
ld [hl], a
+
+; Level * 2
ld a, e
add a
- jr nc, .asm_3563e ; 3563a $2
+ jr nc, .asm_3563e
ld [hl], $1
.asm_3563e
inc hl
ld [hli], a
- ld a, $5
+
+; / 5
+ ld a, 5
ld [hld], a
push bc
ld b, $4
- call $3124
+ call Divide
pop bc
+
+; + 2
inc [hl]
inc [hl]
+
+; * bp
inc hl
ld [hl], d
- call $3119
+ call Multiply
+
+; * Attack
ld [hl], b
- call $3119
+ call Multiply
+
+; / Defense
ld [hl], c
ld b, $4
- call $3124
- ld [hl], $32
+ call Divide
+
+; / 50
+ ld [hl], 50
ld b, $4
- call $3124
+ call Divide
+
+
+; Item boosts
call GetUserItem
+
ld a, b
and a
- jr z, .asm_3568f ; 35667 $26
+ jr z, .DoneItem
+
ld hl, TypeBoostItems
-.asm_3566c
+
+.NextItem
ld a, [hli]
cp $ff
- jr z, .asm_3568f ; 3566f $1e
+ jr z, .DoneItem
+
+; Item effect
cp b
ld a, [hli]
- jr nz, .asm_3566c ; 35673 $f7
+ jr nz, .NextItem
+
+; Type
ld b, a
ld a, BATTLE_VARS_MOVE_TYPE
call CleanGetBattleVarPair
cp b
- jr nz, .asm_3568f ; 3567c $11
+ jr nz, .DoneItem
+
+; * 100 + item effect amount
ld a, c
- add $64
- ld [$ffb7], a
- call $3119
- ld a, $64
- ld [$ffb7], a
- ld b, $4
- call $3124
-.asm_3568f
- call Function0x356eb
+ add 100
+ ld [hMultiplier], a
+ call Multiply
+
+; / 100
+ ld a, 100
+ ld [hDivisor], a
+ ld b, 4
+ call Divide
+.DoneItem
+
+; Critical hits
+ call .CriticalMultiplier
+
+
+; Update CurDamage (capped at 997).
ld hl, CurDamage
ld b, [hl]
ld a, [$ffb6]
add b
ld [$ffb6], a
- jr nc, .asm_356a5 ; 3569b $8
+ jr nc, .asm_356a5
+
ld a, [$ffb5]
inc a
ld [$ffb5], a
and a
- jr z, .asm_356d9 ; 356a3 $34
+ jr z, .Cap
+
.asm_356a5
ld a, [$ffb3]
ld b, a
ld a, [$ffb4]
or a
- jr nz, .asm_356d9 ; 356ab $2c
+ jr nz, .Cap
+
ld a, [$ffb5]
- cp $3
- jr c, .asm_356bd ; 356b1 $a
- cp $4
- jr nc, .asm_356d9 ; 356b5 $22
+ cp 998 / $100
+ jr c, .asm_356bd
+
+ cp 998 / $100 + 1
+ jr nc, .Cap
+
ld a, [$ffb6]
- cp $e6
- jr nc, .asm_356d9 ; 356bb $1c
+ cp 998 % $100
+ jr nc, .Cap
+
.asm_356bd
inc hl
+
ld a, [$ffb6]
ld b, [hl]
add b
ld [hld], a
+
ld a, [$ffb5]
ld b, [hl]
adc b
ld [hl], a
- jr c, .asm_356d9 ; 356c8 $f
+ jr c, .Cap
+
ld a, [hl]
- cp $3
- jr c, .asm_356df ; 356cd $10
- cp $4
- jr nc, .asm_356d9 ; 356d1 $6
+ cp 998 / $100
+ jr c, .asm_356df
+
+ cp 998 / $100 + 1
+ jr nc, .Cap
+
inc hl
ld a, [hld]
- cp $e6
- jr c, .asm_356df ; 356d7 $6
-.asm_356d9
- ld a, $3
+ cp 998 % $100
+ jr c, .asm_356df
+
+.Cap
+ ld a, 997 / $100
ld [hli], a
- ld a, $e5
+ ld a, 997 % $100
ld [hld], a
+
+
.asm_356df
+; Minimum neutral damage is 2 (bringing the cap to 999).
inc hl
ld a, [hl]
- add $2
+ add 2
ld [hld], a
- jr nc, .asm_356e7 ; 356e4 $1
+ jr nc, .asm_356e7
inc [hl]
.asm_356e7
- ld a, $1
+
+ ld a, 1
and a
ret
-; 356eb
-Function0x356eb: ; 356eb
+.CriticalMultiplier
ld a, [CriticalHit]
and a
ret z
+; x2
ld a, [$ffb6]
add a
ld [$ffb6], a
+
ld a, [$ffb5]
rl a
ld [$ffb5], a
+
+; Cap at $ffff.
ret nc
ld a, $ff
ld [$ffb5], a
ld [$ffb6], a
+
ret
; 35703
--- a/battle/moves/move_effects.asm
+++ b/battle/moves/move_effects.asm
@@ -38,8 +38,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -76,8 +76,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -101,8 +101,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -126,8 +126,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -151,8 +151,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -180,8 +180,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -202,8 +202,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -223,8 +223,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -627,8 +627,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -652,8 +652,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -679,8 +679,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -701,8 +701,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -726,8 +726,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -750,8 +750,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -772,8 +772,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -795,8 +795,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -818,8 +818,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -841,8 +841,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -862,8 +862,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -919,8 +919,8 @@
usedmovetext
checkhit
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
clearmissdamage
@@ -961,8 +961,8 @@
effect0x0a
checkhit
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
clearmissdamage
@@ -989,8 +989,8 @@
checkhit
effectchance
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
clearmissdamage
@@ -1020,8 +1020,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1063,8 +1063,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1115,8 +1115,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1163,8 +1163,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1211,8 +1211,8 @@
charge
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1240,8 +1240,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1260,8 +1260,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
checkhit
ragedamage
@@ -1322,8 +1322,8 @@
charge
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1345,8 +1345,8 @@
charge
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1371,8 +1371,8 @@
doturn
checkhit
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
clearmissdamage
@@ -1458,8 +1458,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1534,8 +1534,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
falseswipe
@@ -1565,8 +1565,8 @@
effect0x0a
checkhit
critical
+ damagestats
damagecalc
- itemmultiplier
triplekick
stab
damagevariation
@@ -1590,8 +1590,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1627,8 +1627,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1701,8 +1701,8 @@
doturn
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
checkhit
rolloutpower
@@ -1740,8 +1740,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
checkhit
furycutter
@@ -1769,9 +1769,9 @@
usedmovetext
doturn
critical
- damagecalc
+ damagestats
happinesspower
- itemmultiplier
+ damagecalc
stab
damagevariation
checkhit
@@ -1791,9 +1791,9 @@
doturn
checkhit
critical
- damagecalc
+ damagestats
present
- itemmultiplier
+ damagecalc
stab
damagevariation
clearmissdamage
@@ -1811,9 +1811,9 @@
usedmovetext
doturn
critical
- damagecalc
+ damagestats
frustrationpower
- itemmultiplier
+ damagecalc
stab
damagevariation
checkhit
@@ -1839,8 +1839,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1861,9 +1861,9 @@
usedmovetext
doturn
critical
- damagecalc
+ damagestats
getmagnitude
- itemmultiplier
+ damagecalc
stab
damagevariation
checkhit
@@ -1890,8 +1890,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
pursuit
@@ -1911,8 +1911,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -1954,7 +1954,7 @@
doturn
critical
hiddenpower
- itemmultiplier
+ damagecalc
stab
damagevariation
checkhit
@@ -2026,8 +2026,8 @@
charge
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -2049,8 +2049,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
doubleflyingdamage
@@ -2071,8 +2071,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
doubleundergrounddamage
@@ -2092,8 +2092,8 @@
checkobedience
usedmovetext
doturn
+ damagestats
damagecalc
- itemmultiplier
futuresight
damagevariation
checkhit
@@ -2109,8 +2109,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
doubleflyingdamage
@@ -2129,8 +2129,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
doubleminimizedamage
@@ -2154,8 +2154,8 @@
charge
usedmovetext
critical
+ damagestats
damagecalc
- itemmultiplier
stab
damagevariation
checkhit
@@ -2174,8 +2174,8 @@
usedmovetext
doturn
critical
+ damagestats
damagecalc
- itemmultiplier
thunderaccuracy
checkhit
effectchance
@@ -2208,7 +2208,7 @@
checkhit
critical
beatup
- itemmultiplier
+ damagecalc
damagevariation
clearmissdamage
effect0x0b
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -2946,7 +2946,7 @@
0x3: ['usedmovetext'],
0x4: ['doturn'],
0x5: ['critical'],
- 0x6: ['damagecalc'],
+ 0x6: ['damagestats'],
0x7: ['stab'],
0x8: ['damagevariation'],
0x9: ['checkhit'],
@@ -3038,7 +3038,7 @@
0x5f: ['attract'],
0x60: ['happinesspower'],
0x61: ['present'],
- 0x62: ['itemmultiplier'],
+ 0x62: ['damagecalc'],
0x63: ['frustrationpower'],
0x64: ['safeguard'],
0x65: ['checksafeguard'],