1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
; acts just like a general deck AI except never retreats
AIActionTable_GeneralNoRetreat: ; 148dc (5:48dc)
dw .do_turn ; unused
dw .do_turn
dw .start_duel
dw .forced_switch
dw .ko_switch
dw .take_prize
.do_turn ; 148e8 (5:48e8)
call AIDoTurn_GeneralNoRetreat
ret
.start_duel ; 148ec (5:48ec)
call InitAIDuelVars
call AIPlayInitialBasicCards
ret
.forced_switch ; 148f3 (5:48f3)
call AIDecideBenchPokemonToSwitchTo
ret
.ko_switch ; 148f7 (5:48f7)
call AIDecideBenchPokemonToSwitchTo
ret
.take_prize ; 148fb (5:48fb)
call AIPickPrizeCards
ret
AIDoTurn_GeneralNoRetreat: ; 148ff (5:48ff)
; initialize variables
call InitAITurnVars
ld a, AI_TRAINER_CARD_PHASE_01
call AIProcessHandTrainerCards
farcall HandleAIAntiMewtwoDeckStrategy
jp nc, .try_attack
; handle Pkmn Powers
farcall HandleAIGoGoRainDanceEnergy
farcall HandleAIDamageSwap
farcall HandleAIPkmnPowers
ret c ; return if turn ended
farcall HandleAICowardice
; process Trainer cards
; phase 2 through 4.
ld a, AI_TRAINER_CARD_PHASE_02
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_03
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_04
call AIProcessHandTrainerCards
; play Pokemon from hand
call AIDecidePlayPokemonCard
ret c ; return if turn ended
; process Trainer cards
; phase 5 through 12.
ld a, AI_TRAINER_CARD_PHASE_05
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_06
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_07
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_08
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_10
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_11
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_12
call AIProcessHandTrainerCards
; play Energy card if possible
ld a, [wAlreadyPlayedEnergy]
or a
jr nz, .skip_energy_attach_1
call AIProcessAndTryToPlayEnergy
.skip_energy_attach_1
; play Pokemon from hand again
call AIDecidePlayPokemonCard
; handle Pkmn Powers again
farcall HandleAIDamageSwap
farcall HandleAIPkmnPowers
ret c ; return if turn ended
farcall HandleAIGoGoRainDanceEnergy
ld a, AI_ENERGY_TRANS_ATTACK
farcall HandleAIEnergyTrans
; process Trainer cards phases 13 and 15
ld a, AI_TRAINER_CARD_PHASE_13
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_15
call AIProcessHandTrainerCards
; if used Professor Oak, process new hand
; if not, then proceed to attack.
ld a, [wPreviousAIFlags]
and AI_FLAG_USED_PROFESSOR_OAK
jr z, .try_attack
ld a, AI_TRAINER_CARD_PHASE_01
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_02
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_03
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_04
call AIProcessHandTrainerCards
call AIDecidePlayPokemonCard
ret c ; return if turn ended
ld a, AI_TRAINER_CARD_PHASE_05
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_06
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_07
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_08
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_10
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_11
call AIProcessHandTrainerCards
ld a, AI_TRAINER_CARD_PHASE_12
call AIProcessHandTrainerCards
ld a, [wAlreadyPlayedEnergy]
or a
jr nz, .skip_energy_attach_2
call AIProcessAndTryToPlayEnergy
.skip_energy_attach_2
call AIDecidePlayPokemonCard
farcall HandleAIDamageSwap
farcall HandleAIPkmnPowers
ret c ; return if turn ended
farcall HandleAIGoGoRainDanceEnergy
ld a, AI_TRAINER_CARD_PHASE_13
call AIProcessHandTrainerCards
; skip AI_TRAINER_CARD_PHASE_15
.try_attack
; attack if possible, if not,
; finish turn without attacking.
call AIProcessAndTryToUseAttack
ret c ; return if turn ended
ld a, OPPACTION_FINISH_NO_ATTACK
bank1call AIMakeDecision
ret
; 0x149e8
|