summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElectroDeoxys <ElectroDeoxys@gmail.com>2019-09-20 00:08:55 +0100
committerElectroDeoxys <ElectroDeoxys@gmail.com>2019-09-20 00:08:55 +0100
commit3d8c853f38eb4c9c782c7984bb9905fa76dbf625 (patch)
tree58f11c2e3b731159845d9f3ef646fc3867c9cf3d /src
parent0479d5332b78a60964735929779a730d2151970c (diff)
Document Pluspower AI routines
Diffstat (limited to 'src')
-rw-r--r--src/engine/bank08.asm138
1 files changed, 103 insertions, 35 deletions
diff --git a/src/engine/bank08.asm b/src/engine/bank08.asm
index 48ed23f..d2e0d9c 100644
--- a/src/engine/bank08.asm
+++ b/src/engine/bank08.asm
@@ -12,8 +12,8 @@ Data_20000: ; 20000 (8:4000)
unknown_data_20000 $0b, SUPER_POTION, FindTargetCardForSuperPotion, AIPlaySuperPotion
unknown_data_20000 $0d, DEFENDER, CheckIfDefenderPreventsKnockOut, AIPlayDefender
unknown_data_20000 $0e, DEFENDER, CheckIfDefenderPreventsRecoilKnockOut, AIPlayDefender
- unknown_data_20000 $0d, PLUSPOWER, $4501, AIPlayPluspower
- unknown_data_20000 $0e, PLUSPOWER, $45a5, AIPlayPluspower
+ unknown_data_20000 $0d, PLUSPOWER, CheckIfPluspowerBoostCausesKnockOut, AIPlayPluspower
+ unknown_data_20000 $0e, PLUSPOWER, CheckIfSelectedMoveCannotKnockOutWithoutPluspowerBoost, AIPlayPluspower
unknown_data_20000 $09, SWITCH, $462e, $4612
unknown_data_20000 $07, GUST_OF_WIND, $467e, $4666
unknown_data_20000 $0a, GUST_OF_WIND, $467e, $4666
@@ -808,7 +808,9 @@ AIPlayPluspower: ; 204e8 (8:44e8)
ret
; 0x20501
-Func_20501: ; 20501 (8:4501)
+; returns carry if using a Pluspower can KO defending Pokémon
+; if active card cannot KO without the boost.
+CheckIfPluspowerBoostCausesKnockOut: ; 20501 (8:4501)
; this is mistakenly duplicated
xor a
ldh [hTempPlayAreaLocation_ff9d], a
@@ -848,33 +850,41 @@ Func_20501: ; 20501 (8:4501)
call SwapTurn
jr c, .no_carry
+; check both attacks and decide which one
+; can KO with Pluspower boost.
+; if neither can KO, return no carry.
xor a ; first attack
ld [wSelectedMoveIndex], a
- call .asm_20562
- jr c, .asm_20551
+ call .check_ko_with_pluspower
+ jr c, .kos_with_pluspower_1
ld a, $01 ; second attack
ld [wSelectedMoveIndex], a
- call .asm_20562
- jr c, .asm_20559
+ call .check_ko_with_pluspower
+ jr c, .kos_with_pluspower_2
.no_carry
or a
ret
-.asm_20551
- call .asm_20589
+
+; first attack can KO with Pluspower.
+.kos_with_pluspower_1
+ call .check_mr_mime
jr nc, .no_carry
xor a ; first attack
scf
ret
-.asm_20559
- call .asm_20589
+; second attack can KO with Pluspower.
+.kos_with_pluspower_2
+ call .check_mr_mime
jr nc, .no_carry
- ld a, $01 ; first attack
+ ld a, $01 ; second attack
scf
ret
; 0x20562
-.asm_20562 ; 20562 (8:4562)
+; return carry if move is useable and KOs
+; defending Pokémon with Pluspower boost.
+.check_ko_with_pluspower ; 20562 (8:4562)
farcall CheckIfSelectedMoveIsUnusable
jr c, .unusable
ld a, [wSelectedMoveIndex]
@@ -887,23 +897,25 @@ Func_20501: ; 20501 (8:4501)
jr c, .no_carry
jr z, .no_carry
ld a, [hl]
- add 10
+ add 10 ; add Pluspower boost
ld c, a
ld a, b
sub c
- ret c
- ret nz
+ ret c ; return carry if damage > HP left
+ ret nz ; does not KO
scf
- ret
+ ret ; KOs with Pluspower boost
.unusable
or a
ret
; 0x20589
-.asm_20589 ; 20589 (8:4589)
+; returns carry if Pluspower boost does
+; not exceed 30 damage when facing Mr. Mime.
+.check_mr_mime ; 20589 (8:4589)
ld a, [wDamage]
- add 10
- cp 30
+ add 10 ; add Pluspower boost
+ cp 30 ; no danger in preventing damage
ret c
call SwapTurn
ld a, DUELVARS_ARENA_CARD
@@ -911,36 +923,92 @@ Func_20501: ; 20501 (8:4501)
call GetCardIDFromDeckIndex
call SwapTurn
ld a, e
- cp $9b
+ cp MR_MIME
ret z
+; damage is >= 30 but not Mr. Mime
scf
ret
; 0x205a5
-Func_205a5: ; 205a5 (8:45a5)
+; returns carry 7/10 of the time
+; if selected move is useable, can't KO without Pluspower boost
+; can damage Mr. Mime even with Pluspower boost;
+; and has a minimum damage > 0.
+CheckIfSelectedMoveCannotKnockOutWithoutPluspowerBoost: ; 205a5 (8:45a5)
xor a
ldh [hTempPlayAreaLocation_ff9d], a
- call Func_205d7
- jr nc, .asm_205b9
- call Func_205f6
- jr nc, .asm_205b9
- call Func_205bb
- jr nc, .asm_205b9
+ call .check_can_ko
+ jr nc, .no_carry
+ call .check_random
+ jr nc, .no_carry
+ call .check_mr_mime
+ jr nc, .no_carry
scf
ret
-.asm_205b9
+.no_carry
or a
ret
; 0x205bb
-Func_205bb: ; 205bb (8:45bb)
- INCROM $205bb, $205d7
+; returns carry if Pluspower boost does
+; not exceed 30 damage when facing Mr. Mime.
+.check_mr_mime ; 205bb (8:45bb)
+ ld a, [wDamage]
+ add 10 ; add Pluspower boost
+ cp 30 ; no danger in preventing damage
+ ret c
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ call SwapTurn
+ ld a, e
+ cp MR_MIME
+ ret z
+; damage is >= 30 but not Mr. Mime
+ scf
+ ret
+; 0x205d7
-Func_205d7: ; 205d7 (8:45d7)
- INCROM $205d7, $205f6
+; return carry if move is useable but cannot KO.
+.check_can_ko ; 205d7 (8:45d7)
+ farcall CheckIfSelectedMoveIsUnusable
+ jr c, .unuseable
+ ld a, [wSelectedMoveIndex]
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetNonTurnDuelistVariable
+ ld b, a
+ ld hl, wDamage
+ sub [hl]
+ jr c, .no_carry
+ jr z, .no_carry
+; can't KO.
+ scf
+ ret
+.unuseable
+ or a
+ ret
+; 0x205f6
+
+; return carry 7/10 of the time if
+; move is useable and minimum damage > 0.
+.check_random ; 205f6 (8:45f6)
+ farcall CheckIfSelectedMoveIsUnusable
+ jr c, .unuseable
+ ld a, [wSelectedMoveIndex]
+ farcall EstimateDamage_VersusDefendingCard
+ ld a, [wAIMinDamage]
+ cp 10
+ jr c, .unuseable
+ ld a, 10
+ call Random
+ cp 3
+ ret
+; 0x20612
-Func_205f6: ; 205f6 (8:45f6)
- INCROM $205f6, $2282e
+Func_20612: ; 20612 (8:4612)
+ INCROM $20612, $2282e
; returns in a the card index of energy card
; attached to Pokémon in Play Area location a,