; screen variables shared with screencardread PUSHS UNION "Screen Variables", WRAM0[SCREEN_VARS_START] ds 32 ; why are we putting this so far in? i don't remember but whatever vPrintJobState: db ; start, wait til ready, top row, row a, wait, printing, bottom row vPrintingRow: db vExposureSetting: db POPS ScreenCardBrowse: dw CardBrowseSetup dw CardBrowseUpdate dw CardBrowseDraw dw CardBrowseTeardown CardBrowseSetup: ld a, 1 ld [vBlocked], a ld [vTooBusyForPrinter], a ; make sure working oam is clear ld hl, ZEROES ld de, MY_OAM ld bc, $100 call CopyRange ld hl, .asyncTask call Async_Spawn_HL call CheckForPrinter ret .asyncTask: ld hl, CardBrowse.UITilemap ; origin ld de, _SCRN0 ; destination ld b, 18 ; height ld c, 20 ; width call CopyTilesToMap ld hl, CardBrowse.PrinterTiles ld de, _VRAM + $1000 - $10*16 ld bc, CardBrowse.PrinterTilesEnd - CardBrowse.PrinterTiles call CopyRange ld a, 0 ld [vBlocked], a call RefreshCardTask ret CardBrowseUpdate: ld a, [vPrinterStart] cp a, 0 call z, CardUpdate call ScrollBackgroundTile ld a, [vTooBusyForPrinter] cp a, 0 jp nz, .donePrinter .checkForPrinter ld a, [vPrinterStart] cp a, 0 call z, CheckForPrinter .updatePrintUI ld a, [vPrinterStart] cp a, 0 call z, CardBrowse.UpdatePrintUI .runPrintJob ld a, [vPrinterStart] cp a, 0 call nz, RunPrintJob .printButton ld hl, rMYBTNP bit 6, [hl] ; check select? jp z, .donePrinter ld a, [vPrinterState] cp a, PS_READY jp nz, .donePrinter call KickOffPrintJob ret .donePrinter ld hl, rMYBTNP bit 5, [hl] jp z, .doneWithB ld hl, ScreenMainMenu call ChangeScene ret .doneWithB ld hl, rMYBTNP bit 4, [hl] jp z, .doneWithA ld a, [vSelectedCardIndex] ld b, 0 ld c, a ld hl, DECK_FLIPS+1 add hl, bc ld a, [hl] xor a, %10000000 ld [hl], a jr .attemptCardChange .doneWithA ld a, [vSelectedCardIndex] ld hl, rMYBTNP bit 0, [hl] jp z, :+ ; skip the following code if left is not pressed inc a : bit 1, [hl] jp z, :+ ; skip the following code if right is not pressed dec a : ld [vSelectedCardIndex], a ld hl, Cards call ArrayClampLooping ld [vSelectedCardIndex], a ld hl, rMYBTNP bit 2, [hl] ; up jp z, :+ ld hl, AdjacentCards.Ups+1 ld b, 0 ld c, a add hl, bc ld a, [hl] : ld hl, rMYBTNP bit 3, [hl] ; up jp z, :+ ld hl, AdjacentCards.Downs+1 ld b, 0 ld c, a add hl, bc ld a, [hl] : ld [vSelectedCardIndex], a ld hl, Cards call ArrayClampLooping ld [vSelectedCardIndex], a .doneWithButtons ld a, [vSelectedCardIndex] ld hl, vPreviousCardIndex cp a, [hl] ret z ; if the selected card didn't change, nothing to do .attemptCardChange ld a, [vBlocked] cp a, 0 ret nz ld a, 1 ld [vTooBusyForPrinter], a ld hl, RefreshCardTask call Async_Spawn_HL ; make sure working oam is clear ld hl, ZEROES ld de, MY_OAM ld bc, $100 call CopyRange ret CardBrowseDraw: ld a, [vCurrentBackgroundTile] ld l, a ld a, [vCurrentBackgroundTile+1] ld h, a ld de, _VRAM + $1000 + 1*16 call CopyOneTileData call CardDraw ld de, SAFE_DMA_LOCATION ld a, HIGH(MY_OAM) call RunDMA ret RefreshCardTask: ld a, [vSelectedCardIndex] ld [vPreviousCardIndex], a call DrawDeckMinimap call LoadCardData call CardBrowse.UpdatePrintUIImmediate ld a, 0 ld [vTooBusyForPrinter], a ret DrawDeckMinimap: ld hl, Cards ld c, [hl] ; count of cards srl c ;set 0, c ld hl, vSelectedCardIndex ld d, [hl] ; selected card! ld b, $ff ; start at -1 lol ld hl, _SCRN0 + 32 + 10 ; for this loop, c holds the total tile count ; d holds the card which is currently selected ; b holds the index of the TILE (two cards) we're currently drawing ; hl points to the place we're drawing .loop inc hl inc b ld a, b cp a, 5 ; after we've drawn 5 tiles (10 cards), draw a newline jp nz, :+ ld [hl], $13 ld hl, _SCRN0 + 32*2 + 11 : cp a, 11 ; after we've drawn 11 tiles (5 + 6) draw a newline jp nz, :+ ld [hl], $13 ld hl, _SCRN0 + 32*3 + 11 : ; add more conditions here to define newlines! .noNewLine ld a, b cp a, c jp nc, .doneDrawing ; if b - c doesn't underflow, then we're done; jump to the end ld a, d srl a ; divide current index by two cp a, b ; check if the currently selected card is in current tile jp z, .drawSelectedCard .drawUnselectedCards ; if it's not, then draw unselected cards ld [hl], $12 jp .loop .drawSelectedCard ; if it's in this tile, draw it bit 0, d jp nz, .drawSelectedSecond ; if the 1 bit of the current selection is zero, draw the left-selected-tile ld [hl], $14 jp .loop .drawSelectedSecond ; if the 1 bit is nonzero draw the right-selected-tile ld [hl], $15 jp .loop .doneDrawing ld [hl], $13 ; when we're done, draw a cap ret CardBrowse.UpdatePrintUI: ld a, [vPrinterState] ld hl, vPreviousPrinterState cp a, [hl] ret z ; if the printer state has not changed, return. ; otherwise updae previous printer state and continue to change ui ld [hl], a ld hl, CardBrowse.UpdatePrintUIImmediate call Async_Spawn_HL ret CardBrowse.UpdatePrintUIImmediate: ld a, [vPrinterState] ld hl, CardBrowse.PrinterNotDetected cp a, PS_NONE jp z, .setIt ld hl, CardBrowse.PrinterAvailable cp a, PS_READY jp z, .setIt ld hl, CardBrowse.PrinterFull cp a, PS_FULL jp z, .setIt ld hl, CardBrowse.PrinterPrinting cp a, PS_PRINTING jp z, .setIt ld hl, CardBrowse.PrinterError cp a, PS_ERROR jp z, .setIt .setIt ld de, _SCRN0 + 32*1 + 17 ld b, 2 ld c, 2 call CopyTilesToMap ret CardBrowse.PrinterNotDetected: db $00, $00 db $13, $00 CardBrowse.PrinterAvailable: db $f1, $f2 db $f3, $f4 CardBrowse.PrinterFull: db $f1, $f2 db $f9, $fa CardBrowse.PrinterPrinting: db $f1, $f2 db $f7, $f8 CardBrowse.PrinterError: db $f1, $f2 db $f5, $f6 CardBrowseTeardown: ret CardBrowse.PrinterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$1c,$00,$0e,$38,$3f,$64,$7f,$7f,$7f,$7f,$40,$7f,$40,$3f,$3f db $00,$00,$00,$00,$00,$00,$06,$b6,$ff,$ff,$ff,$11,$ff,$11,$fe,$fe db $00,$00,$00,$80,$0e,$8e,$12,$9e,$24,$bc,$38,$b8,$00,$80,$00,$00 db $00,$00,$00,$00,$5a,$5a,$92,$92,$5a,$5a,$52,$52,$9b,$9b,$00,$00 db $00,$00,$18,$98,$18,$98,$18,$98,$18,$98,$00,$80,$18,$98,$00,$00 db $00,$00,$00,$00,$d8,$d8,$94,$94,$d8,$d8,$94,$94,$d2,$d2,$00,$00 db $00,$00,$00,$80,$19,$99,$15,$95,$19,$99,$11,$91,$11,$91,$00,$00 db $00,$00,$00,$00,$92,$92,$5a,$5a,$96,$96,$52,$52,$52,$52,$00,$00 db $00,$00,$00,$80,$1d,$9d,$11,$91,$19,$99,$11,$91,$11,$91,$00,$00 db $00,$00,$00,$00,$52,$52,$52,$52,$52,$52,$52,$52,$db,$db,$00,$00 CardBrowse.PrinterTilesEnd: ; $22 CardBrowse.UITilemap: db $0e, $0a, $0a, $0a, $0a, $0a, $0a, $0a, $0a, $0f, $09, $02, $02, $02, $02, $02, $02, $02, $02, $08 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $03, $00, $00, $00, $00, $00, $00, $00, $00, $04 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $03, $00, $00, $00, $00, $00, $00, $00, $00, $04 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $03, $00, $00, $00, $00, $00, $00, $00, $00, $04 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $06, $05, $05, $05, $05, $05, $05, $05, $05, $07 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 db $11, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 CardBrowse.UITilemapEnd: