summaryrefslogtreecommitdiff
path: root/engine/games/card_flip.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/games/card_flip.asm')
-rw-r--r--engine/games/card_flip.asm1692
1 files changed, 1692 insertions, 0 deletions
diff --git a/engine/games/card_flip.asm b/engine/games/card_flip.asm
new file mode 100644
index 000000000..fbeb3e3b6
--- /dev/null
+++ b/engine/games/card_flip.asm
@@ -0,0 +1,1692 @@
+CARDFLIP_LIGHT_OFF EQU $ef
+CARDFLIP_LIGHT_ON EQU $f5
+
+CARDFLIP_DECK_SIZE EQU 4 * 6
+
+; two labels below called from inside ./dummy_game.asm
+Unknown_e00ed: ; e00ed (38:40ed)
+; Graphics for an unused Game Corner
+; game were meant to be here.
+ret_e00ed: ; e00ed (38:40ed)
+ ret
+
+_CardFlip: ; e00ee (38:40ee)
+ ld hl, wOptions
+ set 4, [hl]
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ call DisableLCD
+ call LoadStandardFont
+ call LoadFontsExtra
+
+ ld hl, CardFlipLZ01
+ ld de, vTiles2 tile $00
+ call Decompress
+ ld hl, CardFlipLZ02
+ ld de, vTiles2 tile $3e
+ call Decompress
+ ld hl, CardFlipLZ03
+ ld de, vTiles0 tile $00
+ call Decompress
+ ld hl, CardFlipOffButtonGFX
+ ld de, vTiles0 tile CARDFLIP_LIGHT_OFF
+ ld bc, 1 tiles
+ call CopyBytes
+ ld hl, CardFlipOnButtonGFX
+ ld de, vTiles0 tile CARDFLIP_LIGHT_ON
+ ld bc, 1 tiles
+ call CopyBytes
+
+ call CardFlip_ShiftDigitsLeftTwoPixels
+ call CardFlip_InitTilemap
+ call CardFlip_InitAttrPals
+ call EnableLCD
+ call WaitBGMap2
+ ld a, $e4
+ call DmgToCgbBGPals
+ ld de, $e4e4
+ call DmgToCgbObjPals
+ call DelayFrame
+ xor a
+ ld [wJumptableIndex], a
+ ld a, $2
+ ld [wCardFlipCursorY], a
+ ld [wCardFlipCursorX], a
+ ld de, MUSIC_GAME_CORNER
+ call PlayMusic
+.MasterLoop:
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .leavethegame
+ call .CardFlip
+ jr .MasterLoop
+.leavethegame
+ call WaitSFX
+ ld de, SFX_QUIT_SLOTS
+ call PlaySFX
+ call WaitSFX
+ call ClearBGPalettes
+ ld hl, wOptions
+ res 4, [hl]
+ ret
+
+.CardFlip: ; e0191 (38:4191)
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .Jumptable
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+; e01a0 (38:41a0)
+
+.Jumptable: ; e01a0
+ dw .AskPlayWithThree
+ dw .DeductCoins
+ dw .ChooseACard
+ dw .PlaceYourBet
+ dw .CheckTheCard
+ dw .TabulateTheResult
+ dw .PlayAgain
+ dw .Quit
+; e01b0
+
+.Increment: ; e01b0
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+; e01b5
+
+.AskPlayWithThree: ; e01b5
+ ld hl, .PlayWithThreeCoinsText
+ call CardFlip_UpdateCoinBalanceDisplay
+ call YesNoBox
+ jr c, .SaidNo
+ call CardFlip_ShuffleDeck
+ call .Increment
+ ret
+
+.SaidNo:
+ ld a, 7
+ ld [wJumptableIndex], a
+ ret
+; e01cd
+
+.PlayWithThreeCoinsText: ; 0xe01cd
+ ; Play with three coins?
+ text_jump UnknownText_0x1c5793
+ db "@"
+; 0xe01d2
+
+.DeductCoins: ; e01d2
+ ld a, [wCoins]
+ ld h, a
+ ld a, [wCoins + 1]
+ ld l, a
+ ld a, h
+ and a
+ jr nz, .deduct ; You have at least 256 coins.
+ ld a, l
+ cp 3
+ jr nc, .deduct ; You have at least 3 coins.
+ ld hl, .NotEnoughCoinsText
+ call CardFlip_UpdateCoinBalanceDisplay
+ ld a, 7
+ ld [wJumptableIndex], a
+ ret
+
+.deduct
+ ld de, -3
+ add hl, de
+ ld a, h
+ ld [wCoins], a
+ ld a, l
+ ld [wCoins + 1], a
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ xor a
+ ld [hBGMapMode], a
+ call CardFlip_PrintCoinBalance
+ ld a, $1
+ ld [hBGMapMode], a
+ call WaitSFX
+ call .Increment
+ ret
+; e0212
+
+.NotEnoughCoinsText: ; 0xe0212
+ ; Not enough coins…
+ text_jump UnknownText_0x1c57ab
+ db "@"
+; 0xe0217
+
+.ChooseACard: ; e0217
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ lb bc, 12, 9
+ call CardFlip_FillGreenBox
+ hlcoord 9, 0
+ ld bc, SCREEN_WIDTH
+ ld a, [wCardFlipNumCardsPlayed]
+ call AddNTimes
+ ld [hl], CARDFLIP_LIGHT_ON
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, 20
+ call DelayFrames
+ hlcoord 2, 0
+ call PlaceCardFaceDown
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, 20
+ call DelayFrames
+ hlcoord 2, 6
+ call PlaceCardFaceDown
+ call WaitBGMap
+ ld hl, .ChooseACardText
+ call CardFlip_UpdateCoinBalanceDisplay
+ xor a
+ ld [wCardFlipWhichCard], a
+.loop
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and A_BUTTON
+ jr nz, .next
+ ld de, SFX_KINESIS
+ call PlaySFX
+ call PlaceOAMCardBorder
+ ld c, 4
+ call DelayFrames
+ ld hl, wCardFlipWhichCard
+ ld a, [hl]
+ xor $1
+ ld [hl], a
+ jr .loop
+
+.next
+ ld de, SFX_SLOT_MACHINE_START
+ call PlaySFX
+ ld a, $3
+.loop2
+ push af
+ call PlaceOAMCardBorder
+ ld c, 4
+ call DelayFrames
+ call ClearSprites
+ ld c, 4
+ call DelayFrames
+ pop af
+ dec a
+ jr nz, .loop2
+ ld hl, wCardFlipWhichCard
+ ld a, [hl]
+ push af
+ xor $1
+ ld [hl], a
+ call GetCoordsOfChosenCard
+ lb bc, 6, 5
+ call CardFlip_FillGreenBox
+ pop af
+ ld [wCardFlipWhichCard], a
+ call .Increment
+ ret
+; e02b2
+
+.ChooseACardText: ; 0xe02b2
+ ; Choose a card.
+ text_jump UnknownText_0x1c57be
+ db "@"
+; 0xe02b7
+
+.PlaceYourBet: ; e02b7
+ ld hl, .PlaceYourBetText
+ call CardFlip_UpdateCoinBalanceDisplay
+.betloop
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and A_BUTTON
+ jr nz, .betdone
+ call ChooseCard_HandleJoypad
+ call CardFlip_UpdateCursorOAM
+ call DelayFrame
+ jr .betloop
+
+.betdone
+ call .Increment
+ ret
+; e02d5
+
+.PlaceYourBetText: ; 0xe02d5
+ ; Place your bet.
+ text_jump UnknownText_0x1c57ce
+ db "@"
+; 0xe02da
+
+.CheckTheCard: ; e02da
+ xor a
+ ld [hVBlankCounter], a
+ call CardFlip_UpdateCursorOAM
+ call WaitSFX
+ ld de, SFX_CHOOSE_A_CARD
+ call PlaySFX
+ call WaitSFX
+ ld a, [wCardFlipNumCardsPlayed]
+ ld e, a
+ ld d, 0
+ ld hl, wDeck
+ add hl, de
+ add hl, de
+ ld a, [wCardFlipWhichCard]
+ ld e, a
+ add hl, de
+ ld a, [hl]
+ ld [wCardFlipFaceUpCard], a
+ ld e, a
+ ld hl, wDiscardPile
+ add hl, de
+ ld [hl], TRUE
+ call GetCoordsOfChosenCard
+ call CardFlip_DisplayCardFaceUp
+ call WaitBGMap2
+ call .Increment
+ ret
+; e0314
+
+.TabulateTheResult: ; e0314
+ call CardFlip_CheckWinCondition
+ call WaitPressAorB_BlinkCursor
+ call .Increment
+ ret
+; e031e
+
+.PlayAgain: ; e031e
+ call ClearSprites
+ ld hl, .PlayAgainText
+ call CardFlip_UpdateCoinBalanceDisplay
+ call YesNoBox
+ jr nc, .Continue
+ call .Increment
+ ret
+
+.Continue:
+ ld a, [wCardFlipNumCardsPlayed]
+ inc a
+ ld [wCardFlipNumCardsPlayed], a
+ cp 12
+ jr c, .KeepTheCurrentDeck
+ call CardFlip_InitTilemap
+ ld a, $1
+ ld [hBGMapMode], a
+ call CardFlip_ShuffleDeck
+ ld hl, .CardsShuffledText
+ call PrintText
+ jr .LoopAround
+
+.KeepTheCurrentDeck:
+ call CardFlip_BlankDiscardedCardSlot
+
+.LoopAround:
+ ld a, 1
+ ld [wJumptableIndex], a
+ ret
+; e0356
+
+.PlayAgainText: ; 0xe0356
+ ; Want to play again?
+ text_jump UnknownText_0x1c57df
+ db "@"
+; 0xe035b
+
+.CardsShuffledText: ; 0xe035b
+ ; The cards have been shuffled.
+ text_jump UnknownText_0x1c57f4
+ db "@"
+; 0xe0360
+
+.Quit: ; e0360
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; e0366
+
+CardFlip_ShuffleDeck: ; e0366
+ ld hl, wDeck
+ ld bc, CARDFLIP_DECK_SIZE
+ xor a
+ call ByteFill
+ ld de, wDeck
+ ld c, CARDFLIP_DECK_SIZE - 1
+.loop
+ call Random
+ and $1f
+ cp CARDFLIP_DECK_SIZE
+ jr nc, .loop
+ ld l, a
+ ld h, $0
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .loop
+ ld [hl], c
+ dec c
+ jr nz, .loop
+ xor a
+ ld [wCardFlipNumCardsPlayed], a
+ ld hl, wDiscardPile
+ ld bc, CARDFLIP_DECK_SIZE
+ call ByteFill
+ ret
+; e0398
+
+CollapseCursorPosition: ; e0398
+ ld hl, 0
+ ld bc, 6
+ ld a, [wCardFlipCursorY]
+ call AddNTimes
+ ld b, $0
+ ld a, [wCardFlipCursorX]
+ ld c, a
+ add hl, bc
+ ret
+; e03ac
+
+GetCoordsOfChosenCard: ; e03ac
+ ld a, [wCardFlipWhichCard]
+ and a
+ jr nz, .BottomCard
+ hlcoord 2, 0
+ bcpixel 2, 3
+ jr .done
+
+.BottomCard:
+ hlcoord 2, 6
+ bcpixel 8, 3
+
+.done
+ ret
+; e03c1
+
+PlaceCardFaceDown: ; e03c1
+ xor a
+ ld [hBGMapMode], a
+ ld de, .FaceDownCardTilemap
+ lb bc, 6, 5
+ call CardFlip_CopyToBox
+ ret
+; e03ce
+
+.FaceDownCardTilemap: ; e03ce
+ db $08, $09, $09, $09, $0a
+ db $0b, $28, $2b, $28, $0c
+ db $0b, $2c, $2d, $2e, $0c
+ db $0b, $2f, $30, $31, $0c
+ db $0b, $32, $33, $34, $0c
+ db $0d, $0e, $0e, $0e, $0f
+; e03ec
+
+CardFlip_DisplayCardFaceUp: ; e03ec
+ xor a
+ ld [hBGMapMode], a
+ push hl
+ push hl
+ ; Flip the card face up.
+ ld de, .FaceUpCardTilemap
+ lb bc, 6, 5
+ call CardFlip_CopyToBox
+
+ ; Get the level and species of the upturned card.
+ ld a, [wCardFlipFaceUpCard]
+ ld e, a
+ ld d, 0
+ ld hl, .Deck
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+
+ ; Place the level.
+ pop hl
+ ld bc, 3 + SCREEN_WIDTH
+ add hl, bc
+ ld [hl], e
+
+ ; Place the Pokepic.
+ ld bc, SCREEN_HEIGHT
+ add hl, bc
+ ld a, d
+ ld de, SCREEN_WIDTH
+ ld b, 3
+.row
+ push hl
+ ld c, 3
+.col
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .col
+ pop hl
+ add hl, de
+ dec b
+ jr nz, .row
+ pop hl
+
+ ; Pointless CGB check
+ ld a, [hCGB]
+ and a
+ ret z
+
+ ; Set the attributes
+ ld de, wAttrMap - wTileMap
+ add hl, de
+ ld a, [wCardFlipFaceUpCard]
+ and 3
+ inc a
+ lb bc, 6, 5
+ call CardFlip_FillBox
+ ret
+; e043b
+
+.FaceUpCardTilemap: ; e043b
+ db $18, $19, $19, $19, $1a
+ db $1b, $35, $7f, $7f, $1c
+ db $0b, $28, $28, $28, $0c
+ db $0b, $28, $28, $28, $0c
+ db $0b, $28, $28, $28, $0c
+ db $1d, $1e, $1e, $1e, $1f
+; e0459
+
+.Deck: ; e0459
+ ; level, pic anchor (3x3)
+ db "1", $4e, "1", $57, "1", $69, "1", $60
+ db "2", $4e, "2", $57, "2", $69, "2", $60
+ db "3", $4e, "3", $57, "3", $69, "3", $60
+ db "4", $4e, "4", $57, "4", $69, "4", $60
+ db "5", $4e, "5", $57, "5", $69, "5", $60
+ db "6", $4e, "6", $57, "6", $69, "6", $60
+; e0489
+
+CardFlip_UpdateCoinBalanceDisplay: ; e0489
+ push hl
+ hlcoord 0, 12
+ ld b, 4
+ ld c, SCREEN_WIDTH - 2
+ call TextBox
+ pop hl
+ call PrintTextBoxText
+ call CardFlip_PrintCoinBalance
+ ret
+; e049c
+
+CardFlip_PrintCoinBalance: ; e049c
+ hlcoord 9, 15
+ ld b, 1
+ ld c, 9
+ call TextBox
+ hlcoord 10, 16
+ ld de, .CoinStr
+ call PlaceString
+ hlcoord 15, 16
+ ld de, wCoins
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 4
+ call PrintNum
+ ret
+; e04bc
+
+.CoinStr:
+ db "COIN@"
+; e04c1
+
+CardFlip_InitTilemap: ; e04c1 (38:44c1)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, $29
+ call ByteFill
+ hlcoord 9, 0
+ ld de, CardFlipTilemap
+ lb bc, 12, 11
+ call CardFlip_CopyToBox
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ ret
+; e04e5 (38:44e5)
+
+CardFlip_FillGreenBox: ; e04e5
+ ld a, $29
+
+CardFlip_FillBox: ; e04e7 (38:44e7)
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+
+CardFlip_CopyToBox: ; e04f7 (38:44f7)
+.row
+ push bc
+ push hl
+.col
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; e0509 (38:4509)
+
+CardFlip_CopyOAM: ; e0509
+ ld de, wVirtualOAMSprite00
+ ld a, [hli]
+.loop
+ push af
+ ld a, [hli]
+ add b
+ ld [de], a ; y
+ inc de
+ ld a, [hli]
+ add c
+ ld [de], a ; x
+ inc de
+ ld a, [hli]
+ ld [de], a ; tile id
+ inc de
+ ld a, [hli]
+ ld [de], a ; attributes
+ inc de
+ pop af
+ dec a
+ jr nz, .loop
+ ret
+; e0521
+
+CardFlip_ShiftDigitsLeftTwoPixels: ; e0521 (38:4521)
+ ld de, vTiles0 tile "0"
+ ld hl, vTiles0 tile "0" + 2
+ ld bc, 10 tiles - 2
+ call CopyBytes
+ ld hl, vTiles0 tile "9" + 1 tiles - 2
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ret
+; e0534 (38:4534)
+
+CardFlip_BlankDiscardedCardSlot: ; e0534
+ xor a
+ ld [hBGMapMode], a
+ ld a, [wCardFlipFaceUpCard]
+ ld e, a
+ ld d, 0
+
+ and 3 ; get mon
+ ld c, a
+ ld b, 0
+
+ ld a, e
+ and $1c ; get level
+ srl a
+ add LOW(.Jumptable)
+ ld l, a
+ ld a, 0
+ adc HIGH(.Jumptable)
+ ld h, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+; e0553
+
+.Jumptable: ; e0553
+ dw .Level1
+ dw .Level2
+ dw .Level3
+ dw .Level4
+ dw .Level5
+ dw .Level6
+; e055f
+
+.Level1: ; e055f
+ ld hl, wDiscardPile + 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded2
+ hlcoord 13, 3
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $37
+ ret
+
+.discarded2
+ hlcoord 13, 3
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3d
+ ret
+; e0583
+
+.Level2: ; e0583
+ ld hl, wDiscardPile - 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded1
+ hlcoord 13, 4
+ add hl, bc
+ add hl, bc
+ ld [hl], $3b
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+
+.discarded1
+ hlcoord 13, 4
+ add hl, bc
+ add hl, bc
+ ld [hl], $3d
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+; e05a7
+
+.Level3: ; e05a7
+ ld hl, wDiscardPile + 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded4
+ hlcoord 13, 6
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $38
+ ret
+
+.discarded4
+ hlcoord 13, 6
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3d
+ ret
+; e05cb
+
+.Level4: ; e05cb
+ ld hl, wDiscardPile - 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded3
+ hlcoord 13, 7
+ add hl, bc
+ add hl, bc
+ ld [hl], $3c
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+
+.discarded3
+ hlcoord 13, 7
+ add hl, bc
+ add hl, bc
+ ld [hl], $3d
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+; e05ef
+
+.Level5: ; e05ef
+ ld hl, wDiscardPile + 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded6
+ hlcoord 13, 9
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $39
+ ret
+
+.discarded6
+ hlcoord 13, 9
+ add hl, bc
+ add hl, bc
+ ld [hl], $36
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3d
+ ret
+; e0613
+
+.Level6: ; e0613
+ ld hl, wDiscardPile - 4
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .discarded5
+ hlcoord 13, 10
+ add hl, bc
+ add hl, bc
+ ld [hl], $3c
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+
+.discarded5
+ hlcoord 13, 10
+ add hl, bc
+ add hl, bc
+ ld [hl], $3d
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ ld [hl], $3a
+ ret
+; e0637
+
+CardFlip_CheckWinCondition: ; e0637
+ call CollapseCursorPosition
+ add hl, hl
+ ld de, .Jumptable
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+; e0643
+
+.Jumptable: ; e0643
+ dw .Impossible
+ dw .Impossible
+ dw .PikaJiggly
+ dw .PikaJiggly
+ dw .PoliOddish
+ dw .PoliOddish
+
+ dw .Impossible
+ dw .Impossible
+ dw .Pikachu
+ dw .Jigglypuff
+ dw .Poliwag
+ dw .Oddish
+
+ dw .OneTwo
+ dw .One
+ dw .PikaOne
+ dw .JigglyOne
+ dw .PoliOne
+ dw .OddOne
+
+ dw .OneTwo
+ dw .Two
+ dw .PikaTwo
+ dw .JigglyTwo
+ dw .PoliTwo
+ dw .OddTwo
+
+ dw .ThreeFour
+ dw .Three
+ dw .PikaThree
+ dw .JigglyThree
+ dw .PoliThree
+ dw .OddThree
+
+ dw .ThreeFour
+ dw .Four
+ dw .PikaFour
+ dw .JigglyFour
+ dw .PoliFour
+ dw .OddFour
+
+ dw .FiveSix
+ dw .Five
+ dw .PikaFive
+ dw .JigglyFive
+ dw .PoliFive
+ dw .OddFive
+
+ dw .FiveSix
+ dw .Six
+ dw .PikaSix
+ dw .JigglySix
+ dw .PoliSix
+ dw .OddSix
+; e06a3
+
+.Impossible: ; e06a3
+ jp .Lose
+; e06a6
+
+.PikaJiggly: ; e06a6
+ ld a, [wCardFlipFaceUpCard]
+ and $2
+ jp nz, .Lose
+ jr .WinSix
+
+.PoliOddish: ; e06b0
+ ld a, [wCardFlipFaceUpCard]
+ and $2
+ jr nz, .WinSix
+ jp .Lose
+
+.WinSix: ; e06ba
+ ld c, $6
+ ld de, SFX_2ND_PLACE
+ jp .Payout
+; e06c2
+
+.OneTwo: ; e06c2
+ ld a, [wCardFlipFaceUpCard]
+ and $18
+ jr z, .WinNine
+ jp .Lose
+
+.ThreeFour: ; e06cc
+ ld a, [wCardFlipFaceUpCard]
+ and $18
+ cp $8
+ jr z, .WinNine
+ jp .Lose
+
+.FiveSix: ; e06d8
+ ld a, [wCardFlipFaceUpCard]
+ and $18
+ cp $10
+ jr z, .WinNine
+ jp .Lose
+
+.WinNine: ; e06e4
+ ld c, $9
+ ld de, SFX_2ND_PLACE
+ jp .Payout
+; e06ec
+
+.Pikachu: ; e06ec
+ ld a, [wCardFlipFaceUpCard]
+ and $3
+ jr z, .WinTwelve
+ jp .Lose
+
+.Jigglypuff: ; e06f6
+ ld a, [wCardFlipFaceUpCard]
+ and $3
+ cp $1
+ jr z, .WinTwelve
+ jp .Lose
+
+.Poliwag: ; e0702
+ ld a, [wCardFlipFaceUpCard]
+ and $3
+ cp $2
+ jr z, .WinTwelve
+ jp .Lose
+
+.Oddish: ; e070e
+ ld a, [wCardFlipFaceUpCard]
+ and $3
+ cp $3
+ jr z, .WinTwelve
+ jp .Lose
+
+.WinTwelve: ; e071a
+ ld c, $c
+ ld de, SFX_2ND_PLACE
+ jp .Payout
+; e0722
+
+.One: ; e0722
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ jr z, .WinEighteen
+ jp .Lose
+
+.Two: ; e072c
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ cp $4
+ jr z, .WinEighteen
+ jp .Lose
+
+.Three: ; e0738
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ cp $8
+ jr z, .WinEighteen
+ jp .Lose
+
+.Four: ; e0744
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ cp $c
+ jr z, .WinEighteen
+ jp .Lose
+
+.Five: ; e0750
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ cp $10
+ jr z, .WinEighteen
+ jp .Lose
+
+.Six: ; e075c
+ ld a, [wCardFlipFaceUpCard]
+ and $1c
+ cp $14
+ jr z, .WinEighteen
+ jp .Lose
+
+.WinEighteen: ; e0768
+ ld c, $12
+ ld de, SFX_2ND_PLACE
+ jp .Payout
+; e0770
+
+
+.PikaOne: ; e0770
+ ld e, $0
+ jr .CheckWin72
+
+.JigglyOne: ; e0774
+ ld e, $1
+ jr .CheckWin72
+
+.PoliOne: ; e0778
+ ld e, $2
+ jr .CheckWin72
+
+.OddOne: ; e077c
+ ld e, $3
+ jr .CheckWin72
+
+.PikaTwo: ; e0780
+ ld e, $4
+ jr .CheckWin72
+
+.JigglyTwo: ; e0784
+ ld e, $5
+ jr .CheckWin72
+
+.PoliTwo: ; e0788
+ ld e, $6
+ jr .CheckWin72
+
+.OddTwo: ; e078c
+ ld e, $7
+ jr .CheckWin72
+
+.PikaThree: ; e0790
+ ld e, $8
+ jr .CheckWin72
+
+.JigglyThree: ; e0794
+ ld e, $9
+ jr .CheckWin72
+
+.PoliThree: ; e0798
+ ld e, $a
+ jr .CheckWin72
+
+.OddThree: ; e079c
+ ld e, $b
+ jr .CheckWin72
+
+.PikaFour: ; e07a0
+ ld e, $c
+ jr .CheckWin72
+
+.JigglyFour: ; e07a4
+ ld e, $d
+ jr .CheckWin72
+
+.PoliFour: ; e07a8
+ ld e, $e
+ jr .CheckWin72
+
+.OddFour: ; e07ac
+ ld e, $f
+ jr .CheckWin72
+
+.PikaFive: ; e07b0
+ ld e, $10
+ jr .CheckWin72
+
+.JigglyFive: ; e07b4
+ ld e, $11
+ jr .CheckWin72
+
+.PoliFive: ; e07b8
+ ld e, $12
+ jr .CheckWin72
+
+.OddFive: ; e07bc
+ ld e, $13
+ jr .CheckWin72
+
+.PikaSix: ; e07c0
+ ld e, $14
+ jr .CheckWin72
+
+.JigglySix: ; e07c4
+ ld e, $15
+ jr .CheckWin72
+
+.PoliSix: ; e07c8
+ ld e, $16
+ jr .CheckWin72
+
+.OddSix: ; e07cc
+ ld e, $17
+
+.CheckWin72: ; e07ce
+ ld a, [wCardFlipFaceUpCard]
+ cp e
+ jr nz, .Lose
+ ld c, 72
+ ld de, SFX_2ND_PLACE
+ jr .Payout
+
+.Lose: ; e07db
+ ld de, SFX_WRONG
+ call PlaySFX
+ ld hl, .Text_Darn
+ call CardFlip_UpdateCoinBalanceDisplay
+ call WaitSFX
+ ret
+
+.Payout: ; e07eb
+ push bc
+ push de
+ ld hl, .Text_Yeah
+ call CardFlip_UpdateCoinBalanceDisplay
+ pop de
+ call PlaySFX
+ call WaitSFX
+ pop bc
+.loop
+ push bc
+ call .IsCoinCaseFull
+ jr c, .full
+ call .AddCoinPlaySFX
+
+.full
+ call CardFlip_PrintCoinBalance
+ ld c, 2
+ call DelayFrames
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+; e0811
+
+.Text_Yeah: ; 0xe0811
+ ; Yeah!
+ text_jump UnknownText_0x1c5813
+ db "@"
+; 0xe0816
+
+.Text_Darn: ; 0xe0816
+ ; Darn…
+ text_jump UnknownText_0x1c581a
+ db "@"
+; 0xe081b
+
+.AddCoinPlaySFX: ; e081b
+ ld a, [wCoins]
+ ld h, a
+ ld a, [wCoins + 1]
+ ld l, a
+ inc hl
+ ld a, h
+ ld [wCoins], a
+ ld a, l
+ ld [wCoins + 1], a
+ ld de, SFX_PAY_DAY
+ call PlaySFX
+ ret
+; e0833
+
+.IsCoinCaseFull: ; e0833
+ ld a, [wCoins]
+ cp HIGH(MAX_COINS)
+ jr c, .less
+ jr z, .check_low
+ jr .more
+
+.check_low
+ ld a, [wCoins + 1]
+ cp LOW(MAX_COINS)
+ jr c, .less
+
+.more
+ scf
+ ret
+
+.less
+ and a
+ ret
+; e0849
+
+PlaceOAMCardBorder: ; e0849
+ call GetCoordsOfChosenCard
+ ld hl, .SpriteData
+ call CardFlip_CopyOAM
+ ret
+; e0853
+
+.SpriteData: ; e0853
+ db 18
+ dsprite 0, 0, 0, 0, $04, 0
+ dsprite 0, 0, 1, 0, $06, 0
+ dsprite 0, 0, 2, 0, $06, 0
+ dsprite 0, 0, 3, 0, $06, 0
+ dsprite 0, 0, 4, 0, $04, 0 | X_FLIP
+
+ dsprite 1, 0, 0, 0, $05, 0
+ dsprite 1, 0, 4, 0, $05, 0 | X_FLIP
+
+ dsprite 2, 0, 0, 0, $05, 0
+ dsprite 2, 0, 4, 0, $05, 0 | X_FLIP
+
+ dsprite 3, 0, 0, 0, $05, 0
+ dsprite 3, 0, 4, 0, $05, 0 | X_FLIP
+
+ dsprite 4, 0, 0, 0, $05, $00
+ dsprite 4, 0, 4, 0, $05, 0 | X_FLIP
+
+ dsprite 5, 0, 0, 0, $04, 0 | Y_FLIP
+ dsprite 5, 0, 1, 0, $06, 0 | Y_FLIP
+ dsprite 5, 0, 2, 0, $06, 0 | Y_FLIP
+ dsprite 5, 0, 3, 0, $06, 0 | Y_FLIP
+ dsprite 5, 0, 4, 0, $04, 0 | X_FLIP | Y_FLIP
+; e089c
+
+ChooseCard_HandleJoypad: ; e089c
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_LEFT
+ jp nz, .d_left
+ ld a, [hl]
+ and D_RIGHT
+ jp nz, .d_right
+ ld a, [hl]
+ and D_UP
+ jp nz, .d_up
+ ld a, [hl]
+ and D_DOWN
+ jp nz, .d_down
+ ret
+; e08b8
+
+.d_left ; e08b8
+ ld hl, wCardFlipCursorX
+ ld a, [wCardFlipCursorY]
+ and a
+ jr z, .mon_pair_left
+ cp $1
+ jr z, .mon_group_left
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ jp .play_sound
+
+.mon_group_left
+ ld a, [hl]
+ cp $3
+ jr c, .left_to_number_gp
+ dec [hl]
+ jp .play_sound
+
+.mon_pair_left
+ ld a, [hl]
+ and $e
+ ld [hl], a
+ cp $3
+ jr c, .left_to_number_gp
+ dec [hl]
+ dec [hl]
+ jp .play_sound
+
+.left_to_number_gp
+ ld a, $2
+ ld [wCardFlipCursorY], a
+ ld a, $1
+ ld [wCardFlipCursorX], a
+ jp .play_sound
+; e08ef
+
+.d_right ; e08ef
+ ld hl, wCardFlipCursorX
+ ld a, [wCardFlipCursorY]
+ and a
+ jr z, .mon_pair_right
+ ld a, [hl]
+ cp $5
+ ret nc
+ inc [hl]
+ jr .play_sound
+
+.mon_pair_right
+ ld a, [hl]
+ and $e
+ ld [hl], a
+ cp $4
+ ret nc
+ inc [hl]
+ inc [hl]
+ jr .play_sound
+
+.d_up ; e090a
+ ld hl, wCardFlipCursorY
+ ld a, [wCardFlipCursorX]
+ and a
+ jr z, .num_pair_up
+ cp $1
+ jr z, .num_gp_up
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ jr .play_sound
+
+.num_gp_up
+ ld a, [hl]
+ cp $3
+ jr c, .up_to_mon_group
+ dec [hl]
+ jr .play_sound
+
+.num_pair_up
+ ld a, [hl]
+ and $e
+ ld [hl], a
+ cp $3
+ jr c, .up_to_mon_group
+ dec [hl]
+ dec [hl]
+ jr .play_sound
+
+.up_to_mon_group
+ ld a, $1
+ ld [wCardFlipCursorY], a
+ ld a, $2
+ ld [wCardFlipCursorX], a
+ jr .play_sound
+
+.d_down ; e093d
+ ld hl, wCardFlipCursorY
+ ld a, [wCardFlipCursorX]
+ and a
+ jr z, .num_pair_down
+ ld hl, wCardFlipCursorY
+ ld a, [hl]
+ cp $7
+ ret nc
+ inc [hl]
+ jr .play_sound
+
+.num_pair_down
+ ld a, [hl]
+ and $e
+ ld [hl], a
+ cp $6
+ ret nc
+ inc [hl]
+ inc [hl]
+
+.play_sound ; e0959
+ ld de, SFX_POKEBALLS_PLACED_ON_TABLE
+ call PlaySFX
+ ret
+; e0960
+
+CardFlip_UpdateCursorOAM: ; e0960
+ call ClearSprites
+ ld a, [hCGB]
+ and a
+ jr nz, .skip
+ ld a, [hVBlankCounter]
+ and $4
+ ret nz
+
+.skip
+ call CollapseCursorPosition
+ add hl, hl
+ add hl, hl
+ ld de, .OAMData
+ add hl, de
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call CardFlip_CopyOAM
+ ret
+; e0981
+
+.OAMData: ; e0981
+cardflip_cursor: MACRO
+if _NARG >= 5
+ dbpixel \1, \2, \3, \4
+ dw \5
+else
+ dbpixel \1, \2
+ dw \3
+endc
+ENDM
+
+ cardflip_cursor 11, 2, .Impossible
+ cardflip_cursor 12, 2, .Impossible
+ cardflip_cursor 13, 2, .PokeGroupPair
+ cardflip_cursor 13, 2, .PokeGroupPair
+ cardflip_cursor 17, 2, .PokeGroupPair
+ cardflip_cursor 17, 2, .PokeGroupPair
+
+ cardflip_cursor 11, 3, .Impossible
+ cardflip_cursor 12, 3, .Impossible
+ cardflip_cursor 13, 3, .PokeGroup
+ cardflip_cursor 15, 3, .PokeGroup
+ cardflip_cursor 17, 3, .PokeGroup
+ cardflip_cursor 19, 3, .PokeGroup
+
+ cardflip_cursor 11, 5, .NumGroupPair
+ cardflip_cursor 12, 5, .NumGroup
+ cardflip_cursor 13, 5, .SingleTile
+ cardflip_cursor 15, 5, .SingleTile
+ cardflip_cursor 17, 5, .SingleTile
+ cardflip_cursor 19, 5, .SingleTile
+
+ cardflip_cursor 11, 5, .NumGroupPair
+ cardflip_cursor 12, 6, 0, 4, .NumGroup
+ cardflip_cursor 13, 6, 0, 4, .SingleTile
+ cardflip_cursor 15, 6, 0, 4, .SingleTile
+ cardflip_cursor 17, 6, 0, 4, .SingleTile
+ cardflip_cursor 19, 6, 0, 4, .SingleTile
+
+ cardflip_cursor 11, 8, .NumGroupPair
+ cardflip_cursor 12, 8, .NumGroup
+ cardflip_cursor 13, 8, .SingleTile
+ cardflip_cursor 15, 8, .SingleTile
+ cardflip_cursor 17, 8, .SingleTile
+ cardflip_cursor 19, 8, .SingleTile
+
+ cardflip_cursor 11, 8, .NumGroupPair
+ cardflip_cursor 12, 9, 0, 4, .NumGroup
+ cardflip_cursor 13, 9, 0, 4, .SingleTile
+ cardflip_cursor 15, 9, 0, 4, .SingleTile
+ cardflip_cursor 17, 9, 0, 4, .SingleTile
+ cardflip_cursor 19, 9, 0, 4, .SingleTile
+
+ cardflip_cursor 11, 11, .NumGroupPair
+ cardflip_cursor 12, 11, .NumGroup
+ cardflip_cursor 13, 11, .SingleTile
+ cardflip_cursor 15, 11, .SingleTile
+ cardflip_cursor 17, 11, .SingleTile
+ cardflip_cursor 19, 11, .SingleTile
+
+ cardflip_cursor 11, 11, .NumGroupPair
+ cardflip_cursor 12, 12, 0, 4, .NumGroup
+ cardflip_cursor 13, 12, 0, 4, .SingleTile
+ cardflip_cursor 15, 12, 0, 4, .SingleTile
+ cardflip_cursor 17, 12, 0, 4, .SingleTile
+ cardflip_cursor 19, 12, 0, 4, .SingleTile
+; e0a41
+
+.SingleTile: ; e0a41
+ db 6
+ dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
+ dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 1, 0, $03, 0 | PRIORITY
+
+.PokeGroup: ; e0a5a
+ db 26
+ dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
+ dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | PRIORITY
+ dsprite 1, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 1, 0, 1, 0, $01, 0 | X_FLIP | PRIORITY
+ dsprite 2, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 2, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 3, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 3, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 4, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 4, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 5, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 5, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 6, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 6, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 7, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 7, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 8, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 8, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 9, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 9, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 10, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 10, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 10, 1, -1, 7, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 10, 1, 0, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 10, 1, 1, 0, $03, 0 | PRIORITY
+
+.NumGroup: ; e0ac3
+ db 20
+ dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
+ dsprite 0, 0, 0, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 1, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 2, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 3, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 4, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 5, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 6, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 7, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 8, 0, $03, 0 | PRIORITY
+ dsprite 0, 5, -1, 7, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 0, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 1, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 2, 0, $03, 0 | PRIORITY
+ dsprite 0, 5, 3, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 4, 0, $03, 0 | PRIORITY
+ dsprite 0, 5, 5, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 6, 0, $03, 0 | PRIORITY
+ dsprite 0, 5, 7, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 0, 5, 8, 0, $03, 0 | PRIORITY
+
+.NumGroupPair: ; e0b14
+ db 30
+ dsprite 0, 0, 0, 0, $00, 0 | PRIORITY
+ dsprite 0, 0, 1, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 2, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 4, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 5, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 6, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 7, 0, $03, 0 | PRIORITY
+ dsprite 0, 0, 8, 0, $02, 0 | PRIORITY
+ dsprite 0, 0, 9, 0, $03, 0 | PRIORITY
+ dsprite 1, 0, 0, 0, $01, 0 | PRIORITY
+ dsprite 1, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 1, 0, 5, 0, $03, 0 | PRIORITY
+ dsprite 1, 0, 7, 0, $03, 0 | PRIORITY
+ dsprite 1, 0, 9, 0, $03, 0 | PRIORITY
+ dsprite 2, 0, 0, 0, $01, 0 | PRIORITY
+ dsprite 2, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 2, 0, 5, 0, $03, 0 | PRIORITY
+ dsprite 2, 0, 7, 0, $03, 0 | PRIORITY
+ dsprite 2, 0, 9, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 0, 0, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 2, 1, 1, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 2, 1, 2, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 2, 1, 3, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 4, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 5, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 6, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 7, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 8, 0, $03, 0 | PRIORITY
+ dsprite 2, 1, 9, 0, $03, 0 | PRIORITY
+
+.PokeGroupPair: ; e0b8d
+ db 38
+ dsprite 0, 0, -1, 7, $00, 0 | PRIORITY
+ dsprite 0, 0, 3, 0, $00, 0 | X_FLIP | PRIORITY
+ dsprite 1, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 1, 0, 3, 0, $01, 0 | X_FLIP | PRIORITY
+ dsprite 2, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 2, 0, 3, 0, $01, 0 | X_FLIP | PRIORITY
+ dsprite 3, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 3, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 3, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 4, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 4, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 4, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 5, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 5, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 5, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 6, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 6, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 6, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 7, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 7, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 7, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 8, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 8, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 8, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 9, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 9, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 9, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 10, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 10, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 10, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 11, 0, -1, 7, $01, 0 | PRIORITY
+ dsprite 11, 0, 1, 0, $03, 0 | PRIORITY
+ dsprite 11, 0, 3, 0, $03, 0 | PRIORITY
+ dsprite 11, 1, -1, 7, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 11, 1, 0, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 11, 1, 1, 0, $03, 0 | Y_FLIP | PRIORITY
+ dsprite 11, 1, 2, 0, $02, 0 | Y_FLIP | PRIORITY
+ dsprite 11, 1, 3, 0, $03, 0 | X_FLIP | Y_FLIP | PRIORITY
+
+.Impossible: ; e0c26
+ db 4
+ dsprite 0, 0, 0, 0, $00, 0 | PRIORITY
+ dsprite 0, 0, 1, 0, $00, 0 | X_FLIP | PRIORITY
+ dsprite 1, 0, 0, 0, $00, 0 | Y_FLIP | PRIORITY
+ dsprite 1, 0, 1, 0, $00, 0 | X_FLIP | Y_FLIP | PRIORITY
+; e0c37
+
+CardFlip_InitAttrPals: ; e0c37 (38:4c37)
+ ld a, [hCGB]
+ and a
+ ret z
+
+ hlcoord 0, 0, wAttrMap
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ xor a
+ call ByteFill
+
+ hlcoord 12, 1, wAttrMap
+ lb bc, 2, 2
+ ld a, $1
+ call CardFlip_FillBox
+
+ hlcoord 14, 1, wAttrMap
+ lb bc, 2, 2
+ ld a, $2
+ call CardFlip_FillBox
+
+ hlcoord 16, 1, wAttrMap
+ lb bc, 2, 2
+ ld a, $3
+ call CardFlip_FillBox
+
+ hlcoord 18, 1, wAttrMap
+ lb bc, 2, 2
+ ld a, $4
+ call CardFlip_FillBox
+
+ hlcoord 9, 0, wAttrMap
+ lb bc, 12, 1
+ ld a, $1
+ call CardFlip_FillBox
+
+ ld a, [rSVBK]
+ push af
+ ld a, BANK(wBGPals1)
+ ld [rSVBK], a
+ ld hl, .palettes
+ ld de, wBGPals1
+ ld bc, 9 palettes
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ ret
+; e0c93 (38:4c93)
+
+.palettes ; e0c93
+INCLUDE "gfx/card_flip/card_flip.pal"
+; e0cdb
+
+CardFlipLZ03: ; e0cdb
+INCBIN "gfx/card_flip/card_flip_3.2bpp.lz"
+
+CardFlipOffButtonGFX: ; e0cf6
+INCBIN "gfx/card_flip/off.2bpp"
+
+CardFlipOnButtonGFX: ; e0d06
+INCBIN "gfx/card_flip/on.2bpp"
+
+CardFlipLZ01: ; e0d16
+INCBIN "gfx/card_flip/card_flip_1.2bpp.lz"
+
+CardFlipLZ02: ; e0ea8
+INCBIN "gfx/card_flip/card_flip_2.2bpp.lz"
+
+CardFlipTilemap: ; e110c
+INCBIN "gfx/card_flip/card_flip.tilemap"
+; e1190