solitaire-c64/cardsprites.c65

899 lines
20 KiB
Text

#IFNDEF __lib_cardsprites
#DEFINE __lib_cardsprites 1
GOTO __skip_lib_cardsprites
// ============================================================================
// CARD RANK SPRITES (A-K)
// ============================================================================
// Sprites for displaying card ranks in multiplexed border display
// Each sprite is 64 bytes (21 rows of 3 bytes + 1 padding byte)
// ============================================================================
// Sprite 0: Ace
LABEL sprite_rank_ace
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $10, $00
!8 $00, $10, $00
!8 $00, $38, $00
!8 $00, $38, $00
!8 $00, $6c, $00
!8 $00, $6c, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $01, $ff, $00
!8 $01, $83, $00
!8 $03, $c7, $80
!8 $03, $c7, $80
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 1: 2
LABEL sprite_rank_2
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $06, $00
!8 $00, $0e, $00
!8 $00, $1c, $00
!8 $00, $38, $00
!8 $00, $70, $00
!8 $00, $e6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $fe, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 2: 3
LABEL sprite_rank_3
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $fe, $00
!8 $00, $fe, $00
!8 $00, $cc, $00
!8 $00, $18, $00
!8 $00, $30, $00
!8 $00, $7c, $00
!8 $00, $7e, $00
!8 $00, $06, $00
!8 $00, $06, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 3: 4
LABEL sprite_rank_4
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $0c, $00
!8 $00, $1c, $00
!8 $00, $3c, $00
!8 $00, $7c, $00
!8 $00, $ec, $00
!8 $01, $cc, $00
!8 $01, $ff, $00
!8 $01, $ff, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $1e, $00
!8 $00, $1e, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 4: 5
LABEL sprite_rank_5
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $fe, $00
!8 $00, $fe, $00
!8 $00, $c0, $00
!8 $00, $c0, $00
!8 $00, $fc, $00
!8 $00, $fe, $00
!8 $00, $06, $00
!8 $00, $06, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 5: 6
LABEL sprite_rank_6
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $3c, $00
!8 $00, $7c, $00
!8 $00, $e0, $00
!8 $00, $c0, $00
!8 $00, $fc, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 6: 7
LABEL sprite_rank_7
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $fe, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $18, $00
!8 $00, $18, $00
!8 $00, $18, $00
!8 $00, $30, $00
!8 $00, $30, $00
!8 $00, $30, $00
!8 $00, $30, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 7: 8
LABEL sprite_rank_8
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 8: 9
LABEL sprite_rank_9
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7e, $00
!8 $00, $06, $00
!8 $00, $0e, $00
!8 $00, $7c, $00
!8 $00, $78, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 9: 10
LABEL sprite_rank_10
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $01, $9e, $00
!8 $01, $bf, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $b3, $00
!8 $01, $bf, $00
!8 $01, $9e, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 10: Jack
LABEL sprite_rank_jack
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $1e, $00
!8 $00, $1e, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $0c, $00
!8 $00, $cc, $00
!8 $00, $cc, $00
!8 $00, $fc, $00
!8 $00, $78, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 11: Queen
LABEL sprite_rank_queen
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $c6, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $0e, $00
!8 $00, $06, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 12: King
LABEL sprite_rank_king
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $01, $ef, $00
!8 $01, $ef, $00
!8 $00, $cc, $00
!8 $00, $d8, $00
!8 $00, $f0, $00
!8 $00, $e0, $00
!8 $00, $f0, $00
!8 $00, $d8, $00
!8 $00, $cc, $00
!8 $00, $c6, $00
!8 $01, $ef, $00
!8 $01, $ef, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// ============================================================================
// CREDITS SPRITES
// ============================================================================
// Two sprites that go together horizontally to display credits
// ============================================================================
// Sprite 13: Credits (left part)
LABEL sprite_credits_left
ASM
!8 $ae, $ea, $ee
!8 $aa, $8a, $2a
!8 $ee, $8c, $4a
!8 $aa, $8a, $8a
!8 $aa, $ea, $ee
!8 $00, $00, $00
!8 $0e, $4c, $ee
!8 $08, $4a, $8a
!8 $0e, $4a, $ce
!8 $02, $4a, $8c
!8 $0e, $4c, $ea
!8 $00, $00, $00
!8 $00, $ee, $ee
!8 $00, $2a, $28
!8 $00, $ea, $ee
!8 $00, $8a, $8a
!8 $00, $ee, $ee
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// Sprite 14: Credits (right part)
LABEL sprite_credits_right
ASM
!8 $4c, $00, $00
!8 $4a, $00, $00
!8 $4a, $00, $00
!8 $4a, $00, $00
!8 $4c, $00, $00
!8 $00, $00, $00
!8 $e0, $00, $00
!8 $80, $00, $00
!8 $e0, $00, $00
!8 $20, $00, $00
!8 $e0, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $fe
ENDASM
// ============================================================================
// SUIT COLOR SPRITES (Overlay pairs for multi-color display)
// ============================================================================
// Each suit uses 2 sprites overlaid to allow for two screen colors
// Hearts (sprites 15-16), Diamonds (17-18), Clubs (19-20), Spades (21-22)
// ============================================================================
// Sprite 15: Hearts (layer 1)
LABEL sprite_suit_hearts_1
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $01, $c7, $00
!8 $03, $ef, $80
!8 $07, $ff, $c0
!8 $07, $ff, $c0
!8 $07, $ff, $c0
!8 $03, $ff, $80
!8 $01, $ff, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $38, $00
!8 $00, $10, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $12
ENDASM
// Sprite 16: Hearts (layer 2)
LABEL sprite_suit_hearts_2
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $41, $00
!8 $00, $20, $80
!8 $00, $00, $80
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $0a
ENDASM
// Sprite 17: Diamonds (layer 1)
LABEL sprite_suit_diamonds_1
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $10, $00
!8 $00, $38, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $01, $ff, $00
!8 $03, $ff, $80
!8 $03, $ff, $80
!8 $01, $ff, $00
!8 $00, $fe, $00
!8 $00, $7c, $00
!8 $00, $38, $00
!8 $00, $10, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $12
ENDASM
// Sprite 18: Diamonds (layer 2)
LABEL sprite_suit_diamonds_2
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $08, $00
!8 $00, $04, $00
!8 $00, $02, $00
!8 $00, $01, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $0a
ENDASM
// Sprite 19: Clubs (layer 1)
LABEL sprite_suit_clubs_1
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $38, $00
!8 $00, $7c, $00
!8 $00, $7c, $00
!8 $00, $7c, $00
!8 $03, $bb, $80
!8 $07, $d7, $c0
!8 $07, $ff, $c0
!8 $07, $d7, $c0
!8 $03, $93, $80
!8 $00, $10, $00
!8 $00, $38, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $10
ENDASM
// Sprite 20: Clubs (layer 2)
LABEL sprite_suit_clubs_2
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $38, $00
!8 $00, $0c, $00
!8 $00, $04, $00
!8 $00, $04, $00
!8 $01, $83, $80
!8 $00, $c0, $c0
!8 $00, $00, $40
!8 $00, $00, $40
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $08, $00
!8 $00, $04, $00
;!8 $08, $00, $00
;!8 $04, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $0b
ENDASM
// Sprite 21: Spades (layer 1)
LABEL sprite_suit_spades_1
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $10, $00
!8 $00, $38, $00
!8 $00, $7c, $00
!8 $00, $fe, $00
!8 $01, $ff, $00
!8 $03, $ff, $80
!8 $03, $ff, $80
!8 $03, $ff, $80
!8 $01, $d7, $00
!8 $00, $10, $00
!8 $00, $38, $00
!8 $00, $7c, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $10
ENDASM
// Sprite 22: Spades (layer 2)
LABEL sprite_suit_spades_2
ASM
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $10, $00
!8 $00, $18, $00
!8 $00, $0c, $00
!8 $00, $06, $00
!8 $00, $03, $00
!8 $00, $01, $80
!8 $00, $00, $80
!8 $00, $00, $80
!8 $00, $00, $00
!8 $00, $00, $00
;!8 $08, $00, $00
!8 $00, $08, $00
;!8 $04, $00, $00
!8 $00, $04, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $0b
ENDASM
// ============================================================================
// TEXT SPRITES - "SELECTED CARD"
// ============================================================================
// Two sprites that display "SELECTED CARD" text
// ============================================================================
// Sprite 23: "SELECTED CARD" (left part)
LABEL sprite_text_selected_card_1
ASM
!8 $77, $47, $77
!8 $44, $44, $42
!8 $76, $46, $42
!8 $14, $44, $42
!8 $77, $77, $72
!8 $00, $00, $00
!8 $00, $00, $00
!8 $77, $76, $00
!8 $45, $55, $00
!8 $47, $75, $00
!8 $45, $65, $00
!8 $75, $56, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00
ENDASM
// Sprite 24: "SELECTED CARD" (right part)
LABEL sprite_text_selected_card_2
ASM
!8 $76, $00, $00
!8 $45, $00, $00
!8 $65, $00, $00
!8 $45, $00, $00
!8 $76, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00, $00, $00
!8 $00
ENDASM
// ============================================================================
// CARD DISPLAY SPRITE MANAGEMENT
// ============================================================================
// Functions to display selected card using sprites in upper right corner
// Uses sprites 1-5 (sprite 0 is reserved for pointer)
// ============================================================================
// VIC-II Sprite registers for card display (sprites 1-5)
// Note: sprite_x_msb and sprite_enable already declared in pointer.c65
BYTE sprite_x1 @ $d002 // Sprite 1 X
BYTE sprite_y1 @ $d003 // Sprite 1 Y
BYTE sprite_x2 @ $d004 // Sprite 2 X
BYTE sprite_y2 @ $d005 // Sprite 2 Y
BYTE sprite_x3 @ $d006 // Sprite 3 X
BYTE sprite_y3 @ $d007 // Sprite 3 Y
BYTE sprite_x4 @ $d008 // Sprite 4 X
BYTE sprite_y4 @ $d009 // Sprite 4 Y
BYTE sprite_x5 @ $d00a // Sprite 5 X
BYTE sprite_y5 @ $d00b // Sprite 5 Y
BYTE sprite_color1 @ $d028 // Sprite 1 color
BYTE sprite_color2 @ $d029 // Sprite 2 color
BYTE sprite_color3 @ $d02a // Sprite 3 color
BYTE sprite_color4 @ $d02b // Sprite 4 color
BYTE sprite_color5 @ $d02c // Sprite 5 color
BYTE sprite_pointer1 @ $07f9 // Sprite 1 pointer
BYTE sprite_pointer2 @ $07fa // Sprite 2 pointer
BYTE sprite_pointer3 @ $07fb // Sprite 3 pointer
BYTE sprite_pointer4 @ $07fc // Sprite 4 pointer
BYTE sprite_pointer5 @ $07fd // Sprite 5 pointer
// Card display sprite positions (upper right corner)
// Screen starts at (24,50), size 320x200
// Sprites are 24 pixels wide
WORD CONST CARD_TEXT_X1 = 312 // "SELECTED CARD" left part
WORD CONST CARD_TEXT_X2 = CARD_TEXT_X1+24 // "SELECTED CARD" right part
BYTE CONST CARD_TEXT_Y = 50 // Top of screen
WORD CONST CARD_RANK_X = 312 // Rank sprite X
WORD CONST CARD_SUIT_X = CARD_RANK_X+14 // Suit sprites X (both layers) - side by side with rank
BYTE CONST CARD_RANK_Y = 64 // Below text (50 + 21 pixel sprite height)
// Sprite data block numbers (offset from base at $2240 / 64 = 137)
BYTE CONST SPRITE_BLOCK_TEXT_LEFT = 160 // sprite_text_selected_card_1 (sprite 23)
BYTE CONST SPRITE_BLOCK_TEXT_RIGHT = 161 // sprite_text_selected_card_2 (sprite 24)
// Rank blocks: 137-149 (ace=137, 2=138, ... king=149)
// Suit blocks: hearts1=152, hearts2=153, diamonds1=154, diamonds2=155,
// clubs1=156, clubs2=157, spades1=158, spades2=159
// ============================================================================
// FUNC card_display_init
// Initialize card display sprites (position and "SELECTED CARD" text)
// Call this once during game initialization
// ============================================================================
FUNC card_display_init
BYTE temp
// Set "SELECTED CARD" text sprites (sprites 1 & 2)
sprite_pointer1 = SPRITE_BLOCK_TEXT_LEFT
sprite_pointer2 = SPRITE_BLOCK_TEXT_RIGHT
// Position text sprites
sprite_x1 = CARD_TEXT_X1
sprite_y1 = CARD_TEXT_Y
sprite_x2 = CARD_TEXT_X2
sprite_y2 = CARD_TEXT_Y
// Set X MSB for sprites > 255
temp = sprite_x_msb
IF CARD_TEXT_X1 > 255
temp = temp | %00000010 // Sprite 1 X MSB
ENDIF
IF CARD_TEXT_X2 > 255
temp = temp | %00000100 // Sprite 2 X MSB
ENDIF
sprite_x_msb = temp
// Set text sprite colors (black)
sprite_color1 = color_black
sprite_color2 = color_black
// Initially hide all card display sprites (1-5)
temp = sprite_enable
temp = temp & %11000001 // Keep sprite 0 (pointer), clear 1-5
sprite_enable = temp
FEND
// ============================================================================
// FUNC card_display_show
// Show selected card using sprites
// Parameters:
// card_rank: Card rank (0-12: A,2-10,J,Q,K)
// card_suit: Card suit (0-3: hearts, diamonds, clubs, spades)
// ============================================================================
FUNC card_display_show({BYTE card_rank} {BYTE card_suit})
BYTE rank_block
BYTE suit_block1
BYTE suit_block2
BYTE suit_color
BYTE rank_color
BYTE suit_color2
// Calculate sprite block for rank (137 = ace, 138 = 2, etc.)
rank_block = 137
rank_block = rank_block + card_rank
// Calculate sprite blocks for suit (2 layers each)
// Sprite order: Hearts: 152-153, Diamonds: 154-155, Clubs: 156-157, Spades: 158-159
// Card suit order: 0=Hearts, 1=Diamonds, 2=Spades, 3=Clubs
// Need to swap spades(2) and clubs(3)
BYTE suit_index
IF card_suit == 2
suit_index = 3 // Spades (card suit 2) -> sprite index 3
ELSE
IF card_suit == 3
suit_index = 2 // Clubs (card suit 3) -> sprite index 2
ELSE
suit_index = card_suit // Hearts and Diamonds map directly
ENDIF
ENDIF
ASM
lda |suit_index|
asl // Multiply by 2 (shift left)
clc
adc #152
sta |suit_block1|
ENDASM
suit_block2 = suit_block1 + 1
//suit_block2 = suit_block2 + 1
// Determine suit colors
// Rank and suit layer 1: red for hearts/diamonds, black for clubs/spades
// Suit layer 2: pink for red suits, dark grey for black suits
IF card_suit < 2
rank_color = color_red
suit_color = color_red
suit_color2 = color_pink
ELSE
rank_color = color_black
suit_color = color_black
suit_color2 = color_dark_grey
ENDIF
// Set sprite 3: Rank
sprite_pointer3 = rank_block
sprite_x3 = CARD_RANK_X
sprite_y3 = CARD_RANK_Y
sprite_color3 = rank_color
// Set sprites 4 & 5: Suit (2 layers at same position)
// Sprite 4 has higher priority (drawn on top), so it gets the overlay layer
// Sprite 5 has lower priority (drawn behind), so it gets the base layer
sprite_pointer4 = suit_block2 // Overlay layer (drawn on top)
sprite_pointer5 = suit_block1 // Base layer (drawn behind)
sprite_x4 = CARD_SUIT_X
sprite_y4 = CARD_RANK_Y // Same Y as rank
sprite_x5 = CARD_SUIT_X // Exactly same X/Y as sprite 4
sprite_y5 = CARD_RANK_Y
sprite_color4 = suit_color2 // Overlay color (pink/dark grey)
sprite_color5 = suit_color // Base color (red/black)
// Set X MSB for rank and suit sprites
IF CARD_RANK_X > 255
sprite_x_msb = sprite_x_msb | %00111110
ENDIF
// Enable all card display sprites (1-5)
sprite_enable = sprite_enable | %00111110
FEND
// ============================================================================
// FUNC card_display_hide
// Hide all card display sprites (when no card selected)
// ============================================================================
FUNC card_display_hide
BYTE temp
// Disable sprites 1-5, keep sprite 0 (pointer)
temp = sprite_enable
temp = temp & %11000001
sprite_enable = temp
FEND
LABEL __skip_lib_cardsprites
#IFEND