shithub: pokered

Download patch

ref: b8c90b6fdbe97cebb07fba0cd607be2a0faf4cc6
parent: 3901d3ac17c89d760620fe92ea4d9283ad6ca949
author: stag019 <stag019@gmail.com>
date: Thu Mar 22 09:58:31 EDT 2012

SubstituteEffectHandler from smkdan.

hg-commit-id: 284019b3561e


--- a/main.asm
+++ b/main.asm
@@ -21130,8 +21130,74 @@
 	db BANK(LyingOldManSprite)
 ; 0x17c47
 
-INCBIN "baserom.gbc",$17c47,$17e1d - $17c47
+INCBIN "baserom.gbc",$17c47,$17dad - $17c47
 
+SubstituteEffectHandler: ;0x17DAD
+	ld c, 50
+	call DelayFrames		
+	ld hl, W_PLAYERMONMAXHP		
+	ld de, W_PLAYERSUBSITUTEHP
+	ld bc, W_PLAYERBATTSTATUS2
+	ld a, [$ff00+$f3]			;whose turn?
+	and a
+	jr z, .notEnemy
+	ld hl, W_ENEMYMONMAXHP
+	ld de, W_ENEMYSUBSITUTEHP
+	ld bc, W_ENEMYBATTSTATUS2
+.notEnemy
+	ld a, [bc]							;load flags
+	bit 4, a							;user already has substitute?
+	jr nz, .alreadyHasSubstitute		;skip this code if so
+										;user doesn't have a substitute [yet]
+	push bc
+	ld a, [hli]		;load max hp
+	ld b, [hl]
+	srl a			;max hp / 4, [quarter health to remove from user]
+	rr b
+	srl a
+	rr b
+	push de
+	ld de, $fff2	;subtract 8 to point to [current hp] instead of [max hp]
+	add hl, de		;HL -= 8
+	pop de
+	ld a, b
+	ld [de], a		;save copy of HP to subtract in ccd7/ccd8 [how much HP substitute has]
+	ld a, [hld]		;load current hp
+	sub b			;subtract [max hp / 4]
+	ld d, a			;save low byte result in D
+	ld a, [hl]
+	sbc a, 0		;borrow from high byte if needed
+	pop bc
+	jr c, .notEnoughHP	;underflow means user would be left with negative health
+						;bug: note since it only brances on carry, it will possibly leave user with 0HP
+.userHasZeroOrMoreHP
+	ldi [hl], a		;store high byte HP
+	ld [hl], d		;store low byte HP
+	ld h, b
+	ld l, c
+	set 4, [hl]			;set bit 4 of flags, user now has substitute
+	ld a, [$d355]		;load options
+	bit 7, a			;battle animation is enabled?
+	ld hl, $7ba8		;animation enabled: 0F:7BA8
+	ld b, $0f
+	jr z, .animationEnabled
+	ld hl, $56e0		;animation disabled: 1E:56E0
+	ld b, $1e
+.animationEnabled
+	call Bankswitch					;jump to routine depending on animation setting
+	ld hl, UnnamedText_17e1d		;"it created a substitute"
+	call PrintText
+	ld hl, $4d5a
+	ld b, $0f
+	jp Bankswitch
+.alreadyHasSubstitute
+	ld hl, UnnamedText_17e22		;"____ has a substitute"
+	jr .printText
+.notEnoughHP
+	ld hl, UnnamedText_17e27		;"too weak to make substitute"
+.printText
+	jp PrintText
+
 UnnamedText_17e1d: ; 0x17e1d
 	TX_FAR _UnnamedText_17e1d
 	db $50
@@ -22090,7 +22156,7 @@
 	ld hl, UnnamedText_1920a
 	call PrintText
 	ld c, $2
-	call $3739
+	call DelayFrames
 	call $35ec
 	ld a, [$cc26]
 	and a
@@ -22796,7 +22862,7 @@
 	and a
 	ret nz
 	ld c, $a
-	call $3739
+	call DelayFrames
 	ld a, $0
 	ld [$d62a], a
 	ret
@@ -25000,7 +25066,7 @@
 
 OaksLabScript13: ; 0x1ce32
 	ld c, $14
-	call $3739
+	call DelayFrames
 	ld a, $10
 	ld [$ff00+$8c], a
 	call $2920
@@ -25366,7 +25432,7 @@
 	res 6, [hl]
 	call ReloadMapData
 	ld c, $a
-	call $3739
+	call DelayFrames
 	ld a, [$cf13]
 	cp $2
 	jr z, OaksLabLookAtCharmander
@@ -39242,7 +39308,7 @@
 	jr .next4\@
 .next3\@
 	ld c,$1E
-	call $3739
+	call DelayFrames
 	ld a,[W_PLAYERMOVEEFFECT]
 	cp a,$2B
 	jr z,.next5\@
@@ -61514,7 +61580,7 @@
 	ld b, $5
 .asm_5a4ff
 	ld c, $78
-	call $3739
+	call DelayFrames
 	dec b
 	jr nz, .asm_5a4ff ; 0x5a505 $f8
 	call $3865
@@ -62279,7 +62345,7 @@
 	ld a, $ff
 	call $23b1
 	ld c, $20
-	call $3739
+	call DelayFrames
 	ld hl, $4608
 	ld de, $cd3f
 	ld bc, $0004
@@ -62308,7 +62374,7 @@
 	ld [$cd42], a
 	pop hl
 	ld c, $18
-	call $3739
+	call DelayFrames
 	ld a, [$c026]
 	ld b, a
 	ld a, [$c027]
@@ -62315,7 +62381,7 @@
 	or b
 	jr nz, .asm_5c5d1 ; 0x5c5f6 $d9
 	ld c, $30
-	call $3739
+	call DelayFrames
 	call $2307
 	jp TextScriptEnd
 ; 0x5c603
@@ -72081,7 +72147,7 @@
 ;db $c3, $d6, $35
 	ld b, $18
 	ld hl, $50eb
-	jp $35d6
+	jp Bankswitch
 ; 0x75df0
 
 Lab4Object: ; 0x75df0 (size=32)