shithub: pokered

Download patch

ref: abf21e5383b74c82e37d57617b6596fe8b273b30
parent: 1f4d36f5e8f72fed0249bf641536f5ce4e0c0067
author: IIMarckus <[email protected]>
date: Fri Oct 29 16:31:09 EDT 2010

More trainer AI: status healing items, stat-raising items

hg-commit-id: dd1cceb189ec


--- a/pokered.asm
+++ b/pokered.asm
@@ -4,6 +4,16 @@
 	ENDM
 
 ; wram locations
+W_OPPONENTSTATUS EQU $CFE9 ; active opponent's status condition
+	; bit 0 slp
+	; bit 1 slp
+	; bit 2 slp
+	; bit 3 psn
+	; bit 4 brn
+	; bit 5 frz
+	; bit 6 par
+	; unused? (XXX confirm)
+
 W_CUROPPONENT EQU $D059 ; in a wild battle, this is the species of pokemon
 			; in a trainer battle, this is the trainer class
 
@@ -3456,17 +3466,17 @@
 BlackbeltAI:
 	cp $20
 	ret nc
-	jp $67F2
+	jp AIUseXAttack
 
 GiovanniAI:
 	cp $40
 	ret nc
-	jp $67B5
+	jp AIUseGuardSpec
 
 CooltrainerMAI:
 	cp $40
 	ret nc
-	jp $67F2
+	jp AIUseXAttack
 
 CooltrainerFAI:
 	cp $40
@@ -3479,7 +3489,8 @@
 	jp $672A
 
 BrockAI:
-	ld a,[$CFE9]
+; if his active monster has a status condition, use a full heal
+	ld a,[W_OPPONENTSTATUS]
 	and a
 	ret z
 	jp $6786
@@ -3487,12 +3498,12 @@
 MistyAI:
 	cp $40
 	ret nc
-	jp $67F8
+	jp AIUseXDefend
 
 LtSurgeAI:
 	cp $40
 	ret nc
-	jp $67FE
+	jp AIUseXSpeed
 
 ErikaAI:
 	cp $80
@@ -3505,7 +3516,7 @@
 KogaAI:
 	cp $40
 	ret nc
-	jp $67F2
+	jp AIUseXAttack
 
 BlaineAI:
 	cp $40
@@ -3534,7 +3545,7 @@
 	ld a,5
 	call $67CF
 	ret nc
-	jp $66A0
+	jp AIUseFullRestore
 
 LoreleiAI:
 	cp $80
@@ -3547,7 +3558,7 @@
 BrunoAI:
 	cp $40
 	ret nc
-	jp $67F8
+	jp AIUseXDefend
 
 AgathaAI:
 	cp $14
@@ -3585,10 +3596,9 @@
 	ld a,$8E
 	jp $3740
 
-Function66A0: ; 66A0
-; XXX what does this do
-	call $6791
-	ld a,$10
+AIUseFullRestore:
+	call AICureStatus
+	ld a,FULL_RESTORE
 	ld [$CF05],a
 	ld de,$CEEB
 	ld hl,$CFE7
@@ -3678,7 +3688,194 @@
 	call $3E6D
 	jp $6695
 
-INCBIN "baserom.gbc",$3A72A,$3C000 - $3A72A
+Function672A: ; 672A
+	ld a,[$D89C]
+	ld c,a
+	ld hl,$D8A5
+	ld d,0
+.next2\@
+	ld a,[hli]
+	ld b,a
+	ld a,[hld]
+	or b
+	jr z,.next\@
+	inc d
+.next\@
+	push bc
+	ld bc,$2C
+	add hl,bc
+	pop bc
+	dec c
+	jr nz,.next2\@
+	ld a,d
+	cp 2
+	jp nc,Function674B
+	and a
+	ret
+
+Function674B: ; 674B
+	ld a,[$CFE8] ; pokemon in party to switch to?
+
+; copy current enemy hp and two more bytes (XXX) to a position in the party
+	ld hl,$D8A5
+	ld bc,$2C
+	call AddNTimes
+	ld d,h
+	ld e,l
+	ld hl,$CFE6
+	ld bc,4
+	call CopyData
+
+	ld hl,BattleWithdrawText
+	call $3C49 ; print text
+	ld a,1
+	ld [$D11D],a
+	ld hl,$490E
+	ld b,$F
+	call $35D6 ; bankswitch
+	xor a
+	ld [$D11D],a
+	ld a,[$D12B]
+	cp 4
+	ret z
+	scf
+	ret
+
+BattleWithdrawText:
+	db $17
+	dw $40BE
+	db $22
+	db $50
+
+AIUseFullHeal:
+	call $669B
+	call AICureStatus
+	ld a,FULL_HEAL
+	jp AIPrintItemUse
+
+AICureStatus:
+	ld a,[$CFE8]
+	ld hl,$D8A8
+	ld bc,$2C
+	call AddNTimes
+	xor a
+	ld [hl],a ; clear status in enemy team roster
+	ld [W_OPPONENTSTATUS],a ; clear status of active enemy
+	ld hl,$D069
+	res 0,[hl]
+	ret
+
+AIUseXAccuracy: ; unused
+	call $669B
+	ld hl,$D068
+	set 0,[hl]
+	ld a,X_ACCURACY
+	jp AIPrintItemUse
+
+AIUseGuardSpec:
+	call $669B
+	ld hl,$D068
+	set 1,[hl]
+	ld a,GUARD_SPEC_
+	jp AIPrintItemUse
+
+AIUseDireHit: ; unused
+	call $669B
+	ld hl,$D068
+	set 2,[hl]
+	ld a,DIRE_HIT
+	jp AIPrintItemUse
+
+Function67CF: ; 67CF
+	ld [$FF99],a
+	ld hl,$CFF4
+	ld a,[hli]
+	ld [$FF95],a
+	ld a,[hl]
+	ld [$FF96],a
+	ld b,2
+	call $38B9
+	ld a,[$FF98]
+	ld c,a
+	ld a,[$FF97]
+	ld b,a
+	ld hl,$CFE7
+	ld a,[hld]
+	ld e,a
+	ld a,[hl]
+	ld d,a
+	ld a,d
+	sub b
+	ret nz
+	ld a,e
+	sub c
+	ret
+
+AIUseXAttack:
+	ld b,$A
+	ld a,X_ATTACK
+	jr AIIncreaseStat
+
+AIUseXDefend:
+	ld b,$B
+	ld a,X_DEFEND
+	jr AIIncreaseStat
+
+AIUseXSpeed:
+	ld b,$C
+	ld a,X_SPEED
+	jr AIIncreaseStat
+
+AIUseXSpecial:
+	ld b,$D
+	ld a,X_SPECIAL
+	; fallthrough
+
+AIIncreaseStat:
+	ld [$CF05],a
+	push bc
+	call AIPrintItemUse_
+	pop bc
+	ld hl,$CFCD
+	ld a,[hld]
+	push af
+	ld a,[hl]
+	push af
+	push hl
+	ld a,$AF
+	ld [hli],a
+	ld [hl],b
+	ld hl,$7428
+	ld b,$F
+	call $35D6 ; bankswitch
+	pop hl
+	pop af
+	ld [hli],a
+	pop af
+	ld [hl],a
+	jp $6695
+
+AIPrintItemUse:
+	ld [$CF05],a
+	call AIPrintItemUse_
+	jp $6695
+
+AIPrintItemUse_:
+; print "x used [$CF05] on z!"
+	ld a,[$CF05]
+	ld [$D11E],a
+	call $2FCF ; get item name
+	ld hl,AIBattleUseItemText
+	jp $3C49 ; print text
+
+AIBattleUseItemText:
+	db $17
+	dw $40D5
+	db $22
+	db $50
+
+
+INCBIN "baserom.gbc",$3A849,$3C000 - $3A849
 
 SECTION "bankF",DATA,BANK[$F]
 INCBIN "baserom.gbc",$3C000,$4000