; screen variables DEF vSelectedCardIndex EQU VARIABLES_START DEF vPreviousCardIndex EQU vSelectedCardIndex + 1 DEF vSelectedCardInSpread EQU vPreviousCardIndex + 1 ScreenCardRead: dw CardReadSetup dw CardReadUpdate dw CardReadDraw dw CardReadTeardown ;; CARD READ PAGE STARTS HERE CardReadSetup: ; Turn the LCD off ld hl, rLCDC bit 7, [hl] jp z, .screenOff .busyWait ld a, [rLY] cp a, 143 jp c, .busyWait ld [hl], 0 .screenOff ld hl, UITiles ; source ld de, $8000 + $80*16; destination of copy ld bc, UITilesEnd - UITiles ; length to copy call CopyRangeUnsafe ld hl, LetterTiles ; map the small font into vram at ascii locations ld de, $8000 + (127 + $21)*16 ld bc, LetterTilesEnd - LetterTiles call CopyRangeUnsafe ld hl, UITilemap ; origin ld de, $9800 ; destination ld b, 18 ; height ld c, 10 ; width call CopyTilesToMapUnsafe ld a, 0 ld hl, $c000 ld bc, 18*10 .buildZeros ld a, 0 ld [hl+], a ld a, b or a, c dec bc jp nz, .buildZeros ld hl, $c000 ld de, $9800 + 10 ld b, 18 ld c, 10 call CopyTilesToMapUnsafe ; set LCD and display registers ld a, %11100100 ld [rBGP], a ld a, LCDCF_BLK01 | LCDCF_ON | LCDCF_BGON ld [rLCDC], a ; arguments for the screen ld a, 0 ldh [vSelectedCardInSpread], a ; vCurrentSpread is set by the calling context. ld a, $FF ldh [vPreviousCardIndex], a ld a, 0 ldh [vSelectedCardIndex], a call LoadCardData ei ret ; return from cardreadsetup CardReadUpdate: ld hl, rMYBTNP bit 5, [hl] jp z, .doneWithB ld hl, ScreenMainMenu call ChangeScene ret .doneWithB bit 3, [hl] ; select the down key jp z, :+ ; skip the following code if down is not pressed ldh a, [vSelectedCardIndex] inc a ; increment when they press down because the deck has card 0 at the top ldh [vSelectedCardIndex], a : bit 2, [hl] ; select up key %0000_0100 jp z, :+ ; skip the following code if up is not pressed ldh a, [vSelectedCardIndex] dec a ; decrement when they press up because the deck has card 0 at the top ldh [vSelectedCardIndex], a : ldh a, [vSelectedCardIndex] ; load current selected tile index ld hl, Cards ; deck length cp a, [hl] ; ddoes the index equal the deck length? jp nz, :+ ld a, 0 ; if the index equals the deck length replace it with zero ldh [vSelectedCardIndex], a : cp a, $FF ; if the tile index is $FF (underflowed from dec) jp nz, :+ ld a, [hl] dec a ;replace with deck length - 1 ldh [vSelectedCardIndex], a : ld hl, rMYBTNP bit 1, [hl] jp z, :+ ; skip the following code if left is not pressed ldh a, [vSelectedCardInSpread] dec a ldh [vSelectedCardInSpread], a : bit 0, [hl] jp z, :+ ; skip the following code if right is not pressed ldh a, [vSelectedCardInSpread] inc a ldh [vSelectedCardInSpread], a : ldh a, [vCurrentSpread] ld l, a ldh a, [vCurrentSpread+1] ld h, a ; fetch the spread length address into h ldh a, [vSelectedCardInSpread] cp a, [hl] ; ddoes the index equal the deck length? jp nz, :+ ld a, 0 ; if the index equals the deck length replace it with zero ldh [vSelectedCardInSpread], a : cp a, $FF ; if the tile index is $FF (underflowed from dec) jp nz, :+ ld a, [hl] dec a ;replace with deck length - 1 ldh [vSelectedCardInSpread], a : ret CardReadDraw: ; first, we draw the spread minimap .drawSpread ldh a, [vCurrentSpread] ld c, a ldh a, [vCurrentSpread+1] ld b, a ld a, [bc] ld e, a ld d, 0 .foundSpread push de ; length of the spread in e! .drawCard ld a, e cp a, 0 jp z, .doneWithSpread inc bc ; first card of spread is after the length of the spread ld hl, $9800 + (32*12)+11 ld a, [bc] swap a and a, %0000_1111 ld d, 0 ld e, a ; add a to hl add hl, de .doneWithWalkRight ld a, [bc] and a, %0000_1111 ld d, 0 ld e, 32 jp z, .doneWithWalkDown .walkDown dec a add hl, de cp a, 0 jp nz, .walkDown .doneWithWalkDown .drawMiniCard ld [hl], $83 add hl, de ld [hl], $84 .doneDrawingCard pop de dec de ld a, e cp a, 0 jp nz, .foundSpread .doneWithSpread ; highlight the selected card ldh a, [vCurrentSpread] ld l, a ldh a, [vCurrentSpread+1] ld h, a ldh a, [vSelectedCardInSpread] ld d, 0 ld e, a ; index of selected card in spread inc e ; skip length add hl, de ld b, h ld c, l ; move location of selected card to bc ld hl, $9800 + (32*12)+11 ld a, [bc] ; a has card location swap a and a, %0000_1111 ld e, a add hl, de ; step right ld e, 32 ld a, [bc] and a, %0000_1111 jp z, CardReadDraw_DrawSelectedCard : dec a add hl, de ; step down cp a, 0 jp nz, :- CardReadDraw_DrawSelectedCard: ld [hl], $85 add hl, de ld [hl], $86 ; okay now we draw the deck minimap ld a, [Cards] srl a ; divide by two because we're drawing icons for pairs of cards ld b, a ; length of the cards data ld hl, $9800+32*4+19 ; start point ld de, 32 ; stride CardReadDrawCopyTile: ld [hl], $81 ; load the tile for "unselected pair of tiles" add hl, de ; step forward by stride (hl is the address we're drawing to on screen) dec b ; sets zero flag because it's an 8-bit register jp nz, CardReadDrawCopyTile ; repeat if there's more cards in the deck to draw ld [hl], $87 ; draw the cap at the end ; the rest of this stuff deals with drawing the set-out card for the current ; selected card CardReadDrawSelectedTile: ldh a, [vSelectedCardIndex] srl a ld b, a ld hl, $9800+32*4+19 ; start point ld de, 32 ; stride ; if the card we need to draw is in the zeroth spot, jump straight to drawing. jp z, CardReadDrawDrawSelectedTile CardReadDrawCountDownTile: ; otherwise, decrement b until we're there add hl, de dec b jp nz, CardReadDrawCountDownTile CardReadDrawDrawSelectedTile: ldh a, [vSelectedCardIndex] and a, 1 ; if we're on an odd tile, draw the tile with the top card selected. ; no other tile needs to change. ld [hl], $82 jp z, CardReadDrawReturn ; otherwise we need to draw the tile with the bottom card selected. ; this is more complicated because the tile underneath needs to change as well. ld [hl], $90 ; draw the "bottom card is selected" add hl, de ; look down one tile (de has stride, remember) ld a, $81 cp a, [hl] ; check if the existing tile at that spot is $81 (cards) or not (end cap) ld [hl], $91 ; draw the tile of "cards but the card above is selected" jp z, CardReadDrawReturn ; if that was right, then jump to the end ld [hl], $92 ; if that was wrong, draw "end cap but the card above is selected" CardReadDrawReturn: ; check if the current selected tile is different from the previous; ; if it is different, then load new card data ldh a, [vSelectedCardIndex] ld hl, vPreviousCardIndex cp a, [hl] call nz, LoadCardData ; only load new card data if the selected card has changed ret CardReadTeardown: ret LoadCardData: ld a, [vSelectedCardIndex] ld [vPreviousCardIndex], a ld b, 144 call AwaitLine ; wait for vblank before starting to work ld a, [vSelectedCardIndex] ld b, 0 ld c, a ; load bc from a. coming into this we have the number of the card in the card array in a ld hl, Cards + 1 ; skip the length prefix add hl, bc add hl, bc ; add this twice to double the offset because it's two bytes per address ; follow the pointer we're looking at ld a, [hl+] ld c, a ld a, [hl+] ld b, a ld h, b ld l, c ; hl now contains the address of the card data. ; hl points to a card struct. ; card struct starts with a sequence of length-prefixed strings in memory ; so when we're done writing one, hl will be correctly placed to read the next ; length-prefixed print doesn't require passing a length ; so all we have to set is the destination for each ld de, $9800 + 32*1 + 10 call PrintString ld de, $9800 + 32*2 + 10 call PrintString ld de, $9800 + 32*6 + 10 call PrintString ld de, $9800 + 32*7 + 10 call PrintString ld de, $9800 + 32*8 + 10 call PrintString ; hl now contains the address after all the strings. ; [hl+] and [hl+] read the length first, into bc ld a, [hl+] ld c, a ld a, [hl+] ld b, a ; bc has length ld a, [hl+] ld e, a ld a, [hl+] ld d, a ; de has source of tile range copy push hl ; save the pointer to the next bit of card data (tile map) ld h, d ld l, e ; source ld de, $9800 + 32 + 1 ; destination ld b, 16 ; height ld c, 8 ; width call CopyTilesSafe ei WaitForSafeCopy: ld b, 140 call AwaitLine ldh a, [vSafeCopyCount] ld b, a ldh a, [vSafeCopyCount+1] or a, b jp nz, WaitForSafeCopy di pop hl ld a, [hl+] ld c, a ld a, [hl+] ld b, a ; bc has length ld a, [hl+] ld e, a ld a, [hl+] ld d, a ; de has source of tile range copy ; push hl ; we don't need to keep track of hl at this point and our stack is clean. ld h, d ld l, e ; hl takes the source ld de, $8000 ; always load tile data into the same spot in vram call CopyRangeSafe ei WaitForSafeCopy2: ld b, 140 call AwaitLine ldh a, [vSafeCopyCount] ld b, a ldh a, [vSafeCopyCount+1] or a, b jp nz, WaitForSafeCopy2 di ret INCLUDE "CopyRangeSafe.inc" INCLUDE "CopyTilesSafe.inc" INCLUDE "CardLibrary.inc" SECTION "Tile data", ROM0 UITiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $0f,$0f,$10,$10,$10,$10,$10,$10,$0f,$0f,$10,$10,$10,$10,$10,$10 db $7f,$7f,$80,$80,$80,$80,$80,$80,$7f,$7f,$10,$10,$10,$10,$10,$10 db $00,$3c,$3c,$7e,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3 db $42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$3c,$7e,$00,$3c db $00,$3c,$3c,$7e,$42,$c3,$5a,$db,$5a,$db,$5a,$db,$5a,$db,$5a,$db db $5a,$db,$5a,$db,$5a,$db,$5a,$db,$5a,$db,$42,$c3,$3c,$7e,$00,$3c db $0f,$0f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $ce,$f0,$c6,$f8,$0e,$f0,$16,$e8,$5e,$a0,$fe,$00,$fc,$00,$00,$00 db $ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8 db $00,$00,$fc,$00,$fe,$00,$ae,$50,$1e,$e0,$06,$f8,$ce,$f0,$c6,$f8 db $00,$00,$3f,$00,$7f,$00,$7a,$05,$68,$17,$70,$0f,$63,$1f,$73,$0f db $63,$1f,$73,$0f,$60,$1f,$78,$07,$75,$0a,$7f,$00,$3f,$00,$00,$00 db $00,$00,$ff,$00,$ff,$00,$aa,$55,$00,$ff,$00,$ff,$ff,$ff,$ff,$ff db $63,$1f,$73,$0f,$63,$1f,$73,$0f,$63,$1f,$73,$0f,$63,$1f,$73,$0f db $ff,$ff,$ff,$ff,$00,$ff,$00,$ff,$55,$aa,$ff,$00,$ff,$00,$00,$00 db $0f,$0f,$10,$10,$10,$10,$10,$10,$7f,$7f,$80,$80,$80,$80,$80,$80 db $7f,$7f,$10,$10,$10,$10,$10,$10,$0f,$0f,$10,$10,$10,$10,$10,$10 db $7f,$7f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 UITilesEnd: LetterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $03,$03,$07,$07,$0f,$0f,$0e,$0e,$1c,$1c,$30,$30,$c0,$c0,$c0,$c0 db $24,$24,$6c,$6c,$6c,$6c,$48,$48,$00,$00,$00,$00,$00,$00,$00,$00 db $1a,$1a,$1a,$1a,$7f,$7f,$34,$34,$34,$34,$fe,$fe,$68,$68,$68,$68 db $08,$08,$3c,$3c,$6a,$6a,$68,$68,$3c,$3c,$0a,$0a,$6a,$6a,$3c,$3c db $63,$63,$a6,$a6,$ac,$ac,$d8,$d8,$1b,$1b,$35,$35,$65,$65,$c6,$c6 db $18,$18,$24,$24,$28,$28,$18,$18,$2c,$2c,$66,$66,$67,$67,$39,$39 db $18,$18,$18,$18,$18,$18,$30,$30,$00,$00,$00,$00,$00,$00,$00,$00 db $04,$04,$0c,$0c,$18,$18,$10,$10,$10,$10,$18,$18,$0c,$0c,$04,$04 db $20,$20,$30,$30,$18,$18,$08,$08,$08,$08,$18,$18,$30,$30,$20,$20 db $00,$00,$08,$08,$28,$28,$1e,$1e,$78,$78,$14,$14,$10,$10,$00,$00 db $00,$00,$00,$00,$18,$18,$18,$18,$7e,$7e,$18,$18,$18,$18,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$0c,$0c,$0c,$0c,$0c,$0c,$18,$18 db $00,$00,$00,$00,$00,$00,$1c,$1c,$38,$38,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$00,$00 db $04,$04,$0c,$0c,$0c,$0c,$18,$18,$18,$18,$30,$30,$30,$30,$20,$20 db $00,$00,$38,$38,$64,$64,$64,$64,$64,$64,$64,$64,$64,$64,$38,$38 db $08,$08,$18,$18,$38,$38,$18,$18,$18,$18,$18,$18,$18,$18,$3c,$3c db $00,$00,$38,$38,$4c,$4c,$0c,$0c,$0c,$0c,$18,$18,$30,$30,$7c,$7c db $00,$00,$3c,$3c,$06,$06,$06,$06,$1c,$1c,$06,$06,$06,$06,$3c,$3c db $00,$00,$04,$04,$26,$26,$26,$26,$3e,$3e,$06,$06,$06,$06,$04,$04 db $00,$00,$7c,$7c,$64,$64,$60,$60,$78,$78,$44,$44,$04,$04,$38,$38 db $00,$00,$20,$20,$30,$30,$30,$30,$3c,$3c,$32,$32,$32,$32,$1c,$1c db $00,$00,$7c,$7c,$4c,$4c,$0c,$0c,$3e,$3e,$18,$18,$30,$30,$20,$20 db $00,$00,$78,$78,$64,$64,$64,$64,$38,$38,$64,$64,$64,$64,$3c,$3c db $00,$00,$38,$38,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$0c,$0c,$18,$18 db $00,$00,$00,$00,$18,$18,$18,$18,$00,$00,$18,$18,$18,$18,$00,$00 db $00,$00,$00,$00,$0c,$0c,$0c,$0c,$00,$00,$0c,$0c,$0c,$0c,$18,$18 db $00,$00,$0c,$0c,$18,$18,$30,$30,$60,$60,$30,$30,$18,$18,$0c,$0c db $00,$00,$00,$00,$3c,$3c,$3c,$3c,$00,$00,$3c,$3c,$3c,$3c,$00,$00 db $00,$00,$30,$30,$18,$18,$0c,$0c,$06,$06,$0c,$0c,$18,$18,$30,$30 db $38,$38,$6c,$6c,$24,$24,$0c,$0c,$18,$18,$18,$18,$00,$00,$18,$18 db $3c,$3c,$62,$62,$59,$59,$45,$45,$5d,$5d,$5d,$5d,$63,$63,$38,$38 db $00,$00,$38,$38,$34,$34,$32,$32,$3e,$3e,$32,$32,$32,$32,$32,$32 db $00,$00,$7c,$7c,$32,$32,$32,$32,$3c,$3c,$32,$32,$32,$32,$1c,$1c db $00,$00,$3c,$3c,$72,$72,$62,$62,$60,$60,$60,$60,$62,$62,$3c,$3c db $00,$00,$f8,$f8,$64,$64,$62,$62,$62,$62,$62,$62,$62,$62,$3c,$3c db $00,$00,$fc,$fc,$60,$60,$60,$60,$78,$78,$60,$60,$60,$60,$3c,$3c db $00,$00,$fc,$fc,$60,$60,$60,$60,$78,$78,$60,$60,$60,$60,$20,$20 db $00,$00,$78,$78,$64,$64,$60,$60,$60,$60,$6e,$6e,$64,$64,$3c,$3c db $00,$00,$40,$40,$62,$62,$62,$62,$7e,$7e,$62,$62,$62,$62,$22,$22 db $00,$00,$10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$08,$08 db $00,$00,$08,$08,$0c,$0c,$0c,$0c,$0c,$0c,$4c,$4c,$6c,$6c,$3c,$3c db $00,$00,$40,$40,$64,$64,$68,$68,$70,$70,$68,$68,$64,$64,$22,$22 db $00,$00,$20,$20,$30,$30,$30,$30,$30,$30,$30,$30,$32,$32,$1e,$1e db $00,$00,$3e,$3e,$6a,$6a,$6a,$6a,$6a,$6a,$62,$62,$62,$62,$22,$22 db $00,$00,$72,$72,$6a,$6a,$6a,$6a,$6a,$6a,$66,$66,$62,$62,$22,$22 db $00,$00,$3c,$3c,$66,$66,$62,$62,$62,$62,$62,$62,$32,$32,$1e,$1e db $00,$00,$f8,$f8,$64,$64,$64,$64,$7c,$7c,$60,$60,$60,$60,$20,$20 db $00,$00,$38,$38,$64,$64,$62,$62,$62,$62,$6a,$6a,$64,$64,$3b,$3b db $00,$00,$f8,$f8,$64,$64,$64,$64,$7c,$7c,$68,$68,$64,$64,$23,$23 db $00,$00,$38,$38,$64,$64,$60,$60,$38,$38,$04,$04,$64,$64,$38,$38 db $00,$00,$7e,$7e,$5a,$5a,$18,$18,$18,$18,$18,$18,$18,$18,$08,$08 db $00,$00,$40,$40,$62,$62,$62,$62,$62,$62,$62,$62,$62,$62,$3c,$3c db $00,$00,$40,$40,$62,$62,$62,$62,$62,$62,$24,$24,$34,$34,$18,$18 db $00,$00,$c3,$c3,$62,$62,$62,$62,$6a,$6a,$6a,$6a,$6a,$6a,$34,$34 db $00,$00,$42,$42,$62,$62,$34,$34,$18,$18,$3c,$3c,$66,$66,$42,$42 db $00,$00,$4c,$4c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$4c,$4c,$78,$78 db $00,$00,$7e,$7e,$46,$46,$0c,$0c,$18,$18,$30,$30,$62,$62,$7e,$7e db $7c,$7c,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$7c,$7c db $20,$20,$30,$30,$30,$30,$18,$18,$18,$18,$0c,$0c,$0c,$0c,$04,$04 db $3e,$3e,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$3e,$3e db $18,$18,$3c,$3c,$66,$66,$42,$42,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$7c,$3e,$3e db $30,$30,$18,$18,$0c,$0c,$04,$04,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$38,$38,$0c,$0c,$3c,$3c,$4c,$4c,$3a,$3a,$00,$00 db $00,$00,$30,$30,$30,$30,$3c,$3c,$32,$32,$32,$32,$3c,$3c,$00,$00 db $00,$00,$00,$00,$1c,$1c,$30,$30,$30,$30,$30,$30,$1c,$1c,$00,$00 db $00,$00,$0c,$0c,$0c,$0c,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$00,$00 db $00,$00,$00,$00,$38,$38,$64,$64,$78,$78,$60,$60,$3c,$3c,$00,$00 db $00,$00,$0e,$0e,$18,$18,$3c,$3c,$18,$18,$18,$18,$18,$18,$00,$00 db $00,$00,$00,$00,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$38,$38 db $00,$00,$60,$60,$60,$60,$78,$78,$64,$64,$64,$64,$64,$64,$00,$00 db $00,$00,$10,$10,$00,$00,$38,$38,$18,$18,$18,$18,$3c,$3c,$00,$00 db $00,$00,$08,$08,$00,$00,$0c,$0c,$0c,$0c,$0c,$0c,$2c,$2c,$18,$18 db $00,$00,$60,$60,$68,$68,$68,$68,$70,$70,$68,$68,$64,$64,$00,$00 db $00,$00,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$18,$18,$00,$00 db $00,$00,$00,$00,$74,$74,$6a,$6a,$6a,$6a,$6a,$6a,$6a,$6a,$00,$00 db $00,$00,$00,$00,$78,$78,$64,$64,$64,$64,$64,$64,$64,$64,$00,$00 db $00,$00,$00,$00,$38,$38,$64,$64,$64,$64,$64,$64,$38,$38,$00,$00 db $00,$00,$00,$00,$78,$78,$64,$64,$64,$64,$78,$78,$60,$60,$60,$60 db $00,$00,$00,$00,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$0e,$0e db $00,$00,$00,$00,$1c,$1c,$30,$30,$30,$30,$30,$30,$30,$30,$00,$00 db $00,$00,$00,$00,$38,$38,$60,$60,$38,$38,$0c,$0c,$78,$78,$00,$00 db $00,$00,$30,$30,$78,$78,$30,$30,$30,$30,$30,$30,$1c,$1c,$00,$00 db $00,$00,$00,$00,$64,$64,$64,$64,$64,$64,$64,$64,$3c,$3c,$00,$00 db $00,$00,$00,$00,$64,$64,$64,$64,$64,$64,$28,$28,$10,$10,$00,$00 db $00,$00,$00,$00,$62,$62,$6a,$6a,$6a,$6a,$6a,$6a,$34,$34,$00,$00 db $00,$00,$00,$00,$64,$64,$38,$38,$18,$18,$2c,$2c,$46,$46,$00,$00 db $00,$00,$00,$00,$4c,$4c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$38,$38 db $00,$00,$00,$00,$7e,$7e,$0c,$0c,$18,$18,$30,$30,$7e,$7e,$00,$00 db $3c,$3c,$60,$60,$30,$30,$60,$60,$60,$60,$30,$30,$60,$60,$3c,$3c db $20,$20,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$10,$10 db $3c,$3c,$06,$06,$0c,$0c,$06,$06,$06,$06,$0c,$0c,$06,$06,$3c,$3c db $00,$00,$00,$00,$31,$31,$7b,$7b,$de,$de,$8c,$8c,$00,$00,$00,$00 db $c0,$c0,$a0,$a0,$b8,$b8,$b0,$b0,$da,$da,$12,$12,$1a,$1a,$03,$03 LetterTilesEnd: BigLetterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $ee,$ee,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44 db $7c,$7c,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$38,$38 db $38,$38,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $70,$70,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$fe,$fe db $fe,$fe,$42,$42,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 db $48,$48,$44,$44,$44,$44,$44,$44,$44,$44,$42,$42,$42,$42,$e3,$e3 db $fc,$fc,$42,$42,$42,$42,$42,$42,$42,$42,$7c,$7c,$48,$48,$48,$48 db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$3c,$3c db $3c,$3c,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42 db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$70,$70 db $7c,$7c,$22,$22,$22,$22,$22,$22,$22,$22,$3c,$3c,$20,$20,$20,$20 db $38,$38,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $10,$10,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28 db $ce,$ce,$44,$44,$64,$64,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54 db $54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$4c,$4c,$44,$44,$e6,$e6 db $fe,$fe,$92,$92,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $7e,$7e,$22,$22,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20 db $38,$38,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$70,$70 db $70,$70,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20 db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$22,$22,$7e,$7e db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$fc,$fc db $f8,$f8,$44,$44,$42,$42,$42,$42,$44,$44,$78,$78,$44,$44,$42,$42 db $ee,$ee,$44,$44,$44,$44,$44,$44,$44,$44,$7c,$7c,$44,$44,$44,$44 db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $7e,$7e,$22,$22,$20,$20,$20,$20,$20,$20,$38,$38,$20,$20,$20,$20 db $fe,$fe,$42,$42,$40,$40,$40,$40,$40,$40,$70,$70,$40,$40,$40,$40 db $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$fe,$fe db $3c,$3c,$42,$42,$42,$42,$42,$42,$40,$40,$40,$40,$40,$40,$40,$40 db $40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$42,$42,$42,$42,$3c,$3c db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$44,$44,$f8,$f8 db $f8,$f8,$44,$44,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42 db $80,$80,$80,$80,$8f,$8f,$8a,$8a,$82,$82,$82,$82,$44,$44,$38,$38 db $38,$38,$44,$44,$82,$82,$82,$82,$82,$82,$80,$80,$80,$80,$80,$80 db $04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$44,$44,$44,$44,$38,$38 db $0e,$0e,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04 db $ee,$ee,$44,$44,$44,$44,$48,$48,$50,$50,$60,$60,$50,$50,$48,$48 db $54,$54,$54,$54,$54,$54,$54,$54,$44,$44,$44,$44,$44,$44,$ee,$ee db $c6,$c6,$6c,$6c,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54 db $42,$42,$42,$42,$42,$42,$42,$42,$4a,$4a,$4c,$4c,$4c,$4c,$36,$36 db $3c,$3c,$42,$42,$42,$42,$40,$40,$40,$40,$3c,$3c,$02,$02,$02,$02 db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$42,$42,$42,$42,$3c,$3c db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$28,$28,$10,$10 db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$38,$38 db $44,$44,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$28,$28 db $10,$10,$10,$10,$28,$28,$28,$28,$28,$28,$44,$44,$44,$44,$ee,$ee db $ee,$ee,$44,$44,$44,$44,$28,$28,$28,$28,$28,$28,$10,$10,$10,$10 db $ee,$ee,$44,$44,$44,$44,$28,$28,$10,$10,$10,$10,$10,$10,$10,$10 db $fe,$fe,$82,$82,$04,$04,$04,$04,$08,$08,$08,$08,$08,$08,$10,$10 db $10,$10,$20,$20,$20,$20,$20,$20,$40,$40,$40,$40,$82,$82,$fe,$fe BigLetterTilesEnd: SECTION "Tilemap", ROM0 UITilemap: db $8b, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8a db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 db $8c, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $88 UITilemapEnd: