937 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			937 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
_runtimePath_ "../../at67/gbas/runtime"
 | 
						|
_runtimeStart_ &h7FFF
 | 
						|
_spriteStripeChunks_ 15, &h7000, descending
 | 
						|
_codeRomType_ ROMv3
 | 
						|
cls : mode 2
 | 
						|
 | 
						|
'audio fix for ROMv5a
 | 
						|
poke &h21, peek(&h21) OR 3
 | 
						|
sound off
 | 
						|
cls
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Card Suits
 | 
						|
' ------------------
 | 
						|
const CLUBS = 0
 | 
						|
const DIAMONDS = 1
 | 
						|
const HEARTS = 2
 | 
						|
const SPADES = 3
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Card States
 | 
						|
' ------------------
 | 
						|
const INDECK = 0
 | 
						|
const DRAWN = 1
 | 
						|
const HELD = 2
 | 
						|
const DISCARDED = 3
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Face Cards
 | 
						|
' ------------------
 | 
						|
const JACK = 11
 | 
						|
const QUEEN = 12
 | 
						|
const KING = 13
 | 
						|
const ACE = 14
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Rounds
 | 
						|
' ------------------
 | 
						|
const GAMEOVER = 0
 | 
						|
const DEAL = 1
 | 
						|
const DRAW = 2
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Winning Hands
 | 
						|
' ------------------
 | 
						|
const NONE = 0
 | 
						|
const JACKSORBETTER = 1
 | 
						|
const TWOPAIR = 2
 | 
						|
const THREEOFAKIND = 3
 | 
						|
const STRAIGHT = 4
 | 
						|
const FLUSH = 5
 | 
						|
const FULLHOUSE = 6
 | 
						|
const FOUROFAKIND = 7
 | 
						|
const STRAIGHTFLUSH = 9
 | 
						|
const ROYALFLUSH = 10
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Coordinates
 | 
						|
' ------------------
 | 
						|
const cardY = 61
 | 
						|
const cardY2 = cardY + 45
 | 
						|
const holdY = cardY - 10
 | 
						|
const cardBorderY = cardY - 1
 | 
						|
const cardBorderY2 = cardBorderY + 47
 | 
						|
const cardValueY = cardY + 2
 | 
						|
const cardSuitY = cardY + 17
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Sprites
 | 
						|
' ------------------
 | 
						|
load sprite, ./graphics/club.tga, CLUBS
 | 
						|
load sprite, ./graphics/diamond.tga, DIAMONDS
 | 
						|
load sprite, ./graphics/heart.tga, HEARTS
 | 
						|
load sprite, ./graphics/spade.tga, SPADES
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Card Deck
 | 
						|
' ------------------
 | 
						|
dim cardValue%(52)
 | 
						|
dim cardSuit%(52)
 | 
						|
dim cardState%(52)
 | 
						|
dim hand%(5)
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Other Vars
 | 
						|
' ------------------
 | 
						|
balance = 25
 | 
						|
betAmount = 1
 | 
						|
winAmount = 0
 | 
						|
currentRound = DRAW
 | 
						|
selectedCard = 0
 | 
						|
pickedCard = 0
 | 
						|
tempCard = 0
 | 
						|
tempValue1 = 0
 | 
						|
tempValue2 = 0
 | 
						|
tempValue3 = 0
 | 
						|
straightFlag = 0
 | 
						|
flushFlag = 0
 | 
						|
winType = NONE
 | 
						|
holdX = 0
 | 
						|
inputDevice = 255
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Game Setup
 | 
						|
' ------------------
 | 
						|
gosub initCards
 | 
						|
set BG_COLOUR, 16
 | 
						|
set FG_COLOUR, 16
 | 
						|
rectf 3, 0, 156, 47
 | 
						|
set FG_COLOUR, 63
 | 
						|
rect 3, 0, 156, 47
 | 
						|
gosub displayPayouts
 | 
						|
gosub displayCardBacks
 | 
						|
gosub displayBalance
 | 
						|
gosub displayBet
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Main Loop
 | 
						|
' ------------------
 | 
						|
loop:
 | 
						|
    if currentRound &= GAMEOVER
 | 
						|
        gosub gameOverInput
 | 
						|
    else    
 | 
						|
        gosub handleInput
 | 
						|
    endif
 | 
						|
    goto &loop
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Input
 | 
						|
' ------------------
 | 
						|
handleInput:
 | 
						|
    inputDevice = get("BUTTON_STATE")
 | 
						|
 | 
						|
    if (inputDevice = 254) AND (currentRound = DEAL)
 | 
						|
        selectedCard = selectedCard + 1
 | 
						|
        if selectedCard &= 5
 | 
						|
            selectedCard = 0
 | 
						|
        endif
 | 
						|
        gosub selectCard
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
 | 
						|
    if (inputDevice = 253) AND (currentRound = DEAL)
 | 
						|
        selectedCard = selectedCard - 1
 | 
						|
        if selectedCard &= -1
 | 
						|
            selectedCard = 4
 | 
						|
        endif
 | 
						|
        gosub selectCard
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
 | 
						|
    if (inputDevice = 247) AND (currentRound = DRAW)
 | 
						|
        betAmount = betAmount + 1
 | 
						|
        if betAmount &> 5
 | 
						|
            betAmount = 1
 | 
						|
        endif
 | 
						|
        gosub displayBet
 | 
						|
        gosub playSndBet
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
 | 
						|
    if (inputDevice = 251) AND (currentRound = DRAW)
 | 
						|
        betAmount = betAmount - 1
 | 
						|
        if betAmount &< 1
 | 
						|
            betAmount = 5
 | 
						|
        endif
 | 
						|
        gosub displayBet
 | 
						|
        gosub playSndBet
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
 | 
						|
    if inputDevice &= 191
 | 
						|
        if currentRound &= DEAL
 | 
						|
            currentRound = DRAW
 | 
						|
            selectedCard = -1
 | 
						|
            gosub selectCard
 | 
						|
            gosub drawCards
 | 
						|
            gosub displayCards
 | 
						|
            gosub checkHand
 | 
						|
            gosub updateBalance
 | 
						|
            gosub displayPayouts
 | 
						|
        else
 | 
						|
            currentRound = DEAL
 | 
						|
            winType = NONE
 | 
						|
            gosub clearHand
 | 
						|
            gosub displayCardBacks
 | 
						|
            if betAmount &> balance
 | 
						|
                betAmount = balance
 | 
						|
                gosub displayBet
 | 
						|
            endif
 | 
						|
            balance = balance - betAmount
 | 
						|
            if balance &< 0
 | 
						|
                balance = 0
 | 
						|
            endif
 | 
						|
            gosub displayBalance
 | 
						|
            gosub displayPayouts
 | 
						|
            gosub dealCards
 | 
						|
            gosub displayCards
 | 
						|
            gosub selectCard
 | 
						|
        endif
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
 | 
						|
    if (inputDevice = 127) AND (currentRound = DEAL)
 | 
						|
        gosub holdCard
 | 
						|
        wait 10
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Game Over
 | 
						|
' ------------------
 | 
						|
gameOverInput:
 | 
						|
    inputDevice = get("BUTTON_STATE")
 | 
						|
 | 
						|
    if inputDevice &= 127
 | 
						|
        balance = 25
 | 
						|
        gosub clearHand
 | 
						|
        gosub displayCardBacks
 | 
						|
        gosub displayBalance
 | 
						|
        currentRound = DRAW
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
displayGameOver:
 | 
						|
    set FG_COLOUR, 63
 | 
						|
    set BG_COLOUR, 3
 | 
						|
    at 20,holdY : print "Game Over. Press (A)"
 | 
						|
    gosub playSndUnHold
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Sound FX
 | 
						|
' ------------------
 | 
						|
playSndCardFlip:
 | 
						|
    note = 0 : notes = note
 | 
						|
    index = 40
 | 
						|
    set SOUND_TIMER, 2
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 2
 | 
						|
    index = 45
 | 
						|
    set SOUND_TIMER, 2
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
return
 | 
						|
 | 
						|
playSndHold:
 | 
						|
    note = 0 : notes = note
 | 
						|
    index = 40
 | 
						|
    set SOUND_TIMER, 4
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 4
 | 
						|
    index = 45
 | 
						|
    set SOUND_TIMER, 4
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
return
 | 
						|
 | 
						|
playSndUnHold:
 | 
						|
    note = 0 : notes = note
 | 
						|
    index = 45
 | 
						|
    set SOUND_TIMER, 4
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 4
 | 
						|
    index = 40
 | 
						|
    set SOUND_TIMER, 4
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
return
 | 
						|
 | 
						|
playSndBet:
 | 
						|
    note = 0 : notes = note
 | 
						|
    index = betAmount + 60
 | 
						|
    set SOUND_TIMER, 5
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
return
 | 
						|
 | 
						|
playSndWin:
 | 
						|
    WAIT 10
 | 
						|
    note = 0 : notes = note
 | 
						|
    index = 60
 | 
						|
    set SOUND_TIMER, 4
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 8
 | 
						|
    set SOUND_TIMER, 2
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 4
 | 
						|
    index = 65
 | 
						|
    set SOUND_TIMER, 20
 | 
						|
    gosub getRomNote
 | 
						|
    sound on, 1, note
 | 
						|
    WAIT 20
 | 
						|
return
 | 
						|
 | 
						|
getRomNote:
 | 
						|
    asm
 | 
						|
        LDWI    0x0900
 | 
						|
        ADDW    _index
 | 
						|
        ADDW    _index
 | 
						|
        STW     _notes
 | 
						|
        LUP     0
 | 
						|
        ST      _note
 | 
						|
        LDW     _notes
 | 
						|
        LUP     1
 | 
						|
        ST      _note + 1
 | 
						|
    endasm
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Init Cards
 | 
						|
' ------------------
 | 
						|
initCards:
 | 
						|
    suit = 0
 | 
						|
 | 
						|
    for i = 0 to 51
 | 
						|
        cardSuit(i) = suit
 | 
						|
        cardValue(i) = 2+(i%13)
 | 
						|
        cardState(i) = INDECK
 | 
						|
 | 
						|
        if(2+(i%13) &= 14)
 | 
						|
            suit = suit + 1
 | 
						|
        endif
 | 
						|
    next i
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Clear Hand
 | 
						|
' ------------------
 | 
						|
clearHand:
 | 
						|
    for i = 0 to 51
 | 
						|
        cardState(i) = INDECK
 | 
						|
    next i
 | 
						|
 | 
						|
    set FG_COLOUR, 32
 | 
						|
    set BG_COLOUR, 32
 | 
						|
    selectedCard = 0
 | 
						|
    at 7,holdY : print "                         "
 | 
						|
    at 0,110 : print "         "
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Deal Cards
 | 
						|
' ------------------
 | 
						|
dealCards:
 | 
						|
    for i = 0 to 4
 | 
						|
retry1: pickedCard = rnd(52)
 | 
						|
        if(cardState(pickedCard) &= INDECK)
 | 
						|
            hand(i) = pickedCard
 | 
						|
            cardState(pickedCard) = DRAWN
 | 
						|
        else
 | 
						|
            goto retry1
 | 
						|
        endif
 | 
						|
    next i
 | 
						|
 | 
						|
    selectedCard = 0
 | 
						|
return
 | 
						|
 | 
						|
' For testing win conditions only:
 | 
						|
cheatDeal:
 | 
						|
    hand(0) = 12
 | 
						|
    cardState(12) = DRAWN
 | 
						|
 | 
						|
    hand(1) = 11
 | 
						|
    cardState(11) = DRAWN
 | 
						|
 | 
						|
    hand(2) = 10
 | 
						|
    cardState(10) = DRAWN
 | 
						|
 | 
						|
    hand(3) = 8
 | 
						|
    cardState(8) = DRAWN
 | 
						|
 | 
						|
    hand(4) = 9
 | 
						|
    cardState(9) = DRAWN
 | 
						|
 | 
						|
    selectedCard = 0
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Draw Cards
 | 
						|
' ------------------
 | 
						|
drawCards:
 | 
						|
    for i = 0 to 4
 | 
						|
        tempCard = hand(i)
 | 
						|
        if(cardState(tempCard) &= DRAWN)
 | 
						|
retry2:     pickedCard = rnd(52)
 | 
						|
            if(cardState(pickedCard) &= INDECK)
 | 
						|
                cardState(tempCard) = DISCARDED
 | 
						|
                hand(i) = pickedCard
 | 
						|
                cardState(pickedCard) = DRAWN
 | 
						|
            else
 | 
						|
                goto retry2
 | 
						|
            endif
 | 
						|
        endif
 | 
						|
    next i
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Select Card
 | 
						|
' ------------------
 | 
						|
selectCard:
 | 
						|
    set FG_COLOUR, 0
 | 
						|
    rect 3, cardBorderY, 32, cardBorderY2
 | 
						|
    rect 34, cardBorderY, 63, cardBorderY2
 | 
						|
    rect 65, cardBorderY, 94, cardBorderY2
 | 
						|
    rect 96, cardBorderY, 125, cardBorderY2
 | 
						|
    rect 127, cardBorderY, 156, cardBorderY2
 | 
						|
 | 
						|
    set FG_COLOUR, 3
 | 
						|
 | 
						|
    if selectedCard &= 0
 | 
						|
        rect 3, cardBorderY, 32, cardBorderY2
 | 
						|
    elseif selectedCard &= 1
 | 
						|
        rect 34, cardBorderY, 63, cardBorderY2
 | 
						|
    elseif selectedCard &= 2
 | 
						|
        rect 65, cardBorderY, 94, cardBorderY2
 | 
						|
    elseif selectedCard &= 3
 | 
						|
        rect 96, cardBorderY, 125, cardBorderY2
 | 
						|
    elseif selectedCard &= 4
 | 
						|
        rect 127, cardBorderY, 156, cardBorderY2
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Hold Card
 | 
						|
' ------------------
 | 
						|
holdCard:
 | 
						|
    set FG_COLOUR, 31
 | 
						|
    set BG_COLOUR, 32
 | 
						|
 | 
						|
    if selectedCard &= 0
 | 
						|
        holdX = 7
 | 
						|
    elseif selectedCard &= 1
 | 
						|
        holdX = 38
 | 
						|
    elseif selectedCard &= 2
 | 
						|
        holdX = 69
 | 
						|
    elseif selectedCard &= 3
 | 
						|
        holdX = 100
 | 
						|
    elseif selectedCard &= 4
 | 
						|
        holdX = 131
 | 
						|
    endif
 | 
						|
 | 
						|
    tempCard = hand(selectedCard)
 | 
						|
 | 
						|
    if cardState(tempCard) &= DRAWN
 | 
						|
        cardState(tempCard) = HELD
 | 
						|
        at holdX,holdY : print "HELD"
 | 
						|
        gosub playSndHold
 | 
						|
    elseif cardState(tempCard) &= HELD
 | 
						|
        cardState(tempCard) = DRAWN
 | 
						|
        at holdX,holdY : print "    "
 | 
						|
        gosub playSndUnHold
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Display Payouts
 | 
						|
' ------------------
 | 
						|
displayPayouts:
 | 
						|
    set BG_COLOUR, 16
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= ROYALFLUSH
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 32,2 :  print "Royal Flush x250"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= STRAIGHTFLUSH
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 5,11 : print "S.Flush  x50"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= FOUROFAKIND
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 5,20 : print "4-Kind   x25"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= FULLHOUSE
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 5,29 : print "F.House  x9"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= FLUSH
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 5,38 : print "Flush    x6"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= STRAIGHT
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 90,11 : print "Straight x4"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= THREEOFAKIND
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 90,20 : print "3-Kind   x3"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= TWOPAIR
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 90,29 : print "Two Pair x2"
 | 
						|
 | 
						|
    set FG_COLOUR, 42
 | 
						|
    if winType &= JACKSORBETTER
 | 
						|
        set FG_COLOUR, 15
 | 
						|
    endif
 | 
						|
    at 90,38 : print "Jacks+   x1"
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Display Balance
 | 
						|
' ------------------
 | 
						|
displayBalance:
 | 
						|
    set BG_COLOUR, 32
 | 
						|
    set FG_COLOUR, 63
 | 
						|
    if balance &< 10
 | 
						|
        at 106,110 : print "Bal:000"
 | 
						|
        at 148,110 : print balance
 | 
						|
    elseif balance &< 100
 | 
						|
        at 106,110 : print "Bal:00"
 | 
						|
        at 142,110 : print balance
 | 
						|
    elseif balance &< 999
 | 
						|
        at 106,110 : print "Bal:0"
 | 
						|
        at 136,110 : print balance
 | 
						|
    else
 | 
						|
        at 106,110 : print "Bal:"
 | 
						|
        at 130,110 : print balance
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Update Balance
 | 
						|
' ------------------
 | 
						|
updateBalance:
 | 
						|
    if winAmount &> 0
 | 
						|
        set BG_COLOUR, 3
 | 
						|
        set FG_COLOUR, 15
 | 
						|
        at 3,110 : print "Win:"
 | 
						|
        at 26,110 : print winAmount
 | 
						|
        balance = balance + winAmount
 | 
						|
        if balance &> 9999
 | 
						|
            balance = 9999
 | 
						|
        endif
 | 
						|
        winAmount = 0
 | 
						|
        gosub displayBalance
 | 
						|
        gosub playSndWin
 | 
						|
    endif
 | 
						|
 | 
						|
    if balance &< 1
 | 
						|
        currentRound = GAMEOVER
 | 
						|
        gosub clearHand
 | 
						|
        gosub displayGameOver
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Display Bet
 | 
						|
' ------------------
 | 
						|
displayBet:
 | 
						|
    set BG_COLOUR, 32
 | 
						|
    set FG_COLOUR, 63
 | 
						|
    at 57,110 : print "Bet:"
 | 
						|
    at 80,110 : print betAmount
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
' Display Card Backs
 | 
						|
' ------------------
 | 
						|
displayCardBacks:
 | 
						|
    set FG_COLOUR, 0
 | 
						|
    rectf 3, cardBorderY, 32, cardBorderY2
 | 
						|
    rectf 34, cardBorderY, 63, cardBorderY2
 | 
						|
    rectf 65, cardBorderY, 94, cardBorderY2
 | 
						|
    rectf 96, cardBorderY, 125, cardBorderY2
 | 
						|
    rectf 127, cardBorderY, 156, cardBorderY2
 | 
						|
    set FG_COLOUR, 21
 | 
						|
    rectf 4, cardY, 31, cardY2
 | 
						|
    rectf 35, cardY, 62, cardY2
 | 
						|
    rectf 66, cardY, 93, cardY2
 | 
						|
    rectf 97, cardY, 124, cardY2
 | 
						|
    rectf 128, cardY, 155, cardY2
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Display Cards
 | 
						|
' ------------------
 | 
						|
displayCards:
 | 
						|
    set FG_COLOUR, 0
 | 
						|
    set BG_COLOUR, 63
 | 
						|
 | 
						|
' Card 1
 | 
						|
    if cardState(hand(0)) &= DRAWN
 | 
						|
        if currentRound &= DRAW
 | 
						|
            set FG_COLOUR, 0
 | 
						|
            rectf 3, cardBorderY, 32, cardBorderY2
 | 
						|
            set FG_COLOUR, 21
 | 
						|
            rectf 4, cardY, 31, cardY2
 | 
						|
        endif
 | 
						|
        WAIT 8
 | 
						|
        gosub playSndCardFlip
 | 
						|
        set FG_COLOUR, 63
 | 
						|
        rectf 4, cardY, 31, cardY2
 | 
						|
        if (cardSuit(hand(0)) = HEARTS) OR (cardSuit(hand(0)) = DIAMONDS)
 | 
						|
            set FG_COLOUR, 3
 | 
						|
        else
 | 
						|
            set FG_COLOUR, 0
 | 
						|
        endif
 | 
						|
        if cardValue(hand(0)) &= 14
 | 
						|
            at 7,cardValueY : print "A"
 | 
						|
        elseif cardValue(hand(0)) &= 13
 | 
						|
            at 7,cardValueY : print "K"
 | 
						|
        elseif cardValue(hand(0)) &= 12
 | 
						|
            at 7,cardValueY : print "Q"
 | 
						|
        elseif cardValue(hand(0)) &= 11
 | 
						|
            at 7,cardValueY : print "J"
 | 
						|
        else
 | 
						|
            at 7,cardValueY : print cardValue(hand(0))
 | 
						|
        endif
 | 
						|
        sprite noFlip, cardSuit(hand(0)), 11, cardSuitY
 | 
						|
    endif
 | 
						|
 | 
						|
' Card 2
 | 
						|
    if cardState(hand(1)) &= DRAWN
 | 
						|
        if currentRound &= DRAW
 | 
						|
            set FG_COLOUR, 0
 | 
						|
            rectf 34, cardBorderY, 63, cardBorderY2
 | 
						|
            set FG_COLOUR, 21
 | 
						|
            rectf 35, cardY, 62, cardY2
 | 
						|
        endif
 | 
						|
        WAIT 8
 | 
						|
        gosub playSndCardFlip
 | 
						|
        set FG_COLOUR, 63
 | 
						|
        rectf 35, cardY, 62, cardY2
 | 
						|
        if (cardSuit(hand(1)) = HEARTS) OR (cardSuit(hand(1)) = DIAMONDS)
 | 
						|
            set FG_COLOUR, 3
 | 
						|
        else
 | 
						|
            set FG_COLOUR, 0
 | 
						|
        endif
 | 
						|
        if cardValue(hand(1)) &= 14
 | 
						|
            at 38,cardValueY : print "A"
 | 
						|
        elseif cardValue(hand(1)) &= 13
 | 
						|
            at 38,cardValueY : print "K"
 | 
						|
        elseif cardValue(hand(1)) &= 12
 | 
						|
            at 38,cardValueY : print "Q"
 | 
						|
        elseif cardValue(hand(1)) &= 11
 | 
						|
            at 38,cardValueY : print "J"
 | 
						|
        else
 | 
						|
            at 38,cardValueY : print cardValue(hand(1))
 | 
						|
        endif
 | 
						|
        sprite noFlip, cardSuit(hand(1)), 42, cardSuitY
 | 
						|
    endif
 | 
						|
 | 
						|
' Card 3
 | 
						|
    if cardState(hand(2)) &= DRAWN
 | 
						|
        if currentRound &= DRAW
 | 
						|
            set FG_COLOUR, 0
 | 
						|
            rectf 65, cardBorderY, 94, cardBorderY2
 | 
						|
            set FG_COLOUR, 21
 | 
						|
            rectf 66, cardY, 93, cardY2
 | 
						|
        endif
 | 
						|
        WAIT 8
 | 
						|
        gosub playSndCardFlip
 | 
						|
        set FG_COLOUR, 63
 | 
						|
        rectf 66, cardY, 93, cardY2
 | 
						|
        if (cardSuit(hand(2)) = HEARTS) OR (cardSuit(hand(2)) = DIAMONDS)
 | 
						|
            set FG_COLOUR, 3
 | 
						|
        else
 | 
						|
            set FG_COLOUR, 0
 | 
						|
        endif
 | 
						|
        if cardValue(hand(2)) &= 14
 | 
						|
            at 69,cardValueY : print "A"
 | 
						|
        elseif cardValue(hand(2)) &= 13
 | 
						|
            at 69,cardValueY : print "K"
 | 
						|
        elseif cardValue(hand(2)) &= 12
 | 
						|
            at 69,cardValueY : print "Q"
 | 
						|
        elseif cardValue(hand(2)) &= 11
 | 
						|
            at 69,cardValueY : print "J"
 | 
						|
        else
 | 
						|
            at 69,cardValueY : print cardValue(hand(2))
 | 
						|
        endif
 | 
						|
        sprite noFlip, cardSuit(hand(2)), 73, cardSuitY
 | 
						|
    endif
 | 
						|
 | 
						|
' Card 4
 | 
						|
    if cardState(hand(3)) &= DRAWN
 | 
						|
        if currentRound &= DRAW
 | 
						|
            set FG_COLOUR, 0
 | 
						|
            rectf 96, cardBorderY, 125, cardBorderY2
 | 
						|
            set FG_COLOUR, 21
 | 
						|
            rectf 97, cardY, 124, cardY2
 | 
						|
        endif
 | 
						|
        WAIT 8
 | 
						|
        gosub playSndCardFlip
 | 
						|
        set FG_COLOUR, 63
 | 
						|
        rectf 97, cardY, 124, cardY2
 | 
						|
        if (cardSuit(hand(3)) = HEARTS) OR (cardSuit(hand(3)) = DIAMONDS)
 | 
						|
            set FG_COLOUR, 3
 | 
						|
        else
 | 
						|
            set FG_COLOUR, 0
 | 
						|
        endif
 | 
						|
        if cardValue(hand(3)) &= 14
 | 
						|
            at 100,cardValueY : print "A"
 | 
						|
        elseif cardValue(hand(3)) &= 13
 | 
						|
            at 100,cardValueY : print "K"
 | 
						|
        elseif cardValue(hand(3)) &= 12
 | 
						|
            at 100,cardValueY : print "Q"
 | 
						|
        elseif cardValue(hand(3)) &= 11
 | 
						|
            at 100,cardValueY : print "J"
 | 
						|
        else
 | 
						|
            at 100,cardValueY : print cardValue(hand(3))
 | 
						|
        endif
 | 
						|
        sprite noFlip, cardSuit(hand(3)), 104, cardSuitY
 | 
						|
    endif
 | 
						|
 | 
						|
' Card 5
 | 
						|
    if cardState(hand(4)) &= DRAWN
 | 
						|
        if currentRound &= DRAW
 | 
						|
            set FG_COLOUR, 0
 | 
						|
            rectf 127, cardBorderY, 156, cardBorderY2
 | 
						|
            set FG_COLOUR, 21
 | 
						|
            rectf 128, cardY, 155, cardY2
 | 
						|
        endif
 | 
						|
        WAIT 8
 | 
						|
        gosub playSndCardFlip
 | 
						|
        set FG_COLOUR, 63
 | 
						|
        rectf 128, cardY, 155, cardY2
 | 
						|
        if (cardSuit(hand(4)) = HEARTS) OR (cardSuit(hand(4)) = DIAMONDS)
 | 
						|
            set FG_COLOUR, 3
 | 
						|
        else
 | 
						|
            set FG_COLOUR, 0
 | 
						|
        endif
 | 
						|
        if cardValue(hand(4)) &= 14
 | 
						|
            at 131,cardValueY : print "A"
 | 
						|
        elseif cardValue(hand(4)) &= 13
 | 
						|
            at 131,cardValueY : print "K"
 | 
						|
        elseif cardValue(hand(4)) &= 12
 | 
						|
            at 131,cardValueY : print "Q"
 | 
						|
        elseif cardValue(hand(4)) &= 11
 | 
						|
            at 131,cardValueY : print "J"
 | 
						|
        else
 | 
						|
            at 131,cardValueY : print cardValue(hand(4))
 | 
						|
        endif
 | 
						|
        sprite noFlip, cardSuit(hand(4)), 135, cardSuitY
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Sort Cards
 | 
						|
' ------------------
 | 
						|
sortCards:
 | 
						|
    for i = 0 to 3
 | 
						|
        for j = (1 + i) to 4
 | 
						|
            tempValue1 = hand(i)
 | 
						|
            tempValue2 = hand(j)
 | 
						|
            if cardValue(tempValue1) &> cardValue(tempValue2)
 | 
						|
                tempCard = hand(i)
 | 
						|
                hand(i) = hand(j)
 | 
						|
                hand(j) = tempCard
 | 
						|
            endif
 | 
						|
        next j
 | 
						|
    next i
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Check Hand
 | 
						|
' ------------------
 | 
						|
checkHand:
 | 
						|
' reset flags
 | 
						|
    straightFlag = 0
 | 
						|
    flushFlag = 0
 | 
						|
    winType = NONE
 | 
						|
    set FG_COLOUR, 31
 | 
						|
    set BG_COLOUR, 32
 | 
						|
 | 
						|
' sort cards least to greatest
 | 
						|
    gosub sortCards
 | 
						|
    card0 = cardValue(hand(0))
 | 
						|
    card1 = cardValue(hand(1))
 | 
						|
    card2 = cardValue(hand(2))
 | 
						|
    card3 = cardValue(hand(3))
 | 
						|
    card4 = cardValue(hand(4))
 | 
						|
 | 
						|
' check straight and flush flags first
 | 
						|
    gosub flush
 | 
						|
    gosub straight
 | 
						|
 | 
						|
' Royal Flush
 | 
						|
    gosub royalFlush
 | 
						|
    if winType &= ROYALFLUSH
 | 
						|
        winAmount = 250 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Straight Flush
 | 
						|
    gosub straightFlush
 | 
						|
    if winType &= STRAIGHTFLUSH
 | 
						|
        winAmount = 50 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Four of a Kind
 | 
						|
    gosub fourOfAKind
 | 
						|
    if winType &= FOUROFAKIND
 | 
						|
        winAmount = 25 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Full House
 | 
						|
    gosub fullHouse
 | 
						|
    if winType &= FULLHOUSE
 | 
						|
        winAmount = 9 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Flush
 | 
						|
    if flushFlag &= 1
 | 
						|
        winType = FLUSH
 | 
						|
        winAmount = 6 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Straight
 | 
						|
    if straightFlag &= 1
 | 
						|
        winType = STRAIGHT
 | 
						|
        winAmount = 4 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Three of a Kind
 | 
						|
    gosub threeOfAKind
 | 
						|
    if winType &= THREEOFAKIND
 | 
						|
        winAmount = 3 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Two Pair
 | 
						|
    gosub twoPair
 | 
						|
    if winType &= TWOPAIR
 | 
						|
        winAmount = 2 * betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
 | 
						|
' Jacks or Better
 | 
						|
    gosub jacksOrBetter
 | 
						|
    if winType &= JACKSORBETTER
 | 
						|
        winAmount = betAmount
 | 
						|
        return
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
' ------------------
 | 
						|
'   Win Conditions
 | 
						|
' ------------------
 | 
						|
jacksOrBetter:
 | 
						|
    for i = 0 to 4
 | 
						|
        tempValue1 = hand(i)
 | 
						|
        tempValue2 = hand(i+1)
 | 
						|
        if (cardValue(tempValue1) = cardValue(tempValue2)) AND (cardValue(tempValue2) > 10)
 | 
						|
            winType = JACKSORBETTER
 | 
						|
        endif
 | 
						|
    next i
 | 
						|
return
 | 
						|
 | 
						|
twoPair:
 | 
						|
    if (card0 = card1) AND (card2 = card3)
 | 
						|
        winType = TWOPAIR
 | 
						|
    elseif (card1 = card2) AND (card3 = card4) 
 | 
						|
        winType = TWOPAIR
 | 
						|
    elseif (card0 = card1) AND (card3 = card4) 
 | 
						|
        winType = TWOPAIR
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
threeOfAKind:
 | 
						|
    for i = 0 to 2
 | 
						|
        tempValue1 = hand(i)
 | 
						|
        tempValue2 = hand(i+1)
 | 
						|
        tempValue3 = hand(i+2)
 | 
						|
        if (cardValue(tempValue1) = cardValue(tempValue2)) AND (cardValue(tempValue2) = cardValue(tempValue3))
 | 
						|
            winType = THREEOFAKIND
 | 
						|
        endif
 | 
						|
    next i
 | 
						|
return
 | 
						|
 | 
						|
straight:
 | 
						|
    if (card4 = card3+1) AND (card3+1 = card2+2) AND (card2+2 = card1+3) AND (card1+3 = card0+4)
 | 
						|
        straightFlag = 1
 | 
						|
    elseif (card4 = ACE) AND (card0 = 2) AND (card1 = 3) AND (card2 = 4) AND (card3 = 5)
 | 
						|
        straightFlag = 1
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
flush:
 | 
						|
    if (cardSuit(hand(0)) = cardSuit(hand(1))) AND (cardSuit(hand(1)) = cardSuit(hand(2))) AND (cardSuit(hand(2)) = cardSuit(hand(3))) AND (cardSuit(hand(3)) = cardSuit(hand(4)))
 | 
						|
        flushFlag = 1
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
fullHouse:
 | 
						|
    if (card0 = card1) AND (card1 = card2) AND (card3 = card4)
 | 
						|
        winType = FULLHOUSE
 | 
						|
    elseif (card0 = card1) AND (card2 = card3) AND (card3 = card4)
 | 
						|
        winType = FULLHOUSE
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
fourOfAKind:
 | 
						|
    if (card0 = card1) AND (card1 = card2) AND (card2 = card3)
 | 
						|
        winType = FOUROFAKIND
 | 
						|
    elseif (card1 = card2) AND (card2 = card3) AND (card3 = card4)
 | 
						|
        winType = FOUROFAKIND
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
straightFlush:
 | 
						|
    if (straightFlag = 1) AND (flushFlag = 1)
 | 
						|
        winType = STRAIGHTFLUSH
 | 
						|
    endif
 | 
						|
return
 | 
						|
 | 
						|
royalFlush:
 | 
						|
    if (flushFlag = 1) AND (card0 = 10) AND (card1 = JACK) AND (card2 = QUEEN) AND (card3 = KING) AND (card4 = ACE)
 | 
						|
        winType = ROYALFLUSH
 | 
						|
    endif
 | 
						|
return
 |