summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordannye <corrnondacqb@yahoo.com>2016-04-06 17:48:27 -0500
committerdannye <corrnondacqb@yahoo.com>2016-04-06 17:48:27 -0500
commit9518f4e113fcd9dfb734b979138a04ace11bf2ad (patch)
treeaf40356f3e976e1d3e4d07fe8bc7b8462078c199
parent65e20f29cd4b56fd7579ef101f673c70f995d388 (diff)
Some duel engine disassemlby
relating to playing energy cards thanks to Guernouille
-rwxr-xr-xsrc/engine/bank1.asm145
-rwxr-xr-xsrc/text/text1.asm2
-rwxr-xr-xsrc/text/text_offsets.asm2
-rwxr-xr-xsrc/wram.asm5
4 files changed, 149 insertions, 5 deletions
diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm
index 65de8de..7544314 100755
--- a/src/engine/bank1.asm
+++ b/src/engine/bank1.asm
@@ -466,7 +466,61 @@ OpenHandMenu: ; 4425 (1:4425)
jp PrintDuelMenu
Func_4436: ; 4436 (1:4436)
-INCBIN "baserom.gbc",$4436, $4585 - $4436
+INCBIN "baserom.gbc",$4436, $4477 - $4436
+
+; c contains the energy card being played
+PlayerUseEnergyCard: ; 4477 (1:4477)
+ ld a, c
+ cp WATER_ENERGY_CARD ; XXX why treat water energy card differently?
+ jr nz, .notWaterEnergy
+ call $3615
+ jr c, .waterEnergy
+
+.notWaterEnergy
+ ld a, [wDuelHasPlayedEnergy]
+ or a
+ jr nz, .alreadyPlayedEnergy
+ call $5fdd
+ call $600c ; choose card to play energy card on
+ jp c, Func_426d ; exit if no card was chosen
+.asm_4490
+ ld a, $1
+ ld [wDuelHasPlayedEnergy], a
+.asm_4495
+ ld a, [$ff9d]
+ ld [$ffa1], a
+ ld e, a
+ ld a, [$ff98]
+ ld [$ffa0], a
+ call $14d2
+ call $61b8
+ ld a, $3
+ call Func_0f7f
+ call $68e4
+ jp Func_426d
+
+.waterEnergy
+ call $5fdd
+ call $600c ; choose card to play energy card on
+ jp c, Func_426d ; exit if no card was chosen
+ call $3622
+ jr c, .asm_4495
+ ld a, [wDuelHasPlayedEnergy]
+ or a
+ jr z, .asm_4490
+ text_hl OnlyOneEnergyCardText
+ call DrawWideTextBox_WaitForInput
+ jp Func_4436
+
+.alreadyPlayedEnergy
+ text_hl OnlyOneEnergyCardText
+ call DrawWideTextBox_WaitForInput
+ call $123b
+ call $55be
+ jp $4447
+; 0x44db
+
+INCBIN "baserom.gbc",$44db, $4585 - $44db
OpenBattleCheckMenu: ; 4585 (1:4585)
call Func_3b31
@@ -903,7 +957,94 @@ LoadPlayerDeck: ; 6793 (1:6793)
ret
; 0x67b2
-INCBIN "baserom.gbc",$67b2,$6d84 - $67b2
+INCBIN "baserom.gbc",$67b2,$67be - $67b2
+
+; related to ai taking their turn in a duel
+; called multiple times during one ai turn
+AIMakeDecision: ; 67be (1:67be)
+ ld [$ff9e], a
+ ld hl, $cbf9
+ ld a, [hl]
+ ld [hl], $0
+ or a
+ jr nz, .skipDelay
+.delayLoop
+ call DoFrame
+ ld a, [wVBlankCtr]
+ cp $3c
+ jr c, .delayLoop
+
+.skipDelay
+ ld a, [$ff9e]
+ ld hl, $cbe1
+ ld [hl], $0
+ ld hl, AIMoveTable
+ call JumpToFunctionInTable
+ ld a, [wDuelFinished]
+ ld hl, $cbe1
+ or [hl]
+ jr nz, .turnEnded
+ ld a, [$cbf9]
+ or a
+ ret nz
+ ld [wVBlankCtr], a
+ ld hl, $0088
+ call Func_2a36
+ or a
+ ret
+
+.turnEnded
+ scf
+ ret
+; 0x67fb
+
+INCBIN "baserom.gbc",$67fb,$695e - $67fb
+
+AIMoveTable: ; 695e (1:695e)
+ dw Func_0f35
+ dw $69e0
+ dw $69c5
+ dw AIUseEnergyCard
+ dw $69ff
+ dw $6993
+ dw $6a23
+ dw $6a35
+ dw $6a4e
+ dw $6a8c
+ dw $6ab1
+ dw $698c
+ dw $6ad9
+ dw $6b07
+ dw $6aba
+ dw $6b7d
+ dw $6b7d
+ dw $6b24
+ dw $6b30
+ dw $6b7d
+ dw $6b3e
+ dw $6b15
+ dw $6b20
+
+INCBIN "baserom.gbc",$698c,$69a5 - $698c
+
+AIUseEnergyCard: ; 69a5 (1:69a5)
+ ld a, [$ffa1]
+ ld [$ff9d], a
+ ld e, a
+ ld a, [$ffa0]
+ ld [$ff98], a
+ call $14d2
+ ld a, [$ffa0]
+ call LoadDeckCardToBuffer1
+ call $5e75
+ call $68e4
+ ld a, $1
+ ld [wDuelHasPlayedEnergy], a
+ call $4f9d
+ ret
+; 0x69c5
+
+INCBIN "baserom.gbc",$69c5,$6d84 - $69c5
;converts clefairy doll/mysterious fossil at specified wCardBuffer to pokemon card
ConvertTrainerCardToPokemon:
diff --git a/src/text/text1.asm b/src/text/text1.asm
index 74e8826..d03d1b5 100755
--- a/src/text/text1.asm
+++ b/src/text/text1.asm
@@ -193,7 +193,7 @@ NoSelectableAttackText: ; 366af (d:66af)
UnableToRetreatText: ; 366c5 (d:66c5)
db TX_START,"Unable to Retreat.",TX_END
-Text003e: ; 366d9 (d:66d9)
+OnlyOneEnergyCardText: ; 366d9 (d:66d9)
db TX_START,"You may only attach 1 Energy card\n"
db "per turn.",TX_END
diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm
index 7e7d64b..d313873 100755
--- a/src/text/text_offsets.asm
+++ b/src/text/text_offsets.asm
@@ -64,7 +64,7 @@ TextOffsets:: ; 34000 (d:4000)
text Text003b
text NoSelectableAttackText
text UnableToRetreatText
- text Text003e
+ text OnlyOneEnergyCardText
text Text003f
text Text0040
text DiscardDescription
diff --git a/src/wram.asm b/src/wram.asm
index 6348d9e..b63291a 100755
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -428,7 +428,10 @@ wcc09:: ; cc09
ds $1
wcc0a:: ; cc0a
- ds $4
+ ds $1
+
+wDuelHasPlayedEnergy:: ; cc0b
+ ds $3
; this seems to hold the current opponent's deck id - 2,
; perhaps to account for the two unused pointers at the