shithub: pokered

Download patch

ref: 4ba8dd609065ee118eccdc56a38dc8666b189c2e
parent: 247b619e9abf12c6790cff72343a8cf8431b0fb9
author: xCrystal <rgr.crystal@gmail.com>
date: Tue Mar 31 16:40:22 EDT 2015

Further document AI stuff

--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -991,7 +991,7 @@
 	xor a
 	ld [W_ENEMYMOVENUM], a
 	ld [wcd6a], a
-	ld [wccd5], a
+	ld [wAILayer2Encouragement], a
 	inc a ; reset Z flag
 	ret
 
@@ -3128,7 +3128,7 @@
 	jp z, ExecutePlayerMoveDone ; for selected move = FF, skip most of player's turn
 	xor a
 	ld [W_MOVEMISSED], a
-	ld [wcced], a
+	ld [wMonIsDisobedient], a
 	ld [wMoveDidntMiss], a
 	ld a, $a
 	ld [wDamageMultipliers], a
@@ -3251,7 +3251,7 @@
 	call MirrorMoveCopyMove
 	jp z,ExecutePlayerMoveDone
 	xor a
-	ld [wcced],a
+	ld [wMonIsDisobedient],a
 	jp CheckIfPlayerNeedsToChargeUp ; if Mirror Move was successful go back to damage calculation for copied move
 .metronomeCheck
 	cp a,METRONOME_EFFECT
@@ -3778,7 +3778,7 @@
 	ld [hl], a
 	ld [wd11e], a
 	call Func_3db85
-	ld a, [wcced]
+	ld a, [wMonIsDisobedient]
 	and a
 	ld hl, Used2Text
 	ret nz
@@ -3799,7 +3799,7 @@
 	db $08 ; asm
 
 PrintInsteadText: ; 3db39 (f:5b39)
-	ld a, [wcced]
+	ld a, [wMonIsDisobedient]
 	and a
 	jr z, PrintCF4BText
 	ld hl, InsteadText
@@ -4007,7 +4007,7 @@
 ; stores whether the mon will use a move in Z flag
 CheckForDisobedience: ; 3dc88 (f:5c88)
 	xor a
-	ld [wcced], a
+	ld [wMonIsDisobedient], a
 	ld a, [wLinkState]
 	cp LINK_STATE_BATTLING
 	jr nz, .checkIfMonIsTraded
@@ -4148,7 +4148,7 @@
 	cp b
 	jr z, .monDoesNothing ; mon will not use move if only one move has remaining PP
 	ld a, $1
-	ld [wcced], a
+	ld [wMonIsDisobedient], a
 	ld a, [wMaxMenuItem]
 	ld b, a
 	ld a, [wCurrentMenuItem]
@@ -5655,7 +5655,7 @@
 	cp $4
 	ret nc
 .executeEnemyMove
-	ld hl, wccd5
+	ld hl, wAILayer2Encouragement
 	inc [hl]
 	xor a
 	ld [W_MOVEMISSED], a
@@ -5693,7 +5693,7 @@
 	call CopyStringToCF4B
 EnemyCanExecuteMove: ; 3e72b (f:672b)
 	xor a
-	ld [wcced], a
+	ld [wMonIsDisobedient], a
 	call PrintMonName1Text
 	ld a, [W_ENEMYMOVEEFFECT]
 	ld hl, ResidualEffects1
--- a/engine/battle/e.asm
+++ b/engine/battle/e.asm
@@ -227,17 +227,17 @@
 AIMoveChoiceModification1: ; 397ab (e:57ab)
 	ld a, [wBattleMonStatus]
 	and a
-	ret z       ; return if no status ailment on player's mon
-	ld hl, wBuffer - 1  ; temp move selection array (-1 byte offest)
-	ld de, wEnemyMonMoves  ; enemy moves
-	ld b, $5
+	ret z ; return if no status ailment on player's mon
+	ld hl, wBuffer - 1 ; temp move selection array (-1 byte offest)
+	ld de, wEnemyMonMoves ; enemy moves
+	ld b, NUM_MOVES + 1
 .nextMove
 	dec b
-	ret z         ; processed all 4 moves
+	ret z ; processed all 4 moves
 	inc hl
 	ld a, [de]
 	and a
-	ret z         ; no more moves in move set
+	ret z ; no more moves in move set
 	inc de
 	call ReadMove
 	ld a, [W_ENEMYMOVEPOWER]
@@ -255,32 +255,34 @@
 	pop hl
 	jr nc, .nextMove
 	ld a, [hl]
-	add $5       ; discourage move
+	add $5 ; heavily discourage move
 	ld [hl], a
 	jr .nextMove
 
 StatusAilmentMoveEffects ; 57e2
-	db $01 ; some sleep effect?
+	db $01 ; unused sleep effect
 	db SLEEP_EFFECT
 	db POISON_EFFECT
 	db PARALYZE_EFFECT
 	db $FF
 
-; slightly encourage moves with specific effects
+; slightly encourage moves with specific effects.
+; in particular, stat-modifying moves and other move effects
+; that fall in-bewteen
 AIMoveChoiceModification2: ; 397e7 (e:57e7)
-	ld a, [wccd5]
-	cp $1
+	ld a, [wAILayer2Encouragement]
+	cp $1 
 	ret nz
-	ld hl, wBuffer - 1  ; temp move selection array (-1 byte offest)
-	ld de, wEnemyMonMoves  ; enemy moves
-	ld b, $5
+	ld hl, wBuffer - 1 ; temp move selection array (-1 byte offest)
+	ld de, wEnemyMonMoves ; enemy moves
+	ld b, NUM_MOVES + 1
 .nextMove
 	dec b
-	ret z         ; processed all 4 moves
+	ret z ; processed all 4 moves
 	inc hl
 	ld a, [de]
 	and a
-	ret z         ; no more moves in move set
+	ret z ; no more moves in move set
 	inc de
 	call ReadMove
 	ld a, [W_ENEMYMOVEEFFECT]
@@ -294,21 +296,23 @@
 	jr c, .preferMove
 	jr .nextMove
 .preferMove
-	dec [hl]       ; slighly encourage this move
+	dec [hl] ; sligthly encourage this move
 	jr .nextMove
 
-; encourages moves that are effective against the player's mon
+; encourages moves that are effective against the player's mon (even if non-damaging).
+; discourage damaging moves that are ineffective or not very effective against the player's mon,
+; unless there's no damaging move that deals at least neutral damage
 AIMoveChoiceModification3: ; 39817 (e:5817)
-	ld hl, wBuffer - 1  ; temp move selection array (-1 byte offest)
-	ld de, wEnemyMonMoves  ; enemy moves
+	ld hl, wBuffer - 1 ; temp move selection array (-1 byte offest)
+	ld de, wEnemyMonMoves ; enemy moves
 	ld b, $5
 .nextMove
 	dec b
-	ret z         ; processed all 4 moves
+	ret z ; processed all 4 moves
 	inc hl
 	ld a, [de]
 	and a
-	ret z         ; no more moves in move set
+	ret z ; no more moves in move set
 	inc de
 	call ReadMove
 	push hl
@@ -322,9 +326,9 @@
 	cp $10
 	jr z, .nextMove
 	jr c, .notEffectiveMove
-	dec [hl]       ; slighly encourage this move
+	dec [hl] ; sligthly encourage this move
 	jr .nextMove
-.notEffectiveMove  ; discourages non-effective moves if better moves are available
+.notEffectiveMove ; discourages non-effective moves if better moves are available
 	push hl
 	push de
 	push bc
@@ -342,17 +346,17 @@
 	call ReadMove
 	ld a, [W_ENEMYMOVEEFFECT]
 	cp SUPER_FANG_EFFECT
-	jr z, .betterMoveFound      ; Super Fang is considered to be a better move
+	jr z, .betterMoveFound ; Super Fang is considered to be a better move
 	cp SPECIAL_DAMAGE_EFFECT
-	jr z, .betterMoveFound      ; any special damage moves are considered to be better moves
+	jr z, .betterMoveFound ; any special damage moves are considered to be better moves
 	cp FLY_EFFECT
-	jr z, .betterMoveFound      ; Fly is considered to be a better move
+	jr z, .betterMoveFound ; Fly is considered to be a better move
 	ld a, [W_ENEMYMOVETYPE]
 	cp d
 	jr z, .loopMoves
 	ld a, [W_ENEMYMOVEPOWER]
 	and a
-	jr nz, .betterMoveFound      ; damaging moves of a different type are considered to be better moves
+	jr nz, .betterMoveFound ; damaging moves of a different type are considered to be better moves
 	jr .loopMoves
 .betterMoveFound
 	ld c, a
@@ -363,7 +367,7 @@
 	pop hl
 	and a
 	jr z, .nextMove
-	inc [hl]       ; slighly discourage this move
+	inc [hl] ; sligthly discourage this move
 	jr .nextMove
 AIMoveChoiceModification4: ; 39883 (e:5883)
 	ret
--- a/wram.asm
+++ b/wram.asm
@@ -378,8 +378,12 @@
 
 wccd3:: ds 1
 wccd4:: ds 1
-wccd5:: ds 2
 
+; if [ccd5] != 1, the second AI layer is not applied
+wAILayer2Encouragement:: ; ccd5
+	ds 1
+	ds 1
+
 ; current HP of player and enemy substitutes
 wPlayerSubstituteHP:: ; ccd7
 	ds 1
@@ -425,7 +429,7 @@
 
 wcceb:: ds 1
 wccec:: ds 1
-wcced:: ds 1
+wMonIsDisobedient:: ds 1
 wccee:: ds 1
 wccef:: ds 1
 wccf0:: ds 1