battle/ai/switch.asm and more battle/effect_commands.asm

This commit is contained in:
PikalaxALT
2015-11-07 08:05:57 -05:00
parent 929d0aa081
commit e044580669
12 changed files with 755 additions and 751 deletions

View File

@@ -1600,12 +1600,14 @@ CheckTypeMatchup: ; 347d3
; 34833
BattleCommanda3: ; 34833
BattleCommand_ResetTypeMatchup: ; 34833
; Reset the type matchup multiplier to 1.0, if the type matchup is not 0.
; If there is immunity in play, the move automatically misses.
call BattleCheckTypeMatchup
ld a, [wTypeMatchup]
and a
ld a, 10 ; 1.0
jr nz, .skip
jr nz, .reset
call ResetDamage
xor a
ld [TypeModifier], a
@@ -1613,673 +1615,12 @@ BattleCommanda3: ; 34833
ld [AttackMissed], a
ret
.skip
.reset
ld [wTypeMatchup], a
ret
; 3484e
Function3484e: ; 3484e
push hl
push de
push bc
ld a, 10
ld [wc716], a
ld hl, PlayerUsedMoves
ld a, [hl]
and a
jr z, .unknown_moves
ld d, NUM_MOVES
ld e, 0
.loop
ld a, [hli]
and a
jr z, .exit
push hl
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
jr z, .next
inc hl
call GetMoveByte
ld hl, EnemyMonType
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp 10 + 1 ; 1.0 + 0.1
jr nc, .super_effective
and a
jr z, .next
cp 10 ; 1.0
jr nc, .neutral
.not_very_effective
ld a, e
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 .done
.next
pop hl
dec d
jr nz, .loop
.exit
ld a, e
cp 2
jr z, .done
call Function34939
ld a, e
and a
jr nz, .done
call Function34939
jr .done
.unknown_moves
ld a, [BattleMonType1]
ld b, a
ld hl, EnemyMonType1
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp 10 + 1 ; 1.0 + 0.1
jr c, .ok
call Function34931
.ok
ld a, [BattleMonType2]
cp b
jr z, .ok2
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp 10 + 1 ; 1.0 + 0.1
jr c, .ok2
call Function34931
.ok2
.done
call Function348de
pop bc
pop de
pop hl
ret
; 348de
Function348de: ; 348de
ld de, EnemyMonMoves
ld b, NUM_MOVES + 1
ld c, 0
ld a, [wTypeMatchup]
push af
.loop
dec b
jr z, .exit
ld a, [de]
and a
jr z, .exit
inc de
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
jr z, .loop
inc hl
call GetMoveByte
ld hl, BattleMonType1
call CheckTypeMatchup
ld a, [wTypeMatchup]
; immune
and a
jr z, .loop
; not very effective
inc c
cp 10
jr c, .loop
; neutral
rept 5
inc c
endr
cp 10
jr z, .loop
; super effective
ld c, 100
jr .loop
.exit
pop af
ld [wTypeMatchup], a
ld a, c
and a
jr z, .doubledown ; double down
cp 5
jr c, Function34931 ; down
cp 100
ret c
jr Function34939 ; up
.doubledown
call Function34931
; fallthrough
; 34931
Function34931: ; 34931
ld a, [wc716]
dec a
ld [wc716], a
ret
; 34939
Function34939: ; 34939
ld a, [wc716]
inc a
ld [wc716], a
ret
; 34941
Function34941: ; 34941
xor a
ld [wc717], a
call CountEnemyAliveMons
ret c
ld a, [EnemySubStatus1]
bit SUBSTATUS_PERISH, a
jr z, .no_perish
ld a, [EnemyPerishCount]
cp 1
jr nz, .no_perish
; Perish count is 1
call CountEnemyAliveMons
call Function34b77
call Function34b20
call Function34a85
ld a, e
cp 2
jr nz, .asm_34971
ld a, [wc716]
add $30
ld [wc717], a
ret
.asm_34971
call CountEnemyAliveMons
sla c
sla c
ld b, $ff
.asm_3497a
inc b
sla c
jr nc, .asm_3497a
ld a, b
add $30
ld [wc717], a
ret
.no_perish
call Function3484e
ld a, [wc716]
cp 11
ret nc
ld a, [LastEnemyCounterMove]
and a
jr z, .asm_349d2
call Function34a2a
ld a, [wc716]
and a
jr z, .asm_349d2
ld c, a
call Function34aa7
ld a, [wc716]
cp $ff
ret z
ld b, a
ld a, e
cp 2
jr z, .asm_349be
call Function3484e
ld a, [wc716]
cp 10
ret nc
ld a, b
add $10
ld [wc717], a
ret
.asm_349be
ld c, $10
call Function3484e
ld a, [wc716]
cp 10
jr nc, .asm_349cc
ld c, $20
.asm_349cc
ld a, b
add c
ld [wc717], a
ret
.asm_349d2
call Function3484e
ld a, [wc716]
cp 10
ret nc
call CountEnemyAliveMons
call Function34b77
call Function34b20
call Function34a85
ld a, e
cp $2
ret nz
ld a, [wc716]
add $10
ld [wc717], a
ret
; 349f4
CountEnemyAliveMons: ; 349f4
ld a, [OTPartyCount]
cp 2
jr c, .only_one
ld d, a
ld e, 0
ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
ld hl, OTPartyMon1HP
.loop
ld a, [CurOTMon]
cp e
jr z, .next
push bc
ld b, [hl]
inc hl
ld a, [hld]
or b
pop bc
jr z, .next
ld a, c
or b
ld c, a
.next
srl b
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
inc e
dec d
jr nz, .loop
ld a, c
and a
jr nz, .more_than_one
.only_one
scf
ret
.more_than_one
and a
ret
; 34a2a
Function34a2a: ; 34a2a
ld hl, OTPartyMon1
ld a, [OTPartyCount]
ld b, a
ld c, 1 << (PARTY_LENGTH - 1)
ld d, 0
xor a
ld [wc716], a
.asm_34a39
ld a, [CurOTMon]
cp d
push hl
jr z, .asm_34a77
push hl
push bc
ld bc, MON_HP
add hl, bc
pop bc
ld a, [hli]
or [hl]
pop hl
jr z, .asm_34a77
ld a, [hl]
ld [CurSpecies], a
call GetBaseData
ld a, [LastEnemyCounterMove]
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
jr z, .asm_34a77
inc hl
call GetMoveByte
ld hl, BaseType
call CheckTypeMatchup
ld a, [wTypeMatchup]
and a
jr nz, .asm_34a77
ld a, [wc716]
or c
ld [wc716], a
.asm_34a77
pop hl
dec b
ret z
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
inc d
srl c
jr .asm_34a39
; 34a85
Function34a85: ; 34a85
push bc
ld a, [OTPartyCount]
ld e, a
ld hl, OTPartyMon1HP
ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
.asm_34a91
ld a, [hli]
or [hl]
jr z, .asm_34a98
ld a, b
or c
ld c, a
.asm_34a98
srl b
push bc
ld bc, PartyMon2HP - (PartyMon1HP + 1)
add hl, bc
pop bc
dec e
jr nz, .asm_34a91
ld a, c
pop bc
and c
ld c, a
; fallthrough
; 34aa7
Function34aa7: ; 34aa7
ld a, $ff
ld [wc716], a
ld hl, OTPartyMon1Moves
ld b, 1 << (PARTY_LENGTH - 1)
ld d, 0
ld e, 0
.asm_34ab5
ld a, b
and c
jr z, .asm_34b00
push hl
push bc
ld b, NUM_MOVES
ld c, 0
.asm_34abf
ld a, [hli]
and a
push hl
jr z, .asm_34aef
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
jr z, .asm_34ae9
inc hl
call GetMoveByte
ld hl, BattleMonType1
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp 10
jr c, .asm_34ae9
ld e, 1
cp 11
jr c, .asm_34ae9
ld e, 2
jr .asm_34aef
.asm_34ae9
pop hl
dec b
jr nz, .asm_34abf
jr .asm_34af0
.asm_34aef
pop hl
.asm_34af0
ld a, e
pop bc
pop hl
cp $2
jr z, .asm_34b0e
cp $1
jr nz, .asm_34b00
ld a, d
or b
ld d, a
jr .asm_34b00
.asm_34b00
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
srl b
jr nc, .asm_34ab5
ld a, d
ld b, a
and a
ret z
.asm_34b0e
push bc
sla b
sla b
ld c, $ff
.asm_34b15
inc c
sla b
jr nc, .asm_34b15
ld a, c
ld [wc716], a
pop bc
ret
; 34b20
Function34b20: ; 34b20
push bc
ld hl, OTPartySpecies
ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
.asm_34b28
ld a, [hli]
cp $ff
jr z, .asm_34b72
push hl
ld [CurSpecies], a
call GetBaseData
ld a, [LastEnemyCounterMove]
and a
jr z, .asm_34b4a
dec a
ld hl, Moves + MOVE_POWER
call GetMoveAttr
and a
jr z, .asm_34b4a
inc hl
call GetMoveByte
jr .asm_34b5d
.asm_34b4a
ld a, [BattleMonType1]
ld hl, BaseType
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp $b
jr nc, .asm_34b6d
ld a, [BattleMonType2]
.asm_34b5d
ld hl, BaseType
call CheckTypeMatchup
ld a, [wTypeMatchup]
cp $b
jr nc, .asm_34b6d
ld a, b
or c
ld c, a
.asm_34b6d
srl b
pop hl
jr .asm_34b28
.asm_34b72
ld a, c
pop bc
and c
ld c, a
ret
; 34b77
Function34b77: ; 34b77
push bc
ld de, OTPartySpecies
ld b, 1 << (PARTY_LENGTH - 1)
ld c, 0
ld hl, OTPartyMon1HP
.loop
ld a, [de]
inc de
cp $ff
jr z, .done
push hl
push bc
ld b, [hl]
inc hl
ld c, [hl]
rept 2
inc hl
endr
srl c
rl b
srl c
rl b
ld a, [hld]
cp c
ld a, [hl]
sbc b
pop bc
jr nc, .next
ld a, b
or c
ld c, a
.next
srl b
pop hl
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
jr .loop
.done
ld a, c
pop bc
and c
ld c, a
ret
; 34bb1
INCLUDE "battle/ai/switch.asm"
TypeMatchup: ; 34bb1
INCLUDE "battle/type_matchup.asm"
@@ -2779,11 +2120,11 @@ BattleCommand_HitTargetNoSub: ; 34f60
and a
ld de, PlayerRolloutCount
ld a, 1
jr z, .asm_34f76
jr z, .got_rollout_count
ld de, EnemyRolloutCount
ld a, 4
.asm_34f76
.got_rollout_count
ld [wcfca], a
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
@@ -3234,18 +2575,18 @@ BattleCommand_CheckDestinyBond: ; 351c0
ld a, [hld]
ld [Buffer2], a
ld a, [hl]
ld [wd1ec], a
ld [Buffer3], a
xor a
ld [hld], a
ld a, [hl]
ld [wd1ed], a
ld [Buffer4], a
xor a
ld [hl], a
ld [wd1ee], a
ld [wd1ef], a
ld [Buffer5], a
ld [Buffer6], a
ld h, b
ld l, c
predef Functionc6e0
predef AnimateHPBar
call RefreshBattleHuds
call BattleCommand_SwitchTurn
@@ -4449,7 +3790,7 @@ BattleCommand_Counter: ; 35813
cp EFFECT_COUNTER
ret z
call BattleCommanda3
call BattleCommand_ResetTypeMatchup
ld a, [wTypeMatchup]
and a
ret z
@@ -4633,12 +3974,12 @@ BattleCommand_PainSplit: ; 35926
ld a, $1
ld [wd10a], a
hlcoord 10, 9
predef Functionc6e0
predef AnimateHPBar
ld hl, EnemyMonHP
ld a, [hli]
ld [wd1ed], a
ld [Buffer4], a
ld a, [hli]
ld [wd1ec], a
ld [Buffer3], a
ld a, [hli]
ld [Buffer2], a
ld a, [hl]
@@ -4648,7 +3989,7 @@ BattleCommand_PainSplit: ; 35926
ld [wd10a], a
call ResetDamage
hlcoord 2, 2
predef Functionc6e0
predef AnimateHPBar
callba Function178000
ld hl, SharedPainText
@@ -4661,9 +4002,9 @@ BattleCommand_PainSplit: ; 35926
ld [Buffer2], a
ld a, [hld]
ld b, a
ld [wd1ec], a
ld [Buffer3], a
ld a, [hl]
ld [wd1ed], a
ld [Buffer4], a
rept 2
dec de
endr
@@ -4708,10 +4049,10 @@ Function359ac: ; 359ac
.asm_359c2
ld a, c
ld [hld], a
ld [wd1ee], a
ld [Buffer5], a
ld a, b
ld [hli], a
ld [wd1ef], a
ld [Buffer6], a
ret
; 359cd
@@ -5331,20 +4672,20 @@ Function35d1c: ; 35d1c
ld a, [hld]
ld b, a
ld a, [EnemyMonHP + 1]
ld [wd1ec], a
ld [Buffer3], a
sub b
ld [EnemyMonHP + 1], a
ld a, [hl]
ld b, a
ld a, [EnemyMonHP]
ld [wd1ec + 1], a
ld [Buffer4], a
sbc b
ld [EnemyMonHP], a
jr nc, .asm_35d59
ld a, [wd1ed]
ld a, [Buffer4]
ld [hli], a
ld a, [wd1ec]
ld a, [Buffer3]
ld [hl], a
xor a
@@ -5360,13 +4701,13 @@ Function35d1c: ; 35d1c
ld [Buffer1], a
ld hl, EnemyMonHP
ld a, [hli]
ld [wd1ef], a
ld [Buffer6], a
ld a, [hl]
ld [wd1ee], a
ld [Buffer5], a
hlcoord 2, 2
xor a
ld [wd10a], a
predef Functionc6e0
predef AnimateHPBar
.asm_35d7b
jp RefreshBattleHuds
; 35d7e
@@ -5391,28 +4732,28 @@ Function35d7e: ; 35d7e
ld a, [hld]
ld b, a
ld a, [BattleMonHP + 1]
ld [wd1ec], a
ld [Buffer3], a
sub b
ld [BattleMonHP + 1], a
ld [wd1ee], a
ld [Buffer5], a
ld b, [hl]
ld a, [BattleMonHP]
ld [wd1ec + 1], a
ld [Buffer4], a
sbc b
ld [BattleMonHP], a
ld [wd1ee + 1], a
ld [Buffer6], a
jr nc, .asm_35dc5
ld a, [wd1ec + 1]
ld a, [Buffer4]
ld [hli], a
ld a, [wd1ec]
ld a, [Buffer3]
ld [hl], a
xor a
ld hl, BattleMonHP
ld [hli], a
ld [hl], a
ld hl, wd1ee
ld hl, Buffer5
ld [hli], a
ld [hl], a
@@ -5425,7 +4766,7 @@ Function35d7e: ; 35d7e
hlcoord 10, 9
ld a, $1
ld [wd10a], a
predef Functionc6e0
predef AnimateHPBar
.asm_35ddd
jp RefreshBattleHuds
; 35de0
@@ -5826,7 +5167,7 @@ SapHealth: ; 36011
ld hl, EnemyMonHP
ld de, EnemyMonMaxHP
.battlemonhp
ld bc, wd1ed
ld bc, Buffer4
ld a, [hli]
ld [bc], a
ld a, [hl]
@@ -5843,12 +5184,12 @@ SapHealth: ; 36011
ld b, [hl]
add b
ld [hld], a
ld [wd1ee], a
ld [Buffer5], a
ld a, [hDividend]
ld b, [hl]
adc b
ld [hli], a
ld [wd1ef], a
ld [Buffer6], a
jr c, .okay2 ; 0x36056 $c
ld a, [hld]
ld b, a
@@ -5864,11 +5205,11 @@ SapHealth: ; 36011
.okay2
ld a, [de]
ld [hld], a
ld [wd1ee], a
ld [Buffer5], a
dec de
ld a, [de]
ld [hli], a
ld [wd1ef], a
ld [Buffer6], a
inc de
.okay3
ld a, [hBattleTurn]
@@ -5880,7 +5221,7 @@ SapHealth: ; 36011
xor a
.hp_bar
ld [wd10a], a
predef Functionc6e0
predef AnimateHPBar
call RefreshBattleHuds
jp UpdateBattleMonInParty
; 3608c
@@ -8019,20 +7360,20 @@ rept 2
dec hl
endr
ld a, [hl]
ld [wd1ec], a
ld [Buffer3], a
sub c
ld [hld], a
ld [wd1ee], a
ld [Buffer5], a
ld a, [hl]
ld [wd1ed], a
ld [Buffer4], a
sbc b
ld [hl], a
ld [wd1ef], a
ld [Buffer6], a
jr nc, .asm_36cfe
xor a
ld [hli], a
ld [hl], a
ld hl, wd1ee
ld hl, Buffer5
ld [hli], a
ld [hl], a
.asm_36cfe
@@ -8045,7 +7386,7 @@ endr
xor a
.asm_36d0c
ld [wd10a], a
predef Functionc6e0
predef AnimateHPBar
call RefreshBattleHuds
ld hl, RecoilText
jp StdBattleTextBox
@@ -10097,7 +9438,7 @@ BattleCommand_MirrorCoat: ; 37c95
cp EFFECT_MIRROR_COAT
ret z
call BattleCommanda3
call BattleCommand_ResetTypeMatchup
ld a, [wTypeMatchup]
and a
ret z