ref: d6fbdfb8decf6231d6b43fbfcba63f9ce60308dc
parent: 32a5f21cc7c35b2580ae2c5f3709676dd8ca8405
author: yenatch <[email protected]>
date: Mon Jun 23 08:47:07 EDT 2014
More comments and constants in move effect command code. Also add SUBSTATUS_IN_LOOP for multi-hit moves.
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -75,9 +75,9 @@
ld a, [CurPartyMon]
ld [CurBattleMon], a
inc a
- ld hl, PartyCount
+ ld hl, PartySpecies - 1
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
ld a, [hl]
ld [CurPartySpecies], a
@@ -1463,7 +1463,6 @@
ld b, 1
jr z, .asm_3c9b8
ld b, 5
-
.asm_3c9b8
ld a, [de]
add b
@@ -1479,7 +1478,6 @@
jr z, .asm_3c9d2
ld de, EnemyMonMoves - 1
ld hl, EnemyMonPP
-
.asm_3c9d2
inc de
pop bc
@@ -1491,6 +1489,7 @@
add hl, bc
pop de
pop bc
+
ld a, [$d265]
cp [hl]
jr nz, .asm_3c9f5
@@ -1499,7 +1498,6 @@
ld a, [PlayerSubStatus5]
jr z, .asm_3c9ee
ld a, [EnemySubStatus5]
-
.asm_3c9ee
bit SUBSTATUS_TRANSFORMED, a
jr nz, .asm_3c9f5
@@ -1506,7 +1504,6 @@
ld a, [de]
add b
ld [de], a
-
.asm_3c9f5
callab GetUserItem
ld a, [hl]
@@ -2207,7 +2204,7 @@
.asm_3ce16
ld hl, PlayerSubStatus3
- res 2, [hl]
+ res SUBSTATUS_IN_LOOP, [hl]
xor a
ld hl, EnemyDamageTaken
ld [hli], a
@@ -2287,8 +2284,8 @@
ld a, [PartyCount]
ld b, a
ld hl, PartyMon1
- ld c, $1
- ld d, $0
+ ld c, 1
+ ld d, 0
.asm_3ceb5
push hl
push bc
@@ -2322,9 +2319,10 @@
pop de
dec b
jr nz, .asm_3ceb5
+
ld a, d
- ld e, $0
- ld b, $6
+ ld e, 0
+ ld b, PARTY_LENGTH
.asm_3cee1
srl a
jr nc, .asm_3cee6
@@ -2801,7 +2799,7 @@
ld b, $0
predef FlagPredef
ld hl, EnemySubStatus3
- res 2, [hl]
+ res SUBSTATUS_IN_LOOP, [hl]
xor a
ld [Danger], a
ld hl, PlayerDamageTaken
@@ -3471,7 +3469,7 @@
ld a, b
inc a
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
ld a, [hl]
dec a
@@ -3478,7 +3476,7 @@
ld hl, BaseData + 7 ; type
ld bc, $20
call AddNTimes
- ld de, EnemyMonType1
+ ld de, EnemyMonType
ld bc, 2
ld a, BANK(BaseData)
call FarCopyBytes
@@ -3487,13 +3485,13 @@
call SetPlayerTurn
callab Function347c8
ld a, [$d265]
- cp $b
+ cp 10 + 1 ; 1.0 + 0.1
jr nc, .asm_3d663
ld a, [BattleMonType2]
ld [wPlayerMoveStruct + MOVE_TYPE], a
callab Function347c8
ld a, [$d265]
- cp $b
+ cp 10 + 1 ; 1.0 + 0.1
jr nc, .asm_3d663
pop bc
ret
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -1241,7 +1241,7 @@
.FocusEnergy
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
- bit 2, a
+ bit SUBSTATUS_FOCUS_ENERGY, a
jr z, .CheckCritical
; +1 critical level
@@ -1595,8 +1595,8 @@
call Function347c8
ld a, [$d265]
and a
- ld a, $a
- jr nz, .asm_3484a ; 3483c $c
+ ld a, 10 ; 1.0
+ jr nz, .asm_3484a
call ResetDamage
xor a
ld [TypeModifier], a
@@ -1618,75 +1618,86 @@
ld hl, PlayerUsedMoves
ld a, [hl]
and a
- jr z, .asm_348b0 ; 0x3485b $53
- ld d, $4
- ld e, $0
-.asm_34861
+ jr z, .unknown_moves
+
+ ld d, NUM_MOVES
+ ld e, 0
+.loop
ld a, [hli]
and a
- jr z, .asm_3489f ; 0x34863 $3a
+ jr z, .exit
push hl
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
- jr z, .asm_3489b ; 0x3486e $2b
+ jr z, .next
+
inc hl
call GetMoveByte
- ld hl, EnemyMonType1
+ ld hl, EnemyMonType
call Function347d3
ld a, [$d265]
- cp $b
- jr nc, .asm_34895 ; 0x3487f $14
+ cp 10 + 1 ; 1.0 + 0.1
+ jr nc, .super_effective
and a
- jr z, .asm_3489b ; 0x34882 $17
- cp $a
- jr nc, .asm_34891 ; 0x34886 $9
+ jr z, .next
+ cp 10 ; 1.0
+ jr nc, .neutral
+
+.not_very_effective
ld a, e
- cp $1
- jr nc, .asm_3489b ; 0x3488b $e
- ld e, $1
- jr .asm_3489b ; 0x3488f $a
-.asm_34891
- ld e, $2
- jr .asm_3489b ; 0x34893 $6
-.asm_34895
+ cp 1 ; 0.1
+ jr nc, .next
+ ld e, 1
+ jr .next
+
+.neutral
+ ld e, 2
+ jr .next
+
+.super_effective
call Function34931
pop hl
- jr .asm_348d7 ; 0x34899 $3c
-.asm_3489b
+ jr .done
+
+.next
pop hl
dec d
- jr nz, .asm_34861 ; 0x3489d $c2
-.asm_3489f
+ jr nz, .loop
+
+.exit
ld a, e
- cp $2
- jr z, .asm_348d7 ; 0x348a2 $33
+ cp 2
+ jr z, .done
call Function34939
ld a, e
and a
- jr nz, .asm_348d7 ; 0x348a9 $2c
+ jr nz, .done
call Function34939
- jr .asm_348d7 ; 0x348ae $27
-.asm_348b0
+ jr .done
+
+.unknown_moves
ld a, [BattleMonType1]
ld b, a
ld hl, EnemyMonType1
call Function347d3
ld a, [$d265]
- cp $b
- jr c, .asm_348c4 ; 0x348bf $3
+ cp 10 + 1 ; 1.0 + 0.1
+ jr c, .ok
call Function34931
-.asm_348c4
+.ok
ld a, [BattleMonType2]
cp b
- jr z, .asm_348d7 ; 0x348c8 $d
+ jr z, .ok2
call Function347d3
ld a, [$d265]
- cp $b
- jr c, .asm_348d7 ; 0x348d2 $3
+ cp 10 + 1 ; 1.0 + 0.1
+ jr c, .ok2
call Function34931
-.asm_348d7
+.ok2
+
+.done
call Function348de
pop bc
pop de
@@ -1702,7 +1713,6 @@
ld a, [$d265]
push af
-
.loop
dec b
jr z, .exit
@@ -1722,27 +1732,31 @@
call GetMoveByte
ld hl, BattleMonType1
call Function347d3
+
ld a, [$d265]
+ ; immune
and a
jr z, .loop
+ ; not very effective
inc c
cp 10
jr c, .loop
+ ; neutral
inc c
inc c
inc c
inc c
inc c
-
cp 10
jr z, .loop
+ ; super effective
ld c, 100
jr .loop
-.exit
+.exit
pop af
ld [$d265], a
@@ -1897,18 +1911,18 @@
Function349f4: ; 349f4
ld a, [OTPartyCount]
cp 2
- jr c, .asm_34a26
+ jr c, .only_one
ld d, a
ld e, 0
- ld b, $20
+ ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
ld hl, OTPartyMon1HP
-.asm_34a05
+.loop
ld a, [CurOTMon]
cp e
- jr z, .asm_34a16
+ jr z, .next
push bc
ld b, [hl]
@@ -1916,13 +1930,13 @@
ld a, [hld]
or b
pop bc
- jr z, .asm_34a16
+ jr z, .next
ld a, c
or b
ld c, a
-.asm_34a16
+.next
srl b
push bc
ld bc, PartyMon2 - PartyMon1
@@ -1930,17 +1944,17 @@
pop bc
inc e
dec d
- jr nz, .asm_34a05
+ jr nz, .loop
ld a, c
and a
- jr nz, .asm_34a28
+ jr nz, .more_than_one
-.asm_34a26
+.only_one
scf
ret
-.asm_34a28
+.more_than_one
and a
ret
; 34a2a
@@ -2205,15 +2219,15 @@
Function34b77: ; 34b77
push bc
ld de, OTPartySpecies
- ld b, $20
+ ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
ld hl, OTPartyMon1HP
-.asm_34b82
+.loop
ld a, [de]
inc de
cp $ff
- jr z, .asm_34bac
+ jr z, .done
push hl
push bc
@@ -2231,13 +2245,13 @@
ld a, [hl]
sbc b
pop bc
- jr nc, .asm_34ba1
+ jr nc, .next
ld a, b
or c
ld c, a
-.asm_34ba1
+.next
srl b
pop hl
push bc
@@ -2244,9 +2258,9 @@
ld bc, PartyMon2 - PartyMon1
add hl, bc
pop bc
- jr .asm_34b82
+ jr .loop
-.asm_34bac
+.done
ld a, c
pop bc
and c
@@ -2339,7 +2353,7 @@
call .UnleashedEnergy
ret nz
-; Perfect-accuracy moves
+ ; Perfect-accuracy moves
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
cp EFFECT_ALWAYS_HIT
@@ -2893,9 +2907,9 @@
call GetBattleVarAddr
cp FLY
- jr z, .asm_3504f ; 35032 $1b
+ jr z, .asm_3504f
cp DIG
- jr z, .asm_3504f ; 35036 $17
+ jr z, .asm_3504f
; Move effect:
inc hl
@@ -2929,12 +2943,12 @@
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVar
bit SUBSTATUS_ENDURE, a
- jr z, .asm_35072 ; 35065 $b
+ jr z, .asm_35072
call BattleCommand4b
ld b, $0
- jr nc, .asm_3508b ; 3506c $1d
+ jr nc, .asm_3508b
ld b, $1
- jr .asm_3508b ; 35070 $19
+ jr .asm_3508b
.asm_35072
call GetOpponentItem
@@ -2941,13 +2955,13 @@
ld a, b
cp HELD_FOCUS_BAND
ld b, $0
- jr nz, .asm_3508b ; 3507a $f
+ jr nz, .asm_3508b
call BattleRandom
cp c
- jr nc, .asm_3508b ; 35080 $9
+ jr nc, .asm_3508b
call BattleCommand4b
ld b, $0
- jr nc, .asm_3508b ; 35087 $2
+ jr nc, .asm_3508b
ld b, $2
.asm_3508b
push bc
@@ -2968,7 +2982,7 @@
and a
ret z
dec a
- jr nz, .asm_350ab ; 350a3 $6
+ jr nz, .asm_350ab
ld hl, EnduredText
jp StdBattleTextBox
@@ -3019,23 +3033,24 @@
ld de, DoesntAffectText
ld a, [TypeModifier]
and $7f
- jr z, .asm_35110 ; 0x350ef $1f
+ jr z, .asm_35110
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
cp EFFECT_FUTURE_SIGHT
ld hl, ButItFailedText
ld de, ItFailedText
- jr z, .asm_35110 ; 0x350fe $10
+ jr z, .asm_35110
ld hl, AttackMissedText
ld de, AttackMissed2Text
ld a, [CriticalHit]
cp $ff
- jr nz, .asm_35110 ; 0x3510b $3
+ jr nz, .asm_35110
ld hl, UnaffectedText
.asm_35110
call Function35157
xor a
ld [CriticalHit], a
+
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
cp EFFECT_JUMP_KICK
@@ -3046,17 +3061,15 @@
ld hl, CurDamage
ld a, [hli]
ld b, [hl]
+ rept 3
srl a
rr b
- srl a
- rr b
- srl a
- rr b
+ endr
ld [hl], b
dec hl
ld [hli], a
or b
- jr nz, .asm_3513e ; 0x3513a $2
+ jr nz, .asm_3513e
inc a
ld [hl], a
.asm_3513e
@@ -3106,7 +3119,7 @@
dec a
add a
- ld hl, .ptrs
+ ld hl, .texts
ld b, 0
ld c, a
add hl, bc
@@ -3122,9 +3135,9 @@
ld c, 20
jp DelayFrames
-.ptrs
- dw CriticalHitText ; 'critical hit'
- dw OneHitKOText ; 'one-hit ko'
+.texts
+ dw CriticalHitText
+ dw OneHitKOText
; 35197
@@ -3134,10 +3147,9 @@
ld hl, PlayerRolloutCount
ld a, [hBattleTurn]
and a
- jr z, .asm_351a2
+ jr z, .ok
ld hl, EnemyRolloutCount
-
-.asm_351a2
+.ok
xor a
ld [hl], a
ret
@@ -3149,7 +3161,7 @@
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarAddr
- bit 2, a
+ bit SUBSTATUS_IN_LOOP, a
ret nz
; fallthrough
@@ -3163,9 +3175,9 @@
and $7f
cp 10 ; 1.0
ret z
- ld hl, SuperEffectiveText ; 'super-effective'
+ ld hl, SuperEffectiveText
jr nc, .print
- ld hl, NotVeryEffectiveText ; 'not very effective'
+ ld hl, NotVeryEffectiveText
jp StdBattleTextBox
; 351c0
@@ -3304,14 +3316,14 @@
ld a, [hBattleTurn]
and a
ld a, [$c72b]
- jr z, .asm_35290 ; 3528b $3
+ jr z, .asm_35290
ld a, [$c72c]
.asm_35290
and a
- jr z, .asm_3529a ; 35291 $7
+ jr z, .asm_3529a
dec a
add hl, bc
- jr nc, .asm_35290 ; 35295 $f9
+ jr nc, .asm_35290
ld hl, $ffff
.asm_3529a
ld a, h
@@ -3440,11 +3452,11 @@
call GetDamageStatsCritical
jr c, .lightball
- ld hl, $c6c9
+ ld hl, EnemyStats + SP_DEFENSE * 2
ld a, [hli]
ld b, a
ld c, [hl]
- ld hl, $c6bc
+ ld hl, PlayerStats + SP_ATTACK * 2
.lightball
; Note: Returns player special attack at hl in hl.
@@ -3730,7 +3742,7 @@
and a
jp nz, .asm_354ef
ld a, [PlayerSubStatus3]
- bit 2, a
+ bit SUBSTATUS_IN_LOOP, a
jr nz, .asm_35482
ld c, 20
call DelayFrames
@@ -3796,7 +3808,7 @@
.asm_354ef
ld a, [EnemySubStatus3]
- bit 2, a
+ bit SUBSTATUS_IN_LOOP, a
jr nz, .asm_35502
xor a
@@ -7423,9 +7435,9 @@
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarAddr
- bit 2, [hl]
+ bit SUBSTATUS_IN_LOOP, [hl]
jp nz, .asm_36a43
- set 2, [hl]
+ set SUBSTATUS_IN_LOOP, [hl]
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVarAddr
ld a, [hl]
@@ -7470,7 +7482,7 @@
.asm_36a1e
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarAddr
- res 2, [hl]
+ res SUBSTATUS_IN_LOOP, [hl]
call BattleCommanda8
jp EndMoveEffect
.asm_36a2b
@@ -7499,7 +7511,7 @@
.asm_36a48
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarAddr
- res 2, [hl]
+ res SUBSTATUS_IN_LOOP, [hl]
ld hl, PlayerHitTimesText
ld a, [hBattleTurn]
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -101,6 +101,7 @@
SUBSTATUS_UNDERGROUND EQU 5
SUBSTATUS_CHARGED EQU 4
SUBSTATUS_FLINCHED EQU 3
+SUBSTATUS_IN_LOOP EQU 2
SUBSTATUS_RAMPAGE EQU 1
SUBSTATUS_BIDE EQU 0