shithub: pokecrystal

Download patch

ref: da799c80d4f6f3c1b22687b6177ff09fecf6c324
parent: 88a15c50387d02a7cdb95b508c43fa9f10a46982
author: yenatch <[email protected]>
date: Wed Aug 13 15:44:56 EDT 2014

Better trainer AI comments and finish off trainer attributes.

--- a/battle/ai/items.asm
+++ b/battle/ai/items.asm
@@ -1,37 +1,41 @@
 Function38000: ; 38000
 	and a
+
 	ld a, [IsInBattle]
 	dec a
 	ret z
+
 	ld a, [InLinkBattle]
 	and a
 	ret nz
+
 	callba Function3e8d1
 	ret nz
+
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_CANT_RUN, a
 	jr nz, Function38041
+
 	ld a, [$c731]
 	and a
 	jr nz, Function38041
+
 	ld hl, TrainerClassAttributes + 5
 	ld a, [$cfc0]
 	and a
-	jr nz, .asm_38032
+	jr nz, .ok
 	ld a, [TrainerClass]
 	dec a
 	ld bc, 7
 	call AddNTimes
-
-.asm_38032
-	bit 0, [hl]
+.ok
+	bit SWITCH_OFTEN_F, [hl]
 	jp nz, Function38045
-	bit 1, [hl]
+	bit SWITCH_RARELY_F, [hl]
 	jp nz, Function38083
-	bit 2, [hl]
+	bit SWITCH_SOMETIMES_F, [hl]
 	jp nz, Function380c1
 	; fallthrough
-; 38041
 
 Function38041: ; 38041
 	call Function38105
@@ -43,32 +47,34 @@
 	ld a, [$c717]
 	and $f0
 	jp z, Function38041
+
 	cp $10
-	jr nz, .asm_38061
+	jr nz, .not_10
 	call Random
 	cp $80
-	jr c, .asm_38077
+	jr c, .switch
 	jp Function38041
+.not_10
 
-.asm_38061
 	cp $20
-	jr nz, .asm_3806f
+	jr nz, .not_20
 	call Random
-	cp $c8
-	jr c, .asm_38077
+	cp 200
+	jr c, .switch
 	jp Function38041
+.not_20
 
-.asm_3806f
+	; $30
 	call Random
-	cp $a
+	cp 10
 	jp c, Function38041
 
-.asm_38077
+.switch
 	ld a, [$c717]
 	and $f
 	inc a
 	ld [$c718], a
-	jp Function3844b
+	jp AI_TrySwitch
 ; 38083
 
 Function38083: ; 38083
@@ -76,32 +82,34 @@
 	ld a, [$c717]
 	and $f0
 	jp z, Function38041
+
 	cp $10
-	jr nz, .asm_3809f
+	jr nz, .not_10
 	call Random
-	cp $14
-	jr c, .asm_380b5
+	cp 20
+	jr c, .switch
 	jp Function38041
+.not_10
 
-.asm_3809f
 	cp $20
-	jr nz, .asm_380ad
+	jr nz, .not_20
 	call Random
-	cp $1e
-	jr c, .asm_380b5
+	cp 30
+	jr c, .switch
 	jp Function38041
+.not_20
 
-.asm_380ad
+	; $30
 	call Random
-	cp $c8
+	cp 200
 	jp c, Function38041
 
-.asm_380b5
+.switch
 	ld a, [$c717]
 	and $f
 	inc a
 	ld [$c718], a
-	jp Function3844b
+	jp AI_TrySwitch
 ; 380c1
 
 Function380c1: ; 380c1
@@ -109,32 +117,34 @@
 	ld a, [$c717]
 	and $f0
 	jp z, Function38041
+
 	cp $10
-	jr nz, .asm_380dd
+	jr nz, .not_10
 	call Random
-	cp $32
-	jr c, .asm_380f3
+	cp 50
+	jr c, .switch
 	jp Function38041
+.not_10
 
-.asm_380dd
 	cp $20
-	jr nz, .asm_380eb
+	jr nz, .not_20
 	call Random
 	cp $80
-	jr c, .asm_380f3
+	jr c, .switch
 	jp Function38041
+.not_20
 
-.asm_380eb
+	; $30
 	call Random
-	cp $32
+	cp 50
 	jp c, Function38041
 
-.asm_380f3
+.switch
 	ld a, [$c717]
 	and $f
 	inc a
 	ld [$c718], a
-	jp Function3844b
+	jp AI_TrySwitch
 ; 380ff
 
 
@@ -204,16 +214,16 @@
 	ld [de], a
 	inc a
 	ld [$c70f], a
-	ld hl, EnemySubStatus3 ; $c66f
+	ld hl, EnemySubStatus3
 	res SUBSTATUS_BIDE, [hl]
 	xor a
-	ld [EnemyFuryCutterCount], a ; $c680
+	ld [EnemyFuryCutterCount], a
 	ld [$c681], a
 	ld [$c72c], a
-	ld hl, EnemySubStatus4 ; $c670
+	ld hl, EnemySubStatus4
 	res SUBSTATUS_RAGE, [hl]
 	xor a
-	ld [LastPlayerCounterMove], a ; $c6f9
+	ld [LastPlayerCounterMove], a
 	scf
 	ret
 
@@ -249,146 +259,144 @@
 ; 38196
 
 Unknown_38196: ; 39196
-	dbw FULL_RESTORE, Function38208
-	dbw MAX_POTION,   Function38220
-	dbw HYPER_POTION, Function38284
-	dbw SUPER_POTION, Function38292
-	dbw POTION,       Function382a0
-	dbw X_ACCURACY,   Function382f9
-	dbw FULL_HEAL,    Function381be
-	dbw GUARD_SPEC,   Function38305
-	dbw DIRE_HIT,     Function38311
-	dbw X_ATTACK,     Function3831d
-	dbw X_DEFEND,     Function38329
-	dbw X_SPEED,      Function38335
-	dbw X_SPECIAL,    Function38341
+	dbw FULL_RESTORE, .FullRestore
+	dbw MAX_POTION,   .MaxPotion
+	dbw HYPER_POTION, .HyperPotion
+	dbw SUPER_POTION, .SuperPotion
+	dbw POTION,       .Potion
+	dbw X_ACCURACY,   .XAccuracy
+	dbw FULL_HEAL,    .FullHeal
+	dbw GUARD_SPEC,   .GuardSpec
+	dbw DIRE_HIT,     .DireHit
+	dbw X_ATTACK,     .XAttack
+	dbw X_DEFEND,     .XDefend
+	dbw X_SPEED,      .XSpeed
+	dbw X_SPECIAL,    .XSpecial
 	db $ff
 ; 381be
 
-Function381be: ; 381be
-	call Function381ca
-	jp c, Function38383
+.FullHeal: ; 381be
+	call .Status
+	jp c, .DontUse
 	call Function383a3
-	jp Function38385
+	jp .Use
 ; 381ca
 
-Function381ca: ; 381ca (e:41ca)
-	ld a, [EnemyMonStatus] ; $d214
+.Status: ; 381ca (e:41ca)
+	ld a, [EnemyMonStatus]
 	and a
-	jp z, Function38383
+	jp z, .DontUse
 
 	ld a, [bc]
-	bit 6, a
+	bit CONTEXT_USE_F, a
 	jr nz, .asm_381e7
 	ld a, [bc]
-	bit 4, a
-	jp nz, Function38385
+	bit ALWAYS_USE_F, a
+	jp nz, .Use
 	call Random
-	cp $32
-	jp c, Function38385
-	jp Function38383
+	cp 50
+	jp c, .Use
+	jp .DontUse
 
 .asm_381e7
 	ld a, [EnemySubStatus5]
 	bit SUBSTATUS_TOXIC, a
 	jr z, .asm_381fd
-	ld a, [$c67c]
-	cp $4
+	ld a, [EnemyToxicCount]
+	cp 4
 	jr c, .asm_381fd
 	call Random
 	cp $80
-	jp c, Function38385
+	jp c, .Use
 .asm_381fd
 	ld a, [EnemyMonStatus]
 	and 1 << FRZ | SLP
-	jp z, Function38383
-	jp Function38385
+	jp z, .DontUse
+	jp .Use
 ; 38208
 
-Function38208: ; 38208
-	call Function3822c
-	jp nc, Function3821a
+.FullRestore: ; 38208
+	call .HealItem
+	jp nc, .asm_3821a
 	ld a, [bc]
-	bit 6, a
-	jp z, Function38383
-	call Function381ca
-	jp c, Function38383
+	bit CONTEXT_USE_F, a
+	jp z, .DontUse
+	call .Status
+	jp c, .DontUse
 
-Function3821a: ; 3821a (e:421a)
+.asm_3821a
 	call Function383b5
-	jp Function38385
+	jp .Use
 ; 38220
 
-Function38220: ; 38220
-	call Function3822c
-	jp c, Function38383
+.MaxPotion: ; 38220
+	call .HealItem
+	jp c, .DontUse
 	call Function383ae
-	jp Function38385
+	jp .Use
 
-Function3822c: ; 3822c (e:422c)
+.HealItem: ; 3822c (e:422c)
 	ld a, [bc]
-	bit 6, a
-	jr nz, Function38267
+	bit CONTEXT_USE_F, a
+	jr nz, .asm_38267
 	callab AICheckEnemyHalfHP
-	jp c, Function38383
+	jp c, .DontUse
 	ld a, [bc]
-	bit 5, a
-	jp nz, Function38254
+	bit UNKNOWN_USE_F, a
+	jp nz, .asm_38254
 	callab AICheckEnemyQuarterHP
-	jp nc, Function38281
+	jp nc, .asm_38281
 	call Random
 	cp $80
-	jp c, Function38281
-	jp Function38383
+	jp c, .asm_38281
+	jp .DontUse
 
-Function38254: ; 38254 (e:4254)
+.asm_38254: ; 38254 (e:4254)
 	callab AICheckEnemyQuarterHP
-	jp c, Function38383
+	jp c, .DontUse
 	call Random
-	cp $32
-	jp c, Function38383
-	jr Function38281
+	cp 50
+	jp c, .DontUse
+	jr .asm_38281
 
-Function38267: ; 38267 (e:4267)
+.asm_38267: ; 38267 (e:4267)
 	callab AICheckEnemyHalfHP
-	jp c, Function38383
+	jp c, .DontUse
 	callab AICheckEnemyQuarterHP
-	jp nc, Function38281
+	jp nc, .asm_38281
 	call Random
-	cp $32
-	jp nc, Function38383
+	cp 50
+	jp nc, .DontUse
 
-Function38281: ; 38281 (e:4281)
-	jp Function38385
+.asm_38281: ; 38281 (e:4281)
+	jp .Use
 ; 38284
 
-Function38284: ; 38284
-	call Function3822c
-	jp c, Function38383
+.HyperPotion: ; 38284
+	call .HealItem
+	jp c, .DontUse
 	ld b, 200
 	call Function383f4
-	jp Function38385
+	jp .Use
 ; 38292 (e:4292)
 
-Function38292: ; 38292
-	call Function3822c
-	jp c, Function38383
-
-Function38298: ; 38298
+.SuperPotion: ; 38292
+	call .HealItem
+	jp c, .DontUse
 	ld b, 50
 	call Function383ee
-	jp Function38385
+	jp .Use
 ; 382a0
 
-Function382a0: ; 382a0
-	call Function3822c
-	jp c, Function38383
+.Potion: ; 382a0
+	call .HealItem
+	jp c, .DontUse
 	ld b, 20
 	call Function383e8
-	jp Function38385
+	jp .Use
 ; 382ae
 
-Function382ae: ; 382ae
+.asm_382ae: ; 382ae
 	callab AICheckEnemyMaxHP
 	jr c, .asm_382e4
 	push bc
@@ -412,111 +420,111 @@
 .asm_382d5
 	pop bc
 	ld a, [bc]
-	bit 5, a
-	jp z, Function38385
+	bit UNKNOWN_USE_F, a
+	jp z, .Use
 	call Random
 	cp $80
-	jp c, Function38385
+	jp c, .Use
 
 .asm_382e4
-	jp Function38383
+	jp .DontUse
 
 .asm_382e7
 	pop bc
 	ld a, [bc]
-	bit 5, a
-	jp z, Function38383
+	bit UNKNOWN_USE_F, a
+	jp z, .DontUse
 	call Random
-	cp $64
-	jp c, Function38385
-	jp Function38383
+	cp 100
+	jp c, .Use
+	jp .DontUse
 ; 382f9
 
-Function382f9: ; 382f9
-	call Function3834d
-	jp c, Function38383
+.XAccuracy: ; 382f9
+	call .XItem
+	jp c, .DontUse
 	call Function384f7
-	jp Function38385
+	jp .Use
 ; 38305
 
-Function38305: ; 38305
-	call Function3834d
-	jp c, Function38383
+.GuardSpec: ; 38305
+	call .XItem
+	jp c, .DontUse
 	call Function38504
-	jp Function38385
+	jp .Use
 ; 38311
 
-Function38311: ; 38311
-	call Function3834d
-	jp c, Function38383
+.DireHit: ; 38311
+	call .XItem
+	jp c, .DontUse
 	call Function38511
-	jp Function38385
+	jp .Use
 ; 3831d (e:431d)
 
-Function3831d: ; 3831d
-	call Function3834d
-	jp c, Function38383
+.XAttack: ; 3831d
+	call .XItem
+	jp c, .DontUse
 	call Function38541
-	jp Function38385
+	jp .Use
 ; 38329
 
-Function38329: ; 38329
-	call Function3834d
-	jp c, Function38383
+.XDefend: ; 38329
+	call .XItem
+	jp c, .DontUse
 	call Function38547
-	jp Function38385
+	jp .Use
 ; 38335
 
-Function38335: ; 38335
-	call Function3834d
-	jp c, Function38383
+.XSpeed: ; 38335
+	call .XItem
+	jp c, .DontUse
 	call Function3854d
-	jp Function38385
+	jp .Use
 ; 38341
 
-Function38341: ; 38341
-	call Function3834d
-	jp c, Function38383
+.XSpecial: ; 38341
+	call .XItem
+	jp c, .DontUse
 	call Function38553
-	jp Function38385
+	jp .Use
 ; 3834d
 
-Function3834d: ; 3834d (e:434d)
-	ld a, [EnemyTurnsTaken] ; $c6dc
+.XItem: ; 3834d (e:434d)
+	ld a, [EnemyTurnsTaken]
 	and a
 	jr nz, .asm_38372
 	ld a, [bc]
-	bit 4, a
-	jp nz, Function38385
+	bit ALWAYS_USE_F, a
+	jp nz, .Use
 	call Random
 	cp $80
-	jp c, Function38383
+	jp c, .DontUse
 	ld a, [bc]
-	bit 6, a
-	jp nz, Function38385
+	bit CONTEXT_USE_F, a
+	jp nz, .Use
 	call Random
 	cp $80
-	jp c, Function38383
-	jp Function38385
+	jp c, .DontUse
+	jp .Use
 .asm_38372
 	ld a, [bc]
-	bit 4, a
-	jp z, Function38383
+	bit ALWAYS_USE_F, a
+	jp z, .DontUse
 	call Random
-	cp $32
-	jp nc, Function38383
-	jp Function38385
+	cp 50
+	jp nc, .DontUse
+	jp .Use
 
-Function38383: ; 38383 (e:4383)
+.DontUse:
 	scf
 	ret
 
-Function38385: ; 38385 (e:4385)
+.Use:
 	and a
 	ret
 
 
-Function38387: ; 38387
+AIUpdateHUD: ; 38387
 	call UpdateEnemyMonInParty
 	callba UpdateEnemyHUD
 	ld a, $1
@@ -527,7 +535,7 @@
 	ret
 ; 3839a
 
-Function3839a: ; 3839a
+AIUsedItemSound: ; 3839a
 	push de
 	ld de, SFX_FULL_HEAL
 	call PlaySFX
@@ -537,27 +545,28 @@
 
 
 Function383a3: ; 383a3 (e:43a3)
-	call Function3839a
-	call Function384e0
+	call AIUsedItemSound
+	call AI_HealStatus
 	ld a, FULL_HEAL
 	jp Function38568
 
 Function383ae: ; 383ae (e:43ae)
-	ld a, $f
+	ld a, MAX_POTION
 	ld [$d1f1], a
 	jr asm_383c6
 
 Function383b5: ; 383b5 (e:43b5)
-	call Function384e0
-	ld a, $e
+	call AI_HealStatus
+	ld a, FULL_RESTORE
 	ld [$d1f1], a
-	ld hl, EnemySubStatus3 ; $c66f
+	ld hl, EnemySubStatus3
 	res SUBSTATUS_CONFUSED, [hl]
 	xor a
-	ld [EnemyConfuseCount], a ; $c67b
-asm_383c6: ; 383c6 (e:43c6)
+	ld [EnemyConfuseCount], a
+
+asm_383c6: ; 383c6
 	ld de, $d1ec
-	ld hl, EnemyMonHP + 1 ; $d217
+	ld hl, EnemyMonHP + 1
 	ld a, [hld]
 	ld [de], a
 	inc de
@@ -564,17 +573,17 @@
 	ld a, [hl]
 	ld [de], a
 	inc de
-	ld hl, EnemyMonMaxHP + 1 ; $d219
+	ld hl, EnemyMonMaxHP + 1
 	ld a, [hld]
 	ld [de], a
 	inc de
-	ld [Buffer1], a ; $d1ea (aliases: MagikarpLength)
-	ld [EnemyMonHP + 1], a ; $d217
+	ld [Buffer1], a
+	ld [EnemyMonHP + 1], a
 	ld a, [hl]
 	ld [de], a
-	ld [Buffer2], a ; $d1eb (aliases: MovementType)
-	ld [EnemyMonHP], a ; $d216 (aliases: EnemyMonHP)
-	jr asm_38436
+	ld [Buffer2], a
+	ld [EnemyMonHP], a
+	jr Function38436
 ; 383e8 (e:43e8)
 
 Function383e8: ; 383e8
@@ -593,7 +602,7 @@
 
 Function383f8: ; 383f8
 	ld [$d1f1], a
-	ld hl, EnemyMonHP + 1 ; $d217
+	ld hl, EnemyMonHP + 1
 	ld a, [hl]
 	ld [$d1ec], a
 	add b
@@ -600,27 +609,27 @@
 	ld [hld], a
 	ld [$d1ee], a
 	ld a, [hl]
-	ld [$d1ed], a
-	ld [$d1ef], a
+	ld [$d1ec + 1], a
+	ld [$d1ee + 1], a
 	jr nc, .asm_38415
 	inc a
 	ld [hl], a
-	ld [$d1ef], a
+	ld [$d1ee + 1], a
 .asm_38415
 	inc hl
 	ld a, [hld]
 	ld b, a
-	ld de, EnemyMonMaxHP + 1 ; $d219
+	ld de, EnemyMonMaxHP + 1
 	ld a, [de]
 	dec de
-	ld [Buffer1], a ; $d1ea (aliases: MagikarpLength)
+	ld [Buffer1], a
 	sub b
 	ld a, [hli]
 	ld b, a
 	ld a, [de]
-	ld [Buffer2], a ; $d1eb (aliases: MovementType)
+	ld [Buffer2], a
 	sbc b
-	jr nc, asm_38436
+	jr nc, .asm_38436
 	inc de
 	ld a, [de]
 	dec de
@@ -629,17 +638,19 @@
 	ld a, [de]
 	ld [hl], a
 	ld [$d1ef], a
-asm_38436: ; 38436 (e:4436)
+.asm_38436
+
+Function38436: ; 38436
 	call Function38571
 	hlcoord 2, 2
 	xor a
 	ld [$d10a], a
-	call Function3839a
+	call AIUsedItemSound
 	predef Functionc6e0
-	jp Function38387
+	jp AIUpdateHUD
 
 
-Function3844b: ; 3844b
+AI_TrySwitch: ; 3844b
 	ld a, [OTPartyCount]
 	ld c, a
 	ld hl, OTPartyMon1HP
@@ -651,7 +662,6 @@
 	or b
 	jr z, .asm_3845b
 	inc d
-
 .asm_3845b
 	push bc
 	ld bc, PartyMon2 - PartyMon1
@@ -659,14 +669,15 @@
 	pop bc
 	dec c
 	jr nz, .asm_38454
+
 	ld a, d
-	cp $2
-	jp nc, Function3846c
+	cp 2
+	jp nc, AI_Switch
 	and a
 	ret
 ; 3846c
 
-Function3846c: ; 3846c
+AI_Switch: ; 3846c
 	ld a, $1
 	ld [$c711], a
 	ld [$c70f], a
@@ -689,7 +700,6 @@
 	jr c, .asm_384a3
 	ld hl, UnknownText_0x384d0
 	call PrintText
-
 .asm_384a3
 	ld a, $1
 	ld [$d264], a
@@ -714,13 +724,13 @@
 ; 384d5
 
 Function384d5: ; 384d5
-	call Function3839a
-	call Function384e0
-	ld a, X_SPEED
+	call AIUsedItemSound
+	call AI_HealStatus
+	ld a, FULL_HEAL_RED
 	jp Function38568
 ; 384e0
 
-Function384e0: ; 384e0
+AI_HealStatus: ; 384e0
 	ld a, [CurOTMon]
 	ld hl, OTPartyMon1Status
 	ld bc, PartyMon2 - PartyMon1
@@ -734,15 +744,15 @@
 ; 384f7
 
 Function384f7: ; 384f7
-	call Function3839a
+	call AIUsedItemSound
 	ld hl, EnemySubStatus4
-	set SUBSTATUS_UNLEASH, [hl]
+	set SUBSTATUS_X_ACCURACY, [hl]
 	ld a, X_ACCURACY
 	jp Function38568
 ; 38504
 
 Function38504: ; 38504
-	call Function3839a
+	call AIUsedItemSound
 	ld hl, EnemySubStatus4
 	set SUBSTATUS_MIST, [hl]
 	ld a, GUARD_SPEC
@@ -750,7 +760,7 @@
 ; 38511
 
 Function38511: ; 38511
-	call Function3839a
+	call AIUsedItemSound
 	ld hl, EnemySubStatus4
 	set SUBSTATUS_FOCUS_ENERGY, [hl]
 	ld a, DIRE_HIT
@@ -805,13 +815,13 @@
 	ld b, SP_ATTACK
 	ld a, X_SPECIAL
 
-Function38557
+Function38557:
 	ld [$d1f1], a
 	push bc
 	call Function38571
 	pop bc
 	callba Function361ef
-	jp Function38387
+	jp AIUpdateHUD
 ; 38568
 
 
@@ -818,7 +828,7 @@
 Function38568: ; 38568
 	ld [$d1f1], a
 	call Function38571
-	jp Function38387
+	jp AIUpdateHUD
 ; 38571
 
 Function38571: ; 38571
--- a/battle/ai/scoring.asm
+++ b/battle/ai/scoring.asm
@@ -1,5 +1,7 @@
-AIScoring_RedStatus: ; 38591
-; Don't use status-only moves if the player can't be statused.
+AI_Basic: ; 38591
+; Don't do anything redundant:
+;  -Using status-only moves if the player can't be statused
+;  -Using moves that fail if they've already been used
 
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
@@ -22,7 +24,7 @@
 	push hl
 	push de
 	push bc
-	callba Function2c41a
+	callba AI_Redundant
 	pop bc
 	pop de
 	pop hl
@@ -64,7 +66,7 @@
 
 
 
-AIScoring_RedStatMods: ; 385e0
+AI_Setup: ; 385e0
 ; Use stat-modifying moves on turn 1.
 
 	ld hl, Buffer1 - 1
@@ -119,7 +121,7 @@
 	jr nz, .discourage
 
 .encourage
-	call Function39527
+	call AI_50_50
 	jr c, .checkmove
 
 	dec [hl]
@@ -137,7 +139,7 @@
 
 
 
-AIScoring_RedSuperEffective: ; 38635
+AI_Types: ; 38635
 ; Use super-effective moves.
 
 	ld hl, Buffer1 - 1
@@ -226,7 +228,7 @@
 
 
 
-AIScoring_Offensive: ; 386a2
+AI_Offensive: ; 386a2
 ; Discourage non-damaging moves.
 
 	ld hl, Buffer1 - 1
@@ -255,7 +257,7 @@
 
 
 
-AIScoring_Smart: ; 386be
+AI_Smart: ; 386be
 ; Context-specific scoring.
 
 	ld hl, Buffer1
@@ -304,101 +306,101 @@
 	jr .checkmove
 
 .table_386f2
-	dbw EFFECT_SLEEP,            AIScoring_Sleep
-	dbw EFFECT_LEECH_HIT,        AIScoring_LeechHit
-	dbw EFFECT_EXPLOSION,        AIScoring_Explosion
-	dbw EFFECT_DREAM_EATER,      AIScoring_DreamEater
-	dbw EFFECT_MIRROR_MOVE,      AIScoring_MirrorMove
-	dbw EFFECT_EVASION_UP,       AIScoring_EvasionUp
-	dbw EFFECT_ALWAYS_HIT,       AIScoring_AlwaysHit
-	dbw EFFECT_ACCURACY_DOWN,    AIScoring_AccuracyDown
-	dbw EFFECT_HAZE,             AIScoring_Haze
-	dbw EFFECT_BIDE,             AIScoring_Bide
-	dbw EFFECT_WHIRLWIND,        AIScoring_Whirlwind
-	dbw EFFECT_HEAL,             AIScoring_Heal
-	dbw EFFECT_TOXIC,            AIScoring_Toxic
-	dbw EFFECT_LIGHT_SCREEN,     AIScoring_LightScreen
-	dbw EFFECT_OHKO,             AIScoring_Ohko
-	dbw EFFECT_RAZOR_WIND,       AIScoring_RazorWind
-	dbw EFFECT_SUPER_FANG,       AIScoring_SuperFang
-	dbw EFFECT_BIND,             AIScoring_Bind
-	dbw EFFECT_UNUSED_2B,        AIScoring_Unused2B
-	dbw EFFECT_CONFUSE,          AIScoring_Confuse
-	dbw EFFECT_SP_DEF_UP_2,      AIScoring_SpDefenseUp2
-	dbw EFFECT_REFLECT,          AIScoring_Reflect
-	dbw EFFECT_PARALYZE,         AIScoring_Paralyze
-	dbw EFFECT_SPEED_DOWN_HIT,   AIScoring_SpeedDownHit
-	dbw EFFECT_SUBSTITUTE,       AIScoring_Substitute
-	dbw EFFECT_HYPER_BEAM,       AIScoring_HyperBeam
-	dbw EFFECT_RAGE,             AIScoring_Rage
-	dbw EFFECT_MIMIC,            AIScoring_Mimic
-	dbw EFFECT_LEECH_SEED,       AIScoring_LeechSeed
-	dbw EFFECT_DISABLE,          AIScoring_Disable
-	dbw EFFECT_COUNTER,          AIScoring_Counter
-	dbw EFFECT_ENCORE,           AIScoring_Encore
-	dbw EFFECT_PAIN_SPLIT,       AIScoring_PainSplit
-	dbw EFFECT_SNORE,            AIScoring_Snore
-	dbw EFFECT_CONVERSION2,      AIScoring_Conversion2
-	dbw EFFECT_LOCK_ON,          AIScoring_LockOn
-	dbw EFFECT_DEFROST_OPPONENT, AIScoring_DefrostOpponent
-	dbw EFFECT_SLEEP_TALK,       AIScoring_SleepTalk
-	dbw EFFECT_DESTINY_BOND,     AIScoring_DestinyBond
-	dbw EFFECT_REVERSAL,         AIScoring_Reversal
-	dbw EFFECT_SPITE,            AIScoring_Spite
-	dbw EFFECT_HEAL_BELL,        AIScoring_HealBell
-	dbw EFFECT_PRIORITY_HIT,     AIScoring_PriorityHit
-	dbw EFFECT_THIEF,            AIScoring_Thief
-	dbw EFFECT_MEAN_LOOK,        AIScoring_MeanLook
-	dbw EFFECT_NIGHTMARE,        AIScoring_Nightmare
-	dbw EFFECT_FLAME_WHEEL,      AIScoring_FlameWheel
-	dbw EFFECT_CURSE,            AIScoring_Curse
-	dbw EFFECT_PROTECT,          AIScoring_Protect
-	dbw EFFECT_FORESIGHT,        AIScoring_Foresight
-	dbw EFFECT_PERISH_SONG,      AIScoring_PerishSong
-	dbw EFFECT_SANDSTORM,        AIScoring_Sandstorm
-	dbw EFFECT_ENDURE,           AIScoring_Endure
-	dbw EFFECT_ROLLOUT,          AIScoring_Rollout
-	dbw EFFECT_SWAGGER,          AIScoring_Swagger
-	dbw EFFECT_FURY_CUTTER,      AIScoring_FuryCutter
-	dbw EFFECT_ATTRACT,          AIScoring_Attract
-	dbw EFFECT_SAFEGUARD,        AIScoring_Safeguard
-	dbw EFFECT_MAGNITUDE,        AIScoring_Magnitude
-	dbw EFFECT_BATON_PASS,       AIScoring_BatonPass
-	dbw EFFECT_PURSUIT,          AIScoring_Pursuit
-	dbw EFFECT_RAPID_SPIN,       AIScoring_RapidSpin
-	dbw EFFECT_MORNING_SUN,      AIScoring_MorningSun
-	dbw EFFECT_SYNTHESIS,        AIScoring_Synthesis
-	dbw EFFECT_MOONLIGHT,        AIScoring_Moonlight
-	dbw EFFECT_HIDDEN_POWER,     AIScoring_HiddenPower
-	dbw EFFECT_RAIN_DANCE,       AIScoring_RainDance
-	dbw EFFECT_SUNNY_DAY,        AIScoring_SunnyDay
-	dbw EFFECT_BELLY_DRUM,       AIScoring_BellyDrum
-	dbw EFFECT_PSYCH_UP,         AIScoring_PsychUp
-	dbw EFFECT_MIRROR_COAT,      AIScoring_MirrorCoat
-	dbw EFFECT_SKULL_BASH,       AIScoring_SkullBash
-	dbw EFFECT_TWISTER,          AIScoring_Twister
-	dbw EFFECT_EARTHQUAKE,       AIScoring_Earthquake
-	dbw EFFECT_FUTURE_SIGHT,     AIScoring_FutureSight
-	dbw EFFECT_GUST,             AIScoring_Gust
-	dbw EFFECT_STOMP,            AIScoring_Stomp
-	dbw EFFECT_SOLARBEAM,        AIScoring_Solarbeam
-	dbw EFFECT_THUNDER,          AIScoring_Thunder
-	dbw EFFECT_FLY,              AIScoring_Fly
+	dbw EFFECT_SLEEP,            AI_Smart_Sleep
+	dbw EFFECT_LEECH_HIT,        AI_Smart_LeechHit
+	dbw EFFECT_EXPLOSION,        AI_Smart_Explosion
+	dbw EFFECT_DREAM_EATER,      AI_Smart_DreamEater
+	dbw EFFECT_MIRROR_MOVE,      AI_Smart_MirrorMove
+	dbw EFFECT_EVASION_UP,       AI_Smart_EvasionUp
+	dbw EFFECT_ALWAYS_HIT,       AI_Smart_AlwaysHit
+	dbw EFFECT_ACCURACY_DOWN,    AI_Smart_AccuracyDown
+	dbw EFFECT_HAZE,             AI_Smart_Haze
+	dbw EFFECT_BIDE,             AI_Smart_Bide
+	dbw EFFECT_WHIRLWIND,        AI_Smart_Whirlwind
+	dbw EFFECT_HEAL,             AI_Smart_Heal
+	dbw EFFECT_TOXIC,            AI_Smart_Toxic
+	dbw EFFECT_LIGHT_SCREEN,     AI_Smart_LightScreen
+	dbw EFFECT_OHKO,             AI_Smart_Ohko
+	dbw EFFECT_RAZOR_WIND,       AI_Smart_RazorWind
+	dbw EFFECT_SUPER_FANG,       AI_Smart_SuperFang
+	dbw EFFECT_BIND,             AI_Smart_Bind
+	dbw EFFECT_UNUSED_2B,        AI_Smart_Unused2B
+	dbw EFFECT_CONFUSE,          AI_Smart_Confuse
+	dbw EFFECT_SP_DEF_UP_2,      AI_Smart_SpDefenseUp2
+	dbw EFFECT_REFLECT,          AI_Smart_Reflect
+	dbw EFFECT_PARALYZE,         AI_Smart_Paralyze
+	dbw EFFECT_SPEED_DOWN_HIT,   AI_Smart_SpeedDownHit
+	dbw EFFECT_SUBSTITUTE,       AI_Smart_Substitute
+	dbw EFFECT_HYPER_BEAM,       AI_Smart_HyperBeam
+	dbw EFFECT_RAGE,             AI_Smart_Rage
+	dbw EFFECT_MIMIC,            AI_Smart_Mimic
+	dbw EFFECT_LEECH_SEED,       AI_Smart_LeechSeed
+	dbw EFFECT_DISABLE,          AI_Smart_Disable
+	dbw EFFECT_COUNTER,          AI_Smart_Counter
+	dbw EFFECT_ENCORE,           AI_Smart_Encore
+	dbw EFFECT_PAIN_SPLIT,       AI_Smart_PainSplit
+	dbw EFFECT_SNORE,            AI_Smart_Snore
+	dbw EFFECT_CONVERSION2,      AI_Smart_Conversion2
+	dbw EFFECT_LOCK_ON,          AI_Smart_LockOn
+	dbw EFFECT_DEFROST_OPPONENT, AI_Smart_DefrostOpponent
+	dbw EFFECT_SLEEP_TALK,       AI_Smart_SleepTalk
+	dbw EFFECT_DESTINY_BOND,     AI_Smart_DestinyBond
+	dbw EFFECT_REVERSAL,         AI_Smart_Reversal
+	dbw EFFECT_SPITE,            AI_Smart_Spite
+	dbw EFFECT_HEAL_BELL,        AI_Smart_HealBell
+	dbw EFFECT_PRIORITY_HIT,     AI_Smart_PriorityHit
+	dbw EFFECT_THIEF,            AI_Smart_Thief
+	dbw EFFECT_MEAN_LOOK,        AI_Smart_MeanLook
+	dbw EFFECT_NIGHTMARE,        AI_Smart_Nightmare
+	dbw EFFECT_FLAME_WHEEL,      AI_Smart_FlameWheel
+	dbw EFFECT_CURSE,            AI_Smart_Curse
+	dbw EFFECT_PROTECT,          AI_Smart_Protect
+	dbw EFFECT_FORESIGHT,        AI_Smart_Foresight
+	dbw EFFECT_PERISH_SONG,      AI_Smart_PerishSong
+	dbw EFFECT_SANDSTORM,        AI_Smart_Sandstorm
+	dbw EFFECT_ENDURE,           AI_Smart_Endure
+	dbw EFFECT_ROLLOUT,          AI_Smart_Rollout
+	dbw EFFECT_SWAGGER,          AI_Smart_Swagger
+	dbw EFFECT_FURY_CUTTER,      AI_Smart_FuryCutter
+	dbw EFFECT_ATTRACT,          AI_Smart_Attract
+	dbw EFFECT_SAFEGUARD,        AI_Smart_Safeguard
+	dbw EFFECT_MAGNITUDE,        AI_Smart_Magnitude
+	dbw EFFECT_BATON_PASS,       AI_Smart_BatonPass
+	dbw EFFECT_PURSUIT,          AI_Smart_Pursuit
+	dbw EFFECT_RAPID_SPIN,       AI_Smart_RapidSpin
+	dbw EFFECT_MORNING_SUN,      AI_Smart_MorningSun
+	dbw EFFECT_SYNTHESIS,        AI_Smart_Synthesis
+	dbw EFFECT_MOONLIGHT,        AI_Smart_Moonlight
+	dbw EFFECT_HIDDEN_POWER,     AI_Smart_HiddenPower
+	dbw EFFECT_RAIN_DANCE,       AI_Smart_RainDance
+	dbw EFFECT_SUNNY_DAY,        AI_Smart_SunnyDay
+	dbw EFFECT_BELLY_DRUM,       AI_Smart_BellyDrum
+	dbw EFFECT_PSYCH_UP,         AI_Smart_PsychUp
+	dbw EFFECT_MIRROR_COAT,      AI_Smart_MirrorCoat
+	dbw EFFECT_SKULL_BASH,       AI_Smart_SkullBash
+	dbw EFFECT_TWISTER,          AI_Smart_Twister
+	dbw EFFECT_EARTHQUAKE,       AI_Smart_Earthquake
+	dbw EFFECT_FUTURE_SIGHT,     AI_Smart_FutureSight
+	dbw EFFECT_GUST,             AI_Smart_Gust
+	dbw EFFECT_STOMP,            AI_Smart_Stomp
+	dbw EFFECT_SOLARBEAM,        AI_Smart_Solarbeam
+	dbw EFFECT_THUNDER,          AI_Smart_Thunder
+	dbw EFFECT_FLY,              AI_Smart_Fly
 	db $ff
 ; 387e3
 
 
-AIScoring_Sleep: ; 387e3
+AI_Smart_Sleep: ; 387e3
 	ld b, EFFECT_DREAM_EATER
-	call AIHasMove
+	call AIHasMoveEffect
 	jr c, .asm_387f0
 
 	ld b, EFFECT_NIGHTMARE
-	call AIHasMove
+	call AIHasMoveEffect
 	ret nc
 
 .asm_387f0
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	dec [hl]
@@ -406,7 +408,7 @@
 ; 387f7
 
 
-AIScoring_LeechHit: ; 387f7
+AI_Smart_LeechHit: ; 387f7
 	push hl
 	ld a, 1
 	ld [hBattleTurn], a
@@ -416,28 +418,28 @@
 	ld a, [$d265]
 	cp 10 ; 1.0
 	jr c, .asm_38815
-
 	ret z
-	call AICheckEnemyMaxHP
 
+	call AICheckEnemyMaxHP
 	ret c
-	call Function39521
 
+	call AI_80_20
 	ret c
+
 	dec [hl]
 	ret
 
 .asm_38815
 	call Random
-
-	cp $64
+	cp 100
 	ret c
+
 	inc [hl]
 	ret
 ; 3881d
 
 
-AIScoring_LockOn: ; 3881d
+AI_Smart_LockOn: ; 3881d
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_LOCK_ON, a
 	jr nz, .asm_38882
@@ -504,7 +506,7 @@
 
 .asm_3887a
 	pop hl
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -543,9 +545,9 @@
 ; 388a6
 
 
-AIScoring_Explosion: ; 388a6
+AI_Smart_Explosion: ; 388a6
 	push hl
-	callba Function349f4
+	callba CountEnemyAliveMons
 	pop hl
 	jr nc, .asm_388b7
 
@@ -573,7 +575,7 @@
 ; 388ca
 
 
-AIScoring_DreamEater: ; 388ca
+AI_Smart_DreamEater: ; 388ca
 	call Random
 
 	cp $19
@@ -585,7 +587,7 @@
 ; 388d4
 
 
-AIScoring_EvasionUp: ; 388d4
+AI_Smart_EvasionUp: ; 388d4
 	ld a, [EnemyEvaLevel]
 	cp $d
 	jp nc, AIDiscourageMove
@@ -617,12 +619,12 @@
 	call AICheckEnemyHalfHP
 	jr nc, .asm_3890a
 
-	call Function39521
+	call AI_80_20
 	jr c, .asm_388ef
 	jr .asm_38911
 
 .asm_3890a
-	call Function39527
+	call AI_50_50
 	jr c, .asm_38911
 
 .asm_3890f
@@ -666,7 +668,7 @@
 	ret
 
 .asm_38941
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -674,7 +676,7 @@
 ; 38947
 
 
-AIScoring_AlwaysHit: ; 38947
+AI_Smart_AlwaysHit: ; 38947
 	ld a, [EnemyAccLevel]
 	cp $5
 	jr c, .asm_38954
@@ -684,9 +686,9 @@
 	ret c
 
 .asm_38954
-	call Function39521
-
+	call AI_80_20
 	ret c
+
 	dec [hl]
 	dec [hl]
 	ret
@@ -693,7 +695,7 @@
 ; 3895b
 
 
-AIScoring_MirrorMove: ; 3895b
+AI_Smart_MirrorMove: ; 3895b
 	ld a, [LastEnemyCounterMove]
 	and a
 	jr nz, .asm_38968
@@ -705,13 +707,13 @@
 
 .asm_38968
 	push hl
-	ld hl, Table_0x39301
+	ld hl, GoodMoves
 	ld de, 1
 	call IsInArray
 	pop hl
 	ret nc
 
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -727,7 +729,7 @@
 ; 38985
 
 
-AIScoring_AccuracyDown: ; 38985
+AI_Smart_AccuracyDown: ; 38985
 	call AICheckPlayerMaxHP
 	jr nc, .asm_389a0
 
@@ -758,12 +760,12 @@
 	call AICheckPlayerHalfHP
 	jr nc, .asm_389b8
 
-	call Function39521
+	call AI_80_20
 	jr c, .asm_3899d
 	jr .asm_389bf
 
 .asm_389b8
-	call Function39527
+	call AI_50_50
 	jr c, .asm_389bf
 
 .asm_389bd
@@ -806,7 +808,7 @@
 	ret
 
 .asm_389ef
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -814,7 +816,7 @@
 ; 389f5
 
 
-AIScoring_Haze: ; 389f5
+AI_Smart_Haze: ; 389f5
 	push hl
 	ld hl, EnemyAtkLevel
 	ld c, $8
@@ -851,7 +853,7 @@
 ; 38a1e
 
 
-AIScoring_Bide: ; 38a1e
+AI_Smart_Bide: ; 38a1e
 	call AICheckEnemyMaxHP
 	ret c
 	call Random
@@ -862,7 +864,7 @@
 ; 38a2a
 
 
-AIScoring_Whirlwind: ; 38a2a
+AI_Smart_Whirlwind: ; 38a2a
 	push hl
 	callab Function3484e
 	ld a, [$c716]
@@ -874,10 +876,10 @@
 ; 38a3a
 
 
-AIScoring_Heal:
-AIScoring_MorningSun:
-AIScoring_Synthesis:
-AIScoring_Moonlight: ; 38a3a
+AI_Smart_Heal:
+AI_Smart_MorningSun:
+AI_Smart_Synthesis:
+AI_Smart_Moonlight: ; 38a3a
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_38a45
 	call AICheckEnemyHalfHP
@@ -895,8 +897,8 @@
 ; 38a4e
 
 
-AIScoring_Toxic:
-AIScoring_LeechSeed: ; 38a4e
+AI_Smart_Toxic:
+AI_Smart_LeechSeed: ; 38a4e
 	call AICheckPlayerHalfHP
 	ret c
 	inc [hl]
@@ -904,8 +906,8 @@
 ; 38a54
 
 
-AIScoring_LightScreen:
-AIScoring_Reflect: ; 38a54
+AI_Smart_LightScreen:
+AI_Smart_Reflect: ; 38a54
 	call AICheckEnemyMaxHP
 	ret c
 	call Random
@@ -916,7 +918,7 @@
 ; 38a60
 
 
-AIScoring_Ohko: ; 38a60
+AI_Smart_Ohko: ; 38a60
 	ld a, [BattleMonLevel]
 	ld b, a
 	ld a, [EnemyMonLevel]
@@ -929,7 +931,7 @@
 ; 38a71
 
 
-AIScoring_Bind: ; 38a71
+AI_Smart_Bind: ; 38a71
 	ld a, [$c730]
 	and a
 	jr nz, .asm_38a8b
@@ -947,7 +949,7 @@
 	jr z, .asm_38a91
 
 .asm_38a8b
-	call Function39527
+	call AI_50_50
 	ret c
 	inc [hl]
 	ret
@@ -955,7 +957,7 @@
 .asm_38a91
 	call AICheckEnemyQuarterHP
 	ret nc
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	dec [hl]
@@ -963,8 +965,8 @@
 ; 38a9c
 
 
-AIScoring_RazorWind:
-AIScoring_Unused2B: ; 38a9c
+AI_Smart_RazorWind:
+AI_Smart_Unused2B: ; 38a9c
 	ld a, [EnemySubStatus1]
 	bit SUBSTATUS_PERISH, a
 	jr z, .asm_38aaa
@@ -1018,7 +1020,7 @@
 ; 38adb
 
 
-AIScoring_Confuse: ; 38adb
+AI_Smart_Confuse: ; 38adb
 	call AICheckPlayerHalfHP
 	ret c
 	call Random
@@ -1033,7 +1035,7 @@
 ; 38aed
 
 
-AIScoring_SpDefenseUp2: ; 38aed
+AI_Smart_SpDefenseUp2: ; 38aed
 	call AICheckEnemyHalfHP
 	jr nc, .asm_38b10
 
@@ -1051,7 +1053,7 @@
 	ret c
 
 .asm_38b09
-	call Function39521
+	call AI_80_20
 	ret c
 	dec [hl]
 	dec [hl]
@@ -1063,7 +1065,7 @@
 ; 38b12
 
 
-AIScoring_Fly: ; 38b12
+AI_Smart_Fly: ; 38b12
 	ld a, [PlayerSubStatus3]
 	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
 	ret z
@@ -1076,7 +1078,7 @@
 ; 38b20
 
 
-AIScoring_SuperFang: ; 38b20
+AI_Smart_SuperFang: ; 38b20
 	call AICheckPlayerQuarterHP
 	ret c
 	inc [hl]
@@ -1084,7 +1086,7 @@
 ; 38b26
 
 
-AIScoring_Paralyze: ; 38b26
+AI_Smart_Paralyze: ; 38b26
 	call AICheckPlayerQuarterHP
 	jr nc, .asm_38b3a
 	call AICompareSpeed
@@ -1091,7 +1093,7 @@
 	ret c
 	call AICheckEnemyQuarterHP
 	ret nc
-	call Function39521
+	call AI_80_20
 	ret c
 	dec [hl]
 	dec [hl]
@@ -1098,7 +1100,7 @@
 	ret
 
 .asm_38b3a
-	call Function39527
+	call AI_50_50
 	ret c
 	inc [hl]
 	ret
@@ -1105,7 +1107,7 @@
 ; 38b40
 
 
-AIScoring_SpeedDownHit: ; 38b40
+AI_Smart_SpeedDownHit: ; 38b40
 	ld a, [wEnemyMoveStruct + MOVE_ANIM]
 	cp ICY_WIND
 	ret nz
@@ -1125,7 +1127,7 @@
 ; 38b5c
 
 
-AIScoring_Substitute: ; 38b5c
+AI_Smart_Substitute: ; 38b5c
 	call AICheckEnemyHalfHP
 	ret c
 	jp AIDiscourageMove
@@ -1132,12 +1134,12 @@
 ; 38b63
 
 
-AIScoring_HyperBeam: ; 38b63
+AI_Smart_HyperBeam: ; 38b63
 	call AICheckEnemyHalfHP
 	jr c, .asm_38b72
 	call AICheckEnemyQuarterHP
 	ret c
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	ret
@@ -1147,7 +1149,7 @@
 	cp 40
 	ret c
 	inc [hl]
-	call Function39527
+	call AI_50_50
 	ret c
 	inc [hl]
 	ret
@@ -1154,12 +1156,12 @@
 ; 38b7f
 
 
-AIScoring_Rage: ; 38b7f
+AI_Smart_Rage: ; 38b7f
 	ld a, [EnemySubStatus4]
 	bit SUBSTATUS_RAGE, a
 	jr z, .asm_38b9b
 
-	call Function39527
+	call AI_50_50
 	jr c, .asm_38b8c
 
 	dec [hl]
@@ -1179,7 +1181,7 @@
 	call AICheckEnemyHalfHP
 	jr nc, .asm_38ba6
 
-	call Function39521
+	call AI_80_20
 	ret nc
 	dec [hl]
 	ret
@@ -1190,7 +1192,7 @@
 ; 38ba8
 
 
-AIScoring_Mimic: ; 38ba8
+AI_Smart_Mimic: ; 38ba8
 	ld a, [LastEnemyCounterMove]
 	and a
 	jr z, .asm_38be9
@@ -1212,7 +1214,7 @@
 	jr c, .asm_38bef
 	jr z, .asm_38bd4
 
-	call Function39527
+	call AI_50_50
 	jr c, .asm_38bd4
 
 	dec [hl]
@@ -1220,13 +1222,13 @@
 .asm_38bd4
 	ld a, [LastEnemyCounterMove]
 	push hl
-	ld hl, Table_0x39301
+	ld hl, GoodMoves
 	ld de, 1
 	call IsInArray
 
 	pop hl
 	ret nc
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	ret
@@ -1241,7 +1243,7 @@
 ; 38bf1
 
 
-AIScoring_Counter: ; 38bf1
+AI_Smart_Counter: ; 38bf1
 	push hl
 	ld hl, PlayerUsedMoves
 	ld c, 4
@@ -1307,7 +1309,7 @@
 ; 38c3b
 
 
-AIScoring_Encore: ; 38c3b
+AI_Smart_Encore: ; 38c3b
 	call AICompareSpeed
 	jr nc, .asm_38c81
 
@@ -1393,7 +1395,7 @@
 ; 38ca4
 
 
-AIScoring_PainSplit: ; 38ca4
+AI_Smart_PainSplit: ; 38ca4
 	push hl
 	ld hl, EnemyMonHP
 	ld b, [hl]
@@ -1413,8 +1415,8 @@
 ; 38cba
 
 
-AIScoring_Snore:
-AIScoring_SleepTalk: ; 38cba
+AI_Smart_Snore:
+AI_Smart_SleepTalk: ; 38cba
 	ld a, [EnemyMonStatus]
 	and $7
 	cp $1
@@ -1433,7 +1435,7 @@
 ; 38ccb
 
 
-AIScoring_DefrostOpponent: ; 38ccb
+AI_Smart_DefrostOpponent: ; 38ccb
 	ld a, [EnemyMonStatus]
 	and $20
 	ret z
@@ -1444,7 +1446,7 @@
 ; 38cd5
 
 
-AIScoring_Spite: ; 38cd5
+AI_Smart_Spite: ; 38cd5
 	ld a, [LastEnemyCounterMove]
 	and a
 	jr nz, .asm_38ce7
@@ -1452,7 +1454,7 @@
 	call AICompareSpeed
 	jp c, AIDiscourageMove
 
-	call Function39527
+	call AI_50_50
 	ret c
 	inc [hl]
 	ret
@@ -1507,9 +1509,9 @@
 ; 38d19
 
 
-AIScoring_DestinyBond:
-AIScoring_Reversal:
-AIScoring_SkullBash: ; 38d19
+AI_Smart_DestinyBond:
+AI_Smart_Reversal:
+AI_Smart_SkullBash: ; 38d19
 	call AICheckEnemyQuarterHP
 	ret nc
 	inc [hl]
@@ -1517,7 +1519,7 @@
 ; 38d1f
 
 
-AIScoring_HealBell: ; 38d1f
+AI_Smart_HealBell: ; 38d1f
 	push hl
 	ld a, [OTPartyCount]
 	ld b, a
@@ -1556,7 +1558,7 @@
 .ok
 	and 1 << FRZ | SLP
 	ret z
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	dec [hl]
@@ -1571,7 +1573,7 @@
 ; 38d5a
 
 
-AIScoring_PriorityHit: ; 38d5a
+AI_Smart_PriorityHit: ; 38d5a
 	call AICompareSpeed
 
 	ret c
@@ -1602,7 +1604,7 @@
 ; 38d93
 
 
-AIScoring_Thief: ; 38d93
+AI_Smart_Thief: ; 38d93
 	ld a, [hl]
 	add $1e
 	ld [hl], a
@@ -1610,7 +1612,7 @@
 ; 38d98
 
 
-AIScoring_Conversion2: ; 38d98
+AI_Smart_Conversion2: ; 38d98
 	ld a, [LastPlayerMove]
 	and a
 	jr nz, .asm_38dc9
@@ -1634,18 +1636,17 @@
 	cp $a
 	pop hl
 	jr c, .asm_38dc9
-
 	ret z
-	call Function39527
 
+	call AI_50_50
 	ret c
+
 	dec [hl]
 	ret
 
 .asm_38dc9
 	call Random
-
-	cp $19
+	cp 25
 	ret c
 	inc [hl]
 	ret
@@ -1652,13 +1653,13 @@
 ; 38dd1
 
 
-AIScoring_Disable: ; 38dd1
+AI_Smart_Disable: ; 38dd1
 	call AICompareSpeed
 	jr nc, .asm_38df3
 
 	push hl
 	ld a, [LastEnemyCounterMove]
-	ld hl, Table_0x39301
+	ld hl, GoodMoves
 	ld de, 1
 	call IsInArray
 
@@ -1685,7 +1686,7 @@
 ; 38dfb
 
 
-AIScoring_MeanLook: ; 38dfb
+AI_Smart_MeanLook: ; 38dfb
 	call AICheckEnemyHalfHP
 	jr nc, .asm_38e24
 
@@ -1714,7 +1715,7 @@
 	ret
 
 .asm_38e26
-	call Function39521
+	call AI_80_20
 	ret c
 	dec [hl]
 	dec [hl]
@@ -1750,8 +1751,8 @@
 ; 38e4a
 
 
-AIScoring_Nightmare: ; 38e4a
-	call Function39527
+AI_Smart_Nightmare: ; 38e4a
+	call AI_50_50
 	ret c
 	dec [hl]
 	ret
@@ -1758,7 +1759,7 @@
 ; 38e50
 
 
-AIScoring_FlameWheel: ; 38e50
+AI_Smart_FlameWheel: ; 38e50
 	ld a, [EnemyMonStatus]
 	bit FRZ, a
 	ret z
@@ -1771,7 +1772,7 @@
 ; 38e5c
 
 
-AIScoring_Curse: ; 38e5c
+AI_Smart_Curse: ; 38e5c
 	ld a, [EnemyMonType1]
 	cp GHOST
 	jr z, .ghostcurse
@@ -1796,7 +1797,7 @@
 	ld a, [BattleMonType2]
 	cp SPECIAL
 	ret nc
-	call Function39521
+	call AI_80_20
 	ret c
 	dec [hl]
 	dec [hl]
@@ -1817,7 +1818,7 @@
 	jp nz, AIDiscourageMove
 
 	push hl
-	callba Function349f4
+	callba CountEnemyAliveMons
 	pop hl
 	jr nc, .asm_38eb0
 
@@ -1851,9 +1852,9 @@
 	ret nz
 
 .asm_38ecb
-	call Function39527
-
+	call AI_50_50
 	ret c
+
 	dec [hl]
 	dec [hl]
 	ret
@@ -1860,7 +1861,7 @@
 ; 38ed2
 
 
-AIScoring_Protect: ; 38ed2
+AI_Smart_Protect: ; 38ed2
 	ld a, [$c681]
 	and a
 	jr nz, .asm_38f13
@@ -1895,7 +1896,7 @@
 	jr c, .asm_38f14
 
 .asm_38f0d
-	call Function39521
+	call AI_80_20
 	ret c
 	dec [hl]
 	ret
@@ -1913,7 +1914,7 @@
 ; 38f1d
 
 
-AIScoring_Foresight: ; 38f1d
+AI_Smart_Foresight: ; 38f1d
 	ld a, [EnemyAccLevel]
 	cp $5
 	jr c, .asm_38f41
@@ -1944,11 +1945,11 @@
 ; 38f4a
 
 
-AIScoring_PerishSong: ; 38f4a
+AI_Smart_PerishSong: ; 38f4a
 	push hl
-	callab Function349f4
+	callab CountEnemyAliveMons
 	pop hl
-	jr c, .asm_38f75
+	jr c, .no
 
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_CANT_RUN, a
@@ -1961,7 +1962,7 @@
 	pop hl
 	ret c
 
-	call Function39527
+	call AI_50_50
 	ret c
 
 	inc [hl]
@@ -1968,13 +1969,13 @@
 	ret
 
 .asm_38f6f
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
 	ret
 
-.asm_38f75
+.no
 	ld a, [hl]
 	add 5
 	ld [hl], a
@@ -1982,7 +1983,7 @@
 ; 38f7a
 
 
-AIScoring_Sandstorm: ; 38f7a
+AI_Smart_Sandstorm: ; 38f7a
 	ld a, [BattleMonType1]
 	push hl
 	ld hl, .SandstormImmuneTypes
@@ -2002,7 +2003,7 @@
 	call AICheckPlayerHalfHP
 	jr nc, .asm_38fa6
 
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -2023,7 +2024,7 @@
 ; 38fac
 
 
-AIScoring_Endure: ; 38fac
+AI_Smart_Endure: ; 38fac
 	ld a, [$c681]
 	and a
 	jr nz, .asm_38fd8
@@ -2035,10 +2036,10 @@
 	jr c, .asm_38fd9
 
 	ld b, EFFECT_REVERSAL
-	call AIHasMove
+	call AIHasMoveEffect
 	jr nc, .asm_38fcb
 
-	call Function39521
+	call AI_80_20
 	ret c
 
 	dec [hl]
@@ -2050,9 +2051,10 @@
 	ld a, [EnemySubStatus5]
 	bit SUBSTATUS_LOCK_ON, a
 	ret z
-	call Function39527
 
+	call AI_50_50
 	ret c
+
 	dec [hl]
 	dec [hl]
 	ret
@@ -2066,7 +2068,7 @@
 ; 38fdb
 
 
-AIScoring_FuryCutter: ; 38fdb
+AI_Smart_FuryCutter: ; 38fdb
 	ld a, [EnemyFuryCutterCount]
 	and a
 	jr z, .end
@@ -2089,7 +2091,7 @@
 ; 38fef
 
 
-AIScoring_Rollout: ; 38fef
+AI_Smart_Rollout: ; 38fef
 	ld a, [EnemySubStatus1]
 	bit SUBSTATUS_IN_LOVE, a
 	jr nz, .asm_39020
@@ -2120,7 +2122,7 @@
 	ret
 
 .asm_39020
-	call Function39521
+	call AI_80_20
 	ret c
 	inc [hl]
 	ret
@@ -2127,13 +2129,13 @@
 ; 39026
 
 
-AIScoring_Swagger:
-AIScoring_Attract: ; 39026
+AI_Smart_Swagger:
+AI_Smart_Attract: ; 39026
 	ld a, [PlayerTurnsTaken]
 	and a
 	jr z, .first_turn
 
-	call Function39521
+	call AI_80_20
 	ret c
 	inc [hl]
 	ret
@@ -2147,10 +2149,10 @@
 ; 3903a
 
 
-AIScoring_Safeguard: ; 3903a
+AI_Smart_Safeguard: ; 3903a
 	call AICheckPlayerHalfHP
 	ret c
-	call Function39521
+	call AI_80_20
 	ret c
 	inc [hl]
 	ret
@@ -2157,8 +2159,8 @@
 ; 39044
 
 
-AIScoring_Magnitude:
-AIScoring_Earthquake: ; 39044
+AI_Smart_Magnitude:
+AI_Smart_Earthquake: ; 39044
 	ld a, [LastEnemyCounterMove]
 	cp DIG
 	ret nz
@@ -2178,7 +2180,7 @@
 	; will use Dig this turn.
 	call AICompareSpeed
 	ret c
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	ret
@@ -2185,7 +2187,7 @@
 ; 39062
 
 
-AIScoring_BatonPass: ; 39062
+AI_Smart_BatonPass: ; 39062
 	push hl
 	callab Function3484e
 	ld a, [$c716]
@@ -2197,16 +2199,16 @@
 ; 39072
 
 
-AIScoring_Pursuit: ; 39072
+AI_Smart_Pursuit: ; 39072
 	call AICheckPlayerQuarterHP
 	jr nc, .asm_3907d
-	call Function39521
+	call AI_80_20
 	ret c
 	inc [hl]
 	ret
 
 .asm_3907d
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	dec [hl]
@@ -2214,7 +2216,7 @@
 ; 39084
 
 
-AIScoring_RapidSpin: ; 39084
+AI_Smart_RapidSpin: ; 39084
 	ld a, [$c731]
 	and a
 	jr nz, .asm_39097
@@ -2228,9 +2230,9 @@
 	ret z
 
 .asm_39097
-	call Function39521
-
+	call AI_80_20
 	ret c
+
 	dec [hl]
 	dec [hl]
 	ret
@@ -2237,7 +2239,7 @@
 ; 3909e
 
 
-AIScoring_HiddenPower: ; 3909e
+AI_Smart_HiddenPower: ; 3909e
 	push hl
 	ld a, 1
 	ld [hBattleTurn], a
@@ -2246,32 +2248,32 @@
 	pop hl
 
 	ld a, [$d265]
-	cp $a
-	jr c, .asm_390c9
+	cp 10
+	jr c, .bad
 
 	ld a, d
 	cp 50
-	jr c, .asm_390c9
+	jr c, .bad
 
 	ld a, [$d265]
-	cp $b
-	jr nc, .asm_390c7
+	cp 11
+	jr nc, .good
 
 	ld a, d
 	cp 70
 	ret c
 
-.asm_390c7
+.good
 	dec [hl]
 	ret
 
-.asm_390c9
+.bad
 	inc [hl]
 	ret
 ; 390cb
 
 
-AIScoring_RainDance: ; 390cb
+AI_Smart_RainDance: ; 390cb
 	ld a, [BattleMonType1]
 	cp WATER
 	jr z, AIBadWeatherType
@@ -2286,7 +2288,7 @@
 
 	push hl
 	ld hl, RainDanceMoves
-	jr AIScoring_WeatherMove
+	jr AI_Smart_WeatherMove
 ; 390e7
 
 RainDanceMoves: ; 390e7
@@ -2305,7 +2307,7 @@
 ; 390f3
 
 
-AIScoring_SunnyDay: ; 390f3
+AI_Smart_SunnyDay: ; 390f3
 	ld a, [BattleMonType1]
 	cp FIRE
 	jr z, AIBadWeatherType
@@ -2325,7 +2327,7 @@
 ; 3910d
 
 
-AIScoring_WeatherMove: ; 3910d
+AI_Smart_WeatherMove: ; 3910d
 	call AIHasMoveInArray
 	pop hl
 	jr nc, AIBadWeatherType
@@ -2333,7 +2335,7 @@
 	call AICheckPlayerHalfHP
 	jr nc, AIBadWeatherType
 
-	call Function39527
+	call AI_50_50
 	ret c
 
 	dec [hl]
@@ -2379,7 +2381,7 @@
 ; 3913d
 
 
-AIScoring_BellyDrum: ; 3913d
+AI_Smart_BellyDrum: ; 3913d
 	ld a, [EnemyAtkLevel]
 	cp $a
 	jr nc, .asm_3914d
@@ -2400,7 +2402,7 @@
 ; 39152
 
 
-AIScoring_PsychUp: ; 39152
+AI_Smart_PsychUp: ; 39152
 	push hl
 	ld hl, EnemyAtkLevel
 	ld b, $8
@@ -2437,8 +2439,7 @@
 	ld a, [EnemyEvaLevel]
 	cp $8
 	ret nc
-	call Function39521
-
+	call AI_80_20
 	ret c
 	dec [hl]
 	ret
@@ -2450,7 +2451,7 @@
 ; 3918b
 
 
-AIScoring_MirrorCoat: ; 3918b
+AI_Smart_MirrorCoat: ; 3918b
 	push hl
 	ld hl, PlayerUsedMoves
 	ld c, $4
@@ -2515,8 +2516,8 @@
 ; 391d5
 
 
-AIScoring_Twister:
-AIScoring_Gust: ; 391d5
+AI_Smart_Twister:
+AI_Smart_Gust: ; 391d5
 	ld a, [LastEnemyCounterMove]
 	cp FLY
 	ret nz
@@ -2535,7 +2536,7 @@
 .asm_391e9
 	call AICompareSpeed
 	ret c
-	call Function39527
+	call AI_50_50
 	ret c
 	dec [hl]
 	ret
@@ -2542,7 +2543,7 @@
 ; 391f3
 
 
-AIScoring_FutureSight: ; 391f3
+AI_Smart_FutureSight: ; 391f3
 	call AICompareSpeed
 	ret nc
 
@@ -2556,12 +2557,12 @@
 ; 39200
 
 
-AIScoring_Stomp: ; 39200
+AI_Smart_Stomp: ; 39200
 	ld a, [$c6fe]
 	and a
 	ret z
 
-	call Function39521
+	call AI_80_20
 	ret c
 
 	dec [hl]
@@ -2569,7 +2570,7 @@
 ; 3920b
 
 
-AIScoring_Solarbeam: ; 3920b
+AI_Smart_Solarbeam: ; 3920b
 	ld a, [Weather]
 	cp WEATHER_SUN
 	jr z, .asm_3921e
@@ -2586,7 +2587,7 @@
 	ret
 
 .asm_3921e
-	call Function39521
+	call AI_80_20
 	ret c
 
 	dec [hl]
@@ -2595,7 +2596,7 @@
 ; 39225
 
 
-AIScoring_Thunder: ; 39225
+AI_Smart_Thunder: ; 39225
 	ld a, [Weather]
 	cp WEATHER_SUN
 	ret nz
@@ -2759,7 +2760,7 @@
 ; 392ca
 
 
-AIHasMove: ; 392ca
+AIHasMoveEffect: ; 392ca
 ; Return carry if the enemy has move b.
 	push hl
 	ld hl, EnemyMonMoves
@@ -2768,23 +2769,23 @@
 .checkmove
 	ld a, [hli]
 	and a
-	jr z, .asm_392e0
+	jr z, .no
 
 	call AIGetEnemyMove
 
 	ld a, [wEnemyMoveStruct + MOVE_EFFECT]
 	cp b
-	jr z, .asm_392e3
+	jr z, .yes
 
 	dec c
 	jr nz, .checkmove
 
-.asm_392e0
+.no
 	pop hl
 	and a
 	ret
 
-.asm_392e3
+.yes
 	pop hl
 	scf
 	ret
@@ -2798,27 +2799,27 @@
 	push de
 	push bc
 
-.asm_392e9
+.next
 	ld a, [hli]
 	cp $ff
-	jr z, .asm_392fd
+	jr z, .done
 
 	ld b, a
 	ld c, EnemyMonMovesEnd - EnemyMonMoves + 1
 	ld de, EnemyMonMoves
 
-.asm_392f4
+.check
 	dec c
-	jr z, .asm_392e9
+	jr z, .next
 
 	ld a, [de]
 	inc de
 	cp b
-	jr nz, .asm_392f4
+	jr nz, .check
 
 	scf
 
-.asm_392fd
+.done
 	pop bc
 	pop de
 	pop hl
@@ -2826,7 +2827,8 @@
 ; 39301
 
 
-Table_0x39301: ; 39301
+GoodMoves: ; 39301
+; Moves that are usable all-around.
 	db DOUBLE_EDGE
 	db SING
 	db FLAMETHROWER
@@ -2850,7 +2852,7 @@
 ; 39315
 
 
-AIScoring_Opportunist: ; 39315
+AI_Opportunist: ; 39315
 ; Don't use stall moves when the player's HP is low.
 
 	call AICheckEnemyHalfHP
@@ -2859,7 +2861,7 @@
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_39322
 
-	call Function39527
+	call AI_50_50
 	ret c
 
 .asm_39322
@@ -2932,7 +2934,7 @@
 
 
 
-AIScoring_Aggressive: ; 39369
+AI_Aggressive: ; 39369
 ; Use whatever does the most damage.
 
 ; Figure out which attack does the most damage and put it in c.
@@ -3061,7 +3063,7 @@
 ; 39418
 
 
-AIScoring_Cautious: ; 39418
+AI_Cautious: ; 39418
 ; Don't use moves with residual effects after turn 1.
 
 	ld a, [EnemyTurnsTaken]
@@ -3118,7 +3120,7 @@
 
 
 
-AIScoring_StatusImmunity: ; 39453
+AI_Status: ; 39453
 ; Don't use status moves that don't affect the player.
 
 	ld hl, Buffer1 - 1
@@ -3182,7 +3184,7 @@
 
 
 
-AIScoring_Risky: ; 394a9
+AI_Risky: ; 394a9
 ; Use any move that will KO the opponent.
 
 	ld hl, Buffer1 - 1
@@ -3256,7 +3258,7 @@
 
 
 
-AIScoring_None: ; 39502
+AI_None: ; 39502
 	ret
 ; 39503
 
@@ -3289,7 +3291,7 @@
 ; 39521
 
 
-Function39521: ; 39521
+AI_80_20: ; 39521
 	call Random
 	cp 50 ; 1/5
 	ret
@@ -3296,7 +3298,7 @@
 ; 39527
 
 
-Function39527: ; 39527
+AI_50_50: ; 39527
 	call Random
 	cp $80 ; 1/2
 	ret
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -480,7 +480,7 @@
 	jp .asm_3c3f1
 
 .asm_3c34c
-	callab Function3846c
+	callab AI_Switch
 	call SetEnemyTurn
 	call SpikesDamage
 	jp Function3c3f3
@@ -5454,7 +5454,7 @@
 ; 3e3ff
 
 Function3e3ff: ; 3e3ff
-	callab Function3846c
+	callab AI_Switch
 	call SetEnemyTurn
 	jp SpikesDamage
 ; 3e40b
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -1041,6 +1041,7 @@
 	ld bc, EnemyTurnsTaken
 
 .asm_34570
+
 ; If we've gotten this far, this counts as a turn.
 	ld a, [bc]
 	inc a
@@ -1052,7 +1053,7 @@
 	ret z
 
 	ld a, [de]
-	and %111 ; rollout | bide | ???
+	and 1 << SUBSTATUS_IN_LOOP | 1 << SUBSTATUS_RAMPAGE | 1 << SUBSTATUS_BIDE
 	ret nz
 
 	call .asm_345ad
@@ -1060,7 +1061,7 @@
 	and a
 	jp nz, EndMoveEffect
 
-; SubStatus5
+	; SubStatus5
 	inc de
 	inc de
 
@@ -1542,28 +1543,28 @@
 .asm_347e7
 	ld a, [hli]
 	cp $ff
-	jr z, .asm_3482f ; 0x347ea $43
+	jr z, .asm_3482f
 	cp $fe
-	jr nz, .asm_347fb ; 0x347ee $b
+	jr nz, .asm_347fb
 	ld a, BATTLE_VARS_SUBSTATUS1_OPP
 	call GetBattleVar
 	bit SUBSTATUS_IDENTIFIED, a
-	jr nz, .asm_3482f ; 0x347f7 $36
-	jr .asm_347e7 ; 0x347f9 $ec
+	jr nz, .asm_3482f
+	jr .asm_347e7
 .asm_347fb
 	cp d
-	jr nz, .asm_34807 ; 0x347fc $9
+	jr nz, .asm_34807
 	ld a, [hli]
 	cp b
-	jr z, .asm_3480b ; 0x34800 $9
+	jr z, .asm_3480b
 	cp c
-	jr z, .asm_3480b ; 0x34803 $6
-	jr .asm_34808 ; 0x34805 $1
+	jr z, .asm_3480b
+	jr .asm_34808
 .asm_34807
 	inc hl
 .asm_34808
 	inc hl
-	jr .asm_347e7 ; 0x34809 $dc
+	jr .asm_347e7
 .asm_3480b
 	xor a
 	ld [$ffb3], a
@@ -1572,17 +1573,18 @@
 	ld a, [hli]
 	ld [$ffb6], a
 	ld a, [$d265]
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
-	ld a, $a
-	ld [$ffb7], a
+	ld a, 10
+	ld [hDivisor], a
 	push bc
-	ld b, $4
+	ld b, 4
 	call Divide
 	pop bc
 	ld a, [$ffb6]
 	ld [$d265], a
-	jr .asm_347e7 ; 0x3482d $b8
+	jr .asm_347e7
+
 .asm_3482f
 	pop bc
 	pop de
@@ -1613,7 +1615,7 @@
 	push hl
 	push de
 	push bc
-	ld a, $a
+	ld a, 10
 	ld [$c716], a
 	ld hl, PlayerUsedMoves
 	ld a, [hl]
@@ -1795,24 +1797,26 @@
 Function34941: ; 34941
 	xor a
 	ld [$c717], a
-	call Function349f4
+	call CountEnemyAliveMons
 	ret c
 
 	ld a, [EnemySubStatus1]
 	bit SUBSTATUS_PERISH, a
-	jr z, .asm_34986
+	jr z, .no_perish
 
 	ld a, [EnemyPerishCount]
 	cp 1
-	jr nz, .asm_34986
+	jr nz, .no_perish
 
-	call Function349f4
+	; Perish count is 1
+
+	call CountEnemyAliveMons
 	call Function34b77
 	call Function34b20
 	call Function34a85
 
 	ld a, e
-	cp $2
+	cp 2
 	jr nz, .asm_34971
 
 	ld a, [$c716]
@@ -1821,7 +1825,7 @@
 	ret
 
 .asm_34971
-	call Function349f4
+	call CountEnemyAliveMons
 	sla c
 	sla c
 	ld b, $ff
@@ -1836,10 +1840,11 @@
 	ld [$c717], a
 	ret
 
-.asm_34986
+.no_perish
+
 	call Function3484e
 	ld a, [$c716]
-	cp $b
+	cp 11
 	ret nc
 
 	ld a, [LastEnemyCounterMove]
@@ -1859,12 +1864,12 @@
 
 	ld b, a
 	ld a, e
-	cp $2
+	cp 2
 	jr z, .asm_349be
 
 	call Function3484e
 	ld a, [$c716]
-	cp $a
+	cp 10
 	ret nc
 
 	ld a, b
@@ -1876,7 +1881,7 @@
 	ld c, $10
 	call Function3484e
 	ld a, [$c716]
-	cp $a
+	cp 10
 	jr nc, .asm_349cc
 	ld c, $20
 
@@ -1889,10 +1894,10 @@
 .asm_349d2
 	call Function3484e
 	ld a, [$c716]
-	cp $a
+	cp 10
 	ret nc
 
-	call Function349f4
+	call CountEnemyAliveMons
 	call Function34b77
 	call Function34b20
 	call Function34a85
@@ -1908,7 +1913,7 @@
 ; 349f4
 
 
-Function349f4: ; 349f4
+CountEnemyAliveMons: ; 349f4
 	ld a, [OTPartyCount]
 	cp 2
 	jr c, .only_one
@@ -1964,7 +1969,7 @@
 	ld hl, OTPartyMon1
 	ld a, [OTPartyCount]
 	ld b, a
-	ld c, $20
+	ld c, 1 << (PARTY_LENGTH - 1)
 	ld d, 0
 	xor a
 	ld [$c716], a
@@ -2027,8 +2032,8 @@
 	ld a, [OTPartyCount]
 	ld e, a
 	ld hl, OTPartyMon1HP
-	ld b, $20
-	ld c, $0
+	ld b, 1 << (PARTY_LENGTH - 1)
+	ld c, 0
 .asm_34a91
 	ld a, [hli]
 	or [hl]
@@ -2061,9 +2066,9 @@
 	ld a, $ff
 	ld [$c716], a
 	ld hl, OTPartyMon1Moves
-	ld b, $20
-	ld d, $0
-	ld e, $0
+	ld b, 1 << (PARTY_LENGTH - 1)
+	ld d, 0
+	ld e, 0
 .asm_34ab5
 	ld a, b
 	and c
@@ -2072,7 +2077,7 @@
 	push hl
 	push bc
 	ld b, NUM_MOVES
-	ld c, $0
+	ld c, 0
 .asm_34abf
 	ld a, [hli]
 	and a
@@ -2090,14 +2095,14 @@
 	ld hl, BattleMonType1
 	call Function347d3
 	ld a, [$d265]
-	cp $a
+	cp 10
 	jr c, .asm_34ae9
 
-	ld e, $1
-	cp $b
+	ld e, 1
+	cp 11
 	jr c, .asm_34ae9
 
-	ld e, $2
+	ld e, 2
 	jr .asm_34aef
 
 .asm_34ae9
@@ -2157,8 +2162,8 @@
 Function34b20: ; 34b20
 	push bc
 	ld hl, OTPartySpecies
-	ld b, $20
-	ld c, $0
+	ld b, 1 << (PARTY_LENGTH - 1)
+	ld c, 0
 
 .asm_34b28
 	ld a, [hli]
@@ -2350,7 +2355,7 @@
 	call .ThunderRain
 	ret z
 
-	call .UnleashedEnergy
+	call .XAccuracy
 	ret nz
 
 	; Perfect-accuracy moves
@@ -2545,11 +2550,10 @@
 	ret
 
 
-.UnleashedEnergy
-; Return nz if unleashing energy from Bide.
+.XAccuracy
 	ld a, BATTLE_VARS_SUBSTATUS4
 	call GetBattleVar
-	bit SUBSTATUS_UNLEASH, a
+	bit SUBSTATUS_X_ACCURACY, a
 	ret
 
 
@@ -6915,8 +6919,9 @@
 
 	ld a, BATTLE_VARS_SUBSTATUS3
 	call GetBattleVar
-	bit 0, a
+	bit SUBSTATUS_BIDE, a
 	ret z
+
 	ld hl, PlayerRolloutCount
 	ld a, [hBattleTurn]
 	and a
@@ -6925,9 +6930,10 @@
 .asm_36684
 	dec [hl]
 	jr nz, .asm_366dc
+
 	ld a, BATTLE_VARS_SUBSTATUS3
 	call GetBattleVarAddr
-	res 0, [hl]
+	res SUBSTATUS_BIDE, [hl]
 
 	ld hl, UnleashedEnergyText
 	call StdBattleTextBox
@@ -6988,13 +6994,13 @@
 	ld bc, PlayerRolloutCount
 	ld a, [hBattleTurn]
 	and a
-	jr z, .asm_366f6 ; 366ee $6
+	jr z, .asm_366f6
 	ld de, $c684
 	ld bc, EnemyRolloutCount
 .asm_366f6
 	ld a, BATTLE_VARS_SUBSTATUS3
 	call GetBattleVarAddr
-	set 0, [hl]
+	set SUBSTATUS_BIDE, [hl]
 	xor a
 	ld [de], a
 	inc de
@@ -7002,11 +7008,11 @@
 	ld [wPlayerMoveStruct + MOVE_EFFECT], a
 	ld [wEnemyMoveStruct + MOVE_EFFECT], a
 	call BattleRandom
-	and $1
+	and 1
 	inc a
 	inc a
 	ld [bc], a
-	ld a, $1
+	ld a, 1
 	ld [$c689], a
 	call AnimateCurrentMove
 	jp EndMoveEffect
@@ -7219,7 +7225,7 @@
 	ld a, [wPlayerMoveStruct + MOVE_ANIM]
 	jp .asm_36975
 .asm_36869
-	call Function349f4
+	call CountEnemyAliveMons
 	jr c, .asm_368ca ; 3686c $5c
 	ld a, [$c70f]
 	and a
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -109,9 +109,10 @@
 SUBSTATUS_RAGE         EQU 6
 SUBSTATUS_RECHARGE     EQU 5
 SUBSTATUS_SUBSTITUTE   EQU 4
+;                      EQU 3
 SUBSTATUS_FOCUS_ENERGY EQU 2
 SUBSTATUS_MIST         EQU 1
-SUBSTATUS_UNLEASH      EQU 0
+SUBSTATUS_X_ACCURACY   EQU 0
 
 SUBSTATUS_CANT_RUN     EQU 7
 SUBSTATUS_DESTINY_BOND EQU 6
@@ -118,6 +119,8 @@
 SUBSTATUS_LOCK_ON      EQU 5
 SUBSTATUS_ENCORED      EQU 4
 SUBSTATUS_TRANSFORMED  EQU 3
+;                      EQU 2
+;                      EQU 1
 SUBSTATUS_TOXIC        EQU 0
 
 ; environmental
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -73,3 +73,18 @@
 STEP_BACK_LEDGE EQU 6
 STEP_WALK_IN_PLACE EQU 7
 
+
+; ai
+CONTEXT_USE_F      EQU 6
+UNKNOWN_USE_F      EQU 5
+ALWAYS_USE_F       EQU 4
+SWITCH_SOMETIMES_F EQU 2
+SWITCH_RARELY_F    EQU 1
+SWITCH_OFTEN_F     EQU 0
+
+CONTEXT_USE        EQU 1 << CONTEXT_USE_F
+UNKNOWN_USE        EQU 1 << UNKNOWN_USE_F
+ALWAYS_USE         EQU 1 << ALWAYS_USE_F
+SWITCH_SOMETIMES   EQU 1 << SWITCH_SOMETIMES_F
+SWITCH_RARELY      EQU 1 << SWITCH_RARELY_F
+SWITCH_OFTEN       EQU 1 << SWITCH_OFTEN_F
--- a/main.asm
+++ b/main.asm
@@ -41681,202 +41681,204 @@
 
 
 
-Function2c41a: ; 2c41a (b:441a)
-; More move AI.
+AI_Redundant: ; 2c41a
+; Check if move effect c will fail because it's already been used.
 	ld a, c
 	ld de, 3
-	ld hl, Unknown_2c42c
+	ld hl, .Moves
 	call IsInArray
-	jp nc, Function2c545
+	jp nc, .NotRedundant
 	inc hl
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
 	jp [hl]
-; 2c42c (b:442c)
 
-Unknown_2c42c: ; 2c42c
-	dbw EFFECT_DREAM_EATER,  Function2c524
-	dbw EFFECT_HEAL,         Function2c539
-	dbw EFFECT_LIGHT_SCREEN, Function2c487
-	dbw EFFECT_MIST,         Function2c48d
-	dbw EFFECT_FOCUS_ENERGY, Function2c493
-	dbw EFFECT_CONFUSE,      Function2c499
-	dbw EFFECT_TRANSFORM,    Function2c4a5
-	dbw EFFECT_REFLECT,      Function2c4ab
-	dbw EFFECT_SUBSTITUTE,   Function2c4b1
-	dbw EFFECT_LEECH_SEED,   Function2c4b7
-	dbw EFFECT_DISABLE,      Function2c4bd
-	dbw EFFECT_ENCORE,       Function2c4c2
-	dbw EFFECT_SNORE,        Function2c4c8
-	dbw EFFECT_SLEEP_TALK,   Function2c4c8
-	dbw EFFECT_MEAN_LOOK,    Function2c4d1
-	dbw EFFECT_NIGHTMARE,    Function2c4d7
-	dbw EFFECT_SPIKES,       Function2c4e3
-	dbw EFFECT_FORESIGHT,    Function2c4e9
-	dbw EFFECT_PERISH_SONG,  Function2c4ef
-	dbw EFFECT_SANDSTORM,    Function2c4f5
-	dbw EFFECT_ATTRACT,      Function2c4fe
-	dbw EFFECT_SAFEGUARD,    Function2c50c
-	dbw EFFECT_RAIN_DANCE,   Function2c512
-	dbw EFFECT_SUNNY_DAY,    Function2c51b
-	dbw EFFECT_TELEPORT,     Function2c541
-	dbw EFFECT_MORNING_SUN,  Function2c539
-	dbw EFFECT_SYNTHESIS,    Function2c539
-	dbw EFFECT_MOONLIGHT,    Function2c539
-	dbw EFFECT_SWAGGER,      Function2c52d
-	dbw EFFECT_FUTURE_SIGHT, Function2c533
-	db $ff
-; 2c487
+.Moves: ; 2c42c
+	dbw EFFECT_DREAM_EATER,  .DreamEater
+	dbw EFFECT_HEAL,         .Heal
+	dbw EFFECT_LIGHT_SCREEN, .LightScreen
+	dbw EFFECT_MIST,         .Mist
+	dbw EFFECT_FOCUS_ENERGY, .FocusEnergy
+	dbw EFFECT_CONFUSE,      .Confuse
+	dbw EFFECT_TRANSFORM,    .Transform
+	dbw EFFECT_REFLECT,      .Reflect
+	dbw EFFECT_SUBSTITUTE,   .Substitute
+	dbw EFFECT_LEECH_SEED,   .LeechSeed
+	dbw EFFECT_DISABLE,      .Disable
+	dbw EFFECT_ENCORE,       .Encore
+	dbw EFFECT_SNORE,        .Snore
+	dbw EFFECT_SLEEP_TALK,   .SleepTalk
+	dbw EFFECT_MEAN_LOOK,    .MeanLook
+	dbw EFFECT_NIGHTMARE,    .Nightmare
+	dbw EFFECT_SPIKES,       .Spikes
+	dbw EFFECT_FORESIGHT,    .Foresight
+	dbw EFFECT_PERISH_SONG,  .PerishSong
+	dbw EFFECT_SANDSTORM,    .Sandstorm
+	dbw EFFECT_ATTRACT,      .Attract
+	dbw EFFECT_SAFEGUARD,    .Safeguard
+	dbw EFFECT_RAIN_DANCE,   .RainDance
+	dbw EFFECT_SUNNY_DAY,    .SunnyDay
+	dbw EFFECT_TELEPORT,     .Teleport
+	dbw EFFECT_MORNING_SUN,  .MorningSun
+	dbw EFFECT_SYNTHESIS,    .Synthesis
+	dbw EFFECT_MOONLIGHT,    .Moonlight
+	dbw EFFECT_SWAGGER,      .Swagger
+	dbw EFFECT_FUTURE_SIGHT, .FutureSight
+	db -1
 
-Function2c487: ; 2c487
-	ld a, [EnemyScreens] ; $c700
-	bit 3, a
+.LightScreen: ; 2c487
+	ld a, [EnemyScreens]
+	bit SCREENS_LIGHT_SCREEN, a
 	ret
 
-Function2c48d: ; 2c48d
-	ld a, [EnemySubStatus4] ; $c670
-	bit 1, a
+.Mist: ; 2c48d
+	ld a, [EnemySubStatus4]
+	bit SUBSTATUS_MIST, a
 	ret
 
-Function2c493: ; 2c493
-	ld a, [EnemySubStatus4] ; $c670
-	bit 2, a
+.FocusEnergy: ; 2c493
+	ld a, [EnemySubStatus4]
+	bit SUBSTATUS_FOCUS_ENERGY, a
 	ret
 
-Function2c499: ; 2c499
-	ld a, [PlayerSubStatus3] ; $c66a
-	bit 7, a
+.Confuse: ; 2c499
+	ld a, [PlayerSubStatus3]
+	bit SUBSTATUS_CONFUSED, a
 	ret nz
-	ld a, [PlayerScreens] ; $c6ff
-	bit 2, a
+	ld a, [PlayerScreens]
+	bit SCREENS_SAFEGUARD, a
 	ret
 
-Function2c4a5: ; 2c4a5
-	ld a, [EnemySubStatus5] ; $c671
-	bit 3, a
+.Transform: ; 2c4a5
+	ld a, [EnemySubStatus5]
+	bit SUBSTATUS_TRANSFORMED, a
 	ret
 
-Function2c4ab: ; 2c4ab
-	ld a, [EnemyScreens] ; $c700
-	bit 4, a
+.Reflect: ; 2c4ab
+	ld a, [EnemyScreens]
+	bit SCREENS_REFLECT, a
 	ret
-; 2c4b1 (b:44b1)
 
-Function2c4b1: ; 2c4b1
+.Substitute: ; 2c4b1
 	ld a, [EnemySubStatus4]
-	bit 4, a
+	bit SUBSTATUS_SUBSTITUTE, a
 	ret
 
-Function2c4b7: ; 2c4b7
-	ld a, [PlayerSubStatus4] ; $c66b
-	bit 7, a
+.LeechSeed: ; 2c4b7
+	ld a, [PlayerSubStatus4]
+	bit SUBSTATUS_LEECH_SEED, a
 	ret
 
-Function2c4bd: ; 2c4bd
-	ld a, [PlayerDisableCount] ; $c675
+.Disable: ; 2c4bd
+	ld a, [PlayerDisableCount]
 	and a
 	ret
 
-Function2c4c2: ; 2c4c2
-	ld a, [PlayerSubStatus5] ; $c66c
-	bit 4, a
+.Encore: ; 2c4c2
+	ld a, [PlayerSubStatus5]
+	bit SUBSTATUS_ENCORED, a
 	ret
 
-Function2c4c8: ; 2c4c8
-	ld a, [EnemyMonStatus] ; $d214
-	and $7
-	jr z, Function2c541
-	jr Function2c545
+.Snore:
+.SleepTalk: ; 2c4c8
+	ld a, [EnemyMonStatus]
+	and SLP
+	jr z, .Redundant
+	jr .NotRedundant
 
-Function2c4d1: ; 2c4d1
-	ld a, [EnemySubStatus5] ; $c671
-	bit 7, a
+.MeanLook: ; 2c4d1
+	ld a, [EnemySubStatus5]
+	bit SUBSTATUS_CANT_RUN, a
 	ret
-; 2c4d7 (b:44d7)
 
-Function2c4d7: ; 2c4d7
+.Nightmare: ; 2c4d7
 	ld a, [BattleMonStatus]
 	and a
-	jr z, Function2c541
+	jr z, .Redundant
 	ld a, [PlayerSubStatus1]
-	bit 0, a
+	bit SUBSTATUS_NIGHTMARE, a
 	ret
 
-Function2c4e3: ; 2c4e3
-	ld a, [PlayerScreens] ; $c6ff
-	bit 0, a
+.Spikes: ; 2c4e3
+	ld a, [PlayerScreens]
+	bit SCREENS_SPIKES, a
 	ret
 
-Function2c4e9: ; 2c4e9
-	ld a, [PlayerSubStatus1] ; $c668
-	bit 3, a
+.Foresight: ; 2c4e9
+	ld a, [PlayerSubStatus1]
+	bit SUBSTATUS_IDENTIFIED, a
 	ret
 
-Function2c4ef: ; 2c4ef
-	ld a, [PlayerSubStatus1] ; $c668
-	bit 4, a
+.PerishSong: ; 2c4ef
+	ld a, [PlayerSubStatus1]
+	bit SUBSTATUS_PERISH, a
 	ret
 
-Function2c4f5: ; 2c4f5
-	ld a, [Weather] ; $c70a
-	cp $3
-	jr z, Function2c541
-	jr Function2c545
+.Sandstorm: ; 2c4f5
+	ld a, [Weather]
+	cp WEATHER_SANDSTORM
+	jr z, .Redundant
+	jr .NotRedundant
 
-Function2c4fe: ; 2c4fe
+.Attract: ; 2c4fe
 	callba Function377f5
-	jr c, Function2c541
-	ld a, [PlayerSubStatus1] ; $c668
-	bit 7, a
+	jr c, .Redundant
+	ld a, [PlayerSubStatus1]
+	bit SUBSTATUS_IN_LOVE, a
 	ret
 
-Function2c50c: ; 2c50c
-	ld a, [EnemyScreens] ; $c700
-	bit 2, a
+.Safeguard: ; 2c50c
+	ld a, [EnemyScreens]
+	bit SCREENS_SAFEGUARD, a
 	ret
 
-Function2c512: ; 2c512
-	ld a, [Weather] ; $c70a
-	cp $1
-	jr z, Function2c541
-	jr Function2c545
+.RainDance: ; 2c512
+	ld a, [Weather]
+	cp WEATHER_RAIN
+	jr z, .Redundant
+	jr .NotRedundant
 
-Function2c51b: ; 2c51b
-	ld a, [Weather] ; $c70a
-	cp $2
-	jr z, Function2c541
-	jr Function2c545
+.SunnyDay: ; 2c51b
+	ld a, [Weather]
+	cp WEATHER_SUN
+	jr z, .Redundant
+	jr .NotRedundant
 
-Function2c524: ; 2c524
-	ld a, [BattleMonStatus] ; $c63a
-	and $7
-	jr z, Function2c541
-	jr Function2c545
+.DreamEater: ; 2c524
+	ld a, [BattleMonStatus]
+	and SLP
+	jr z, .Redundant
+	jr .NotRedundant
 
-Function2c52d: ; 2c52d
-	ld a, [PlayerSubStatus3] ; $c66a
-	bit 7, a
+.Swagger: ; 2c52d
+	ld a, [PlayerSubStatus3]
+	bit SUBSTATUS_CONFUSED, a
 	ret
 
-Function2c533: ; 2c533
-	ld a, [EnemyScreens] ; $c700
+.FutureSight: ; 2c533
+	ld a, [EnemyScreens]
 	bit 5, a
 	ret
 
-Function2c539: ; 2c539
+.Heal:
+.MorningSun:
+.Synthesis:
+.Moonlight: ; 2c539
 	callba AICheckEnemyMaxHP
-	jr nc, Function2c545
+	jr nc, .NotRedundant
 
-Function2c541: ; 2c541
-	ld a, $1
+.Teleport:
+.Redundant: ; 2c541
+	ld a, 1
 	and a
 	ret
 
-Function2c545: ; 2c545 (b:4545)
+.NotRedundant: ; 2c545
 	xor a
 	ret
 
+
 Function2c547: ; 2c547
 	ld hl, UnknownText_0x2c5ef
 	call PrintText
@@ -47151,7 +47153,7 @@
 	jr z, .asm_4415e
 
 	push bc
-	ld d, $e ; BANK(TrainerAI)
+	ld d, BANK(TrainerClassAttributes)
 	predef FlagPredef
 	ld d, c
 	pop bc
@@ -47182,6 +47184,7 @@
 	ld de, EnemyMonMoves
 	ld c, EnemyMonMovesEnd - EnemyMonMoves
 .asm_44166
+	; If the enemy has no moves, this will infinite.
 	ld a, [de]
 	inc de
 	and a
@@ -47247,22 +47250,22 @@
 
 
 AIScoringPointers: ; 441af
-	dw AIScoring_RedStatus
-	dw AIScoring_RedStatMods
-	dw AIScoring_RedSuperEffective
-	dw AIScoring_Offensive
-	dw AIScoring_Smart
-	dw AIScoring_Opportunist
-	dw AIScoring_Aggressive
-	dw AIScoring_Cautious
-	dw AIScoring_StatusImmunity
-	dw AIScoring_Risky
-	dw AIScoring_None
-	dw AIScoring_None
-	dw AIScoring_None
-	dw AIScoring_None
-	dw AIScoring_None
-	dw AIScoring_None
+	dw AI_Basic
+	dw AI_Setup
+	dw AI_Types
+	dw AI_Offensive
+	dw AI_Smart
+	dw AI_Opportunist
+	dw AI_Aggressive
+	dw AI_Cautious
+	dw AI_Status
+	dw AI_Risky
+	dw AI_None
+	dw AI_None
+	dw AI_None
+	dw AI_None
+	dw AI_None
+	dw AI_None
 ; 441cf
 
 
--- a/trainers/attributes.asm
+++ b/trainers/attributes.asm
@@ -1,425 +1,425 @@
+NO_AI          EQU 0
+AI_BASIC       EQU 1 << 0
+AI_SETUP       EQU 1 << 1
+AI_TYPES       EQU 1 << 2
+AI_OFFENSIVE   EQU 1 << 3
+AI_SMART       EQU 1 << 4
+AI_OPPORTUNIST EQU 1 << 5
+AI_AGGRESSIVE  EQU 1 << 6
+AI_CAUTIOUS    EQU 1 << 7
+AI_STATUS      EQU 1 << 8
+AI_RISKY       EQU 1 << 9
+AI_10          EQU 1 << 10
+AI_11          EQU 1 << 11
+AI_12          EQU 1 << 12
+AI_13          EQU 1 << 13
+AI_14          EQU 1 << 14
+AI_15          EQU 1 << 15
 
-AI_STATUS_RED    EQU 1 << 0
-AI_STAT_MODS_RED EQU 1 << 1
-AI_TYPES_RED     EQU 1 << 2
-AI_OFFENSIVE     EQU 1 << 3
-AI_SMART         EQU 1 << 4
-AI_OPPORTUNIST   EQU 1 << 5
-AI_AGGRESSIVE    EQU 1 << 6
-AI_CAUTIOUS      EQU 1 << 7
-AI_STATUS_IMMUNE EQU 1 << 8
-AI_RISKY         EQU 1 << 9
-AI_10            EQU 1 << 10
-AI_11            EQU 1 << 11
-AI_12            EQU 1 << 12
-AI_13            EQU 1 << 13
-AI_14            EQU 1 << 14
-AI_15            EQU 1 << 15
 
-
 TrainerClassAttributes: ; 3959c
 
 ; Falkner
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Whitney
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Bugsy
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Morty
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Pryce
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Jasmine
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Chuck
 	db FULL_HEAL, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Clair
 	db FULL_HEAL, HYPER_POTION ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Rival1
 	db NONE, NONE ; items
 	db 15 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Pokemon Prof
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_AGGRESSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_AGGRESSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Will
 	db MAX_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Cal
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Bruno
 	db MAX_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Karen
 	db FULL_HEAL, MAX_POTION ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Koga
 	db FULL_HEAL, FULL_RESTORE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Champion
 	db FULL_HEAL, FULL_RESTORE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Brock
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Misty
 	db FULL_HEAL, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Lt Surge
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Scientist
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Erika
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Youngster
 	db NONE, NONE ; items
 	db 4 ; base reward
-	dw AI_STATUS_RED | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Schoolboy
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $41, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_OFTEN
 
 ; Bird Keeper
 	db NONE, NONE ; items
 	db 6 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OFFENSIVE | AI_OPPORTUNIST | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OFFENSIVE + AI_OPPORTUNIST + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Lass
 	db NONE, NONE ; items
 	db 6 ; base reward
-	dw AI_STATUS_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $41, $00
+	dw AI_BASIC + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_OFTEN
 
 ; Janine
 	db DIRE_HIT, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Cooltrainerm
 	db NONE, NONE ; items
 	db 12 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Cooltrainerf
 	db NONE, NONE ; items
 	db 12 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Beauty
 	db NONE, NONE ; items
 	db 22 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Pokemaniac
 	db NONE, NONE ; items
 	db 15 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_OFFENSIVE | AI_AGGRESSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_OFFENSIVE + AI_AGGRESSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Gruntm
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Gentleman
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_AGGRESSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_AGGRESSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Skier
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Teacher
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_OPPORTUNIST | AI_AGGRESSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_OPPORTUNIST + AI_AGGRESSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Sabrina
 	db HYPER_POTION, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Bug Catcher
 	db NONE, NONE ; items
 	db 4 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Fisher
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $41, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_OFTEN
 
 ; Swimmerm
 	db NONE, NONE ; items
 	db 2 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_OFFENSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_OFFENSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Swimmerf
 	db NONE, NONE ; items
 	db 5 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Sailor
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_OFFENSIVE | AI_OPPORTUNIST | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_OFFENSIVE + AI_OPPORTUNIST + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Super Nerd
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_SMART | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_SMART + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Rival2
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Guitarist
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Hiker
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_OFFENSIVE | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_OFFENSIVE + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Biker
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Blaine
 	db MAX_POTION, FULL_HEAL ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Burglar
 	db NONE, NONE ; items
 	db 22 ; base reward
-	dw AI_STATUS_RED | AI_OFFENSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_OFFENSIVE + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Firebreather
 	db NONE, NONE ; items
 	db 12 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_OFFENSIVE | AI_OPPORTUNIST | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_OFFENSIVE + AI_OPPORTUNIST + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Juggler
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_SMART | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_SMART + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Blackbelt T
 	db NONE, NONE ; items
 	db 6 ; base reward
-	dw AI_STATUS_RED | AI_OFFENSIVE | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_OFFENSIVE + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Executivem
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_SMART | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_SMART + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Psychic T
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Picnicker
 	db NONE, NONE ; items
 	db 5 ; base reward
-	dw AI_STATUS_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Camper
 	db NONE, NONE ; items
 	db 5 ; base reward
-	dw AI_STATUS_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Executivef
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_SMART | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_SMART + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Sage
 	db NONE, NONE ; items
 	db 8 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Medium
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_TYPES_RED | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_TYPES + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Boarder
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Pokefanm
 	db NONE, NONE ; items
 	db 20 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_SMART | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_SMART + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Kimono Girl
 	db NONE, NONE ; items
 	db 18 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Twins
 	db NONE, NONE ; items
 	db 5 ; base reward
-	dw NONE
-	db $41, $00
+	dw NO_AI
+	dw CONTEXT_USE + SWITCH_OFTEN
 
 ; Pokefanf
 	db NONE, NONE ; items
 	db 20 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_SMART | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_SMART + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Red
 	db FULL_RESTORE, FULL_RESTORE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Blue
 	db FULL_RESTORE, FULL_RESTORE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Officer
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_STATUS_IMMUNE
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_STATUS
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Gruntf
 	db NONE, NONE ; items
 	db 10 ; base reward
-	dw AI_STATUS_RED | AI_TYPES_RED | AI_OPPORTUNIST | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_TYPES + AI_OPPORTUNIST + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; Mysticalman
 	db NONE, NONE ; items
 	db 25 ; base reward
-	dw AI_STATUS_RED | AI_STAT_MODS_RED | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS_IMMUNE | AI_RISKY
-	db $44, $00
+	dw AI_BASIC + AI_SETUP + AI_SMART + AI_AGGRESSIVE + AI_CAUTIOUS + AI_STATUS + AI_RISKY
+	dw CONTEXT_USE + SWITCH_SOMETIMES
 
 ; 39771