UUICEO's Blackjack Script

```
; Blackjack Dealer NPC Script

; By UUICEO on REALITYCRAFTERS

; Place
this in the right click script of the dealer npc

Dim Deck$(52), Hand$(2,

Function Main()

   Player = Actor()

   Dealer =
ContextActor()

   DWWindowBG = 65535; <-Background texture for the dealer
window

   Repeat

      ResetHands()

      Result% = 0

 PlayerCash% = Money(Player)

      DW = OpenDialog(Player, Dealer,
"Blackjack", DWWindowBG)

         If PlayerCash% > 0 Then

 DialogOutput(Player, DW, "Greetings friend, what would you like to do?", 155,
155, 155)

            If Bet% > 0 And (PlayerCash% >= Bet%) Then

             SelectResult% = DialogInput(Player, DW, "Bet " + Bet% + "|Bet new
amount|Rules|Nothing, I changed my mind", "|")

               Selection = 1

            Else

               SelectResult% = DialogInput(Player, DW,
"Play Blackjack|Rules|Nothing, I changed my mind", "|")

 Selection = 2

            EndIf

         Else

 DialogOutput(Player, DW, "Sorry " + Name(Player) + " but you don't have any
money.")

            DialogInput(Player, DW, "Leave", "|")

 CloseDialog(Player, DW)

            Return

         EndIf

 If Selection = 1 Then

            SelectResult% = SelectResult% - 1

          If SelectResult% = 1 Then

               Selection = 2

    EndIf

            If SelectResult% = 0 Then

 SelectResult% = 1

            EndIf

         EndIf

    Select SelectResult%

            Case 1 ; <-- Play the
game.

               CloseDialog(Player, DW)

    BuildDeck()

               If Selection = 2 Then

 Bet% = 0

                  Repeat

                     If PlayerCash%
> 99 Then

                        MaxBet% = 99

 Else

                        MaxBet% = PlayerCash%

 EndIf

                     Bet% = Input(Player, "Bet Amount max=" +
MaxBet%, "$", 2)

                  Until Bet% <= PlayerCash% And Bet%
<= MaxBet%

               Wager% = Bet%

               EndIf

;
             PlaySound(Player, SoundID, 1) ; <---  Bet Money Sound goes here

               ChangeMoney(Player, -Bet%)

               DW =
OpenDialog(Player, Dealer, "Blackjack", DWWindowBG)

 DialogOutput(Player, DW, "Shuffleing the deck...")

 ShuffleDeck(Player, Dealer)

                  DoEvents(1000)

       DialogOutput(Player, DW, "Dealing")

 NextCardFromDeck% = 0

;      This deals the first 2 cards to each player

                  For i = 1 to 2

                     NextCardFromDeck%
= DealCard%(1, NextCardFromDeck%, Player, Dealer)

 DoEvents(1000)

                     NextCardFromDeck% = DealCard%(2,
NextCardFromDeck%, Player, Dealer)

                     DoEvents(1000)

                Next

                  PlayerHandValue% = TallyCards%(1,
PlayerHandValue%)

                  DealerHandValue% = TallyCards%(2,
PlayerHandValue%)

                  Temp$ = Hand$(1, 1) + " + " + Hand$(1,

                  DealerTemp$ = " ?" + " + " + Hand$(2, 2)

       If DealerHandValue% = 21 Then

                     Temp$ = Hand$(2,
1) + " + " + Hand$(2, 2)

                     DialogOutput(Player, DW,
"Dealer has " + Temp$, 10, 255, 255)

 DialogOutput(Player, DW, "Dealer card total is :" + DealerHandValue%, 10, 255,

                     DialogOutput(Player, DW, "Sorry, You loss.  Dealer
has Blackjack!")

                     Result% = DialogInput(Player, DW,
"Continue", "|")

                     CloseDialog(Player, DW)

       EndIf

                  If PlayerHandValue% = 21 Then

          DialogOutput(Player, DW, "You have " + Temp$, 10, 255, 255)

                DialogOutput(Player, DW, "Your card total is :" +
PlayerHandValue%, 10, 255, 255)

                     DialogOutput(Player,
DW, "You Win.  You have Blackjack!")

 ChangeMoney(Player, Bet% * 3)

                     Result% =
DialogInput(Player, DW, "Continue", "|")

 CloseDialog(Player, DW)

                  EndIf

                  If
Result = 0

                     PlayerIsDone = False

                     Repeat

                        CloseDialog(Player,
DW)

                        DW = OpenDialog(Player, Dealer, "Blackjack",
DWWindowBG)

                        DialogOutput(Player, DW, "Dealer has " +
DealerTemp$, 0, 200, 200)

                        DialogOutput(Player, DW,
"You have " + Temp$, 10, 255, 255)

 DialogOutput(Player, DW, "Your card total is :" + PlayerHandValue%, 10, 255,

                        DialogOutput(Player, DW, "What would you like
to do?", 10, 255, 255)

                        If (PlayerHandValue% = 10 Or
PlayerHandValue% = 11) And (PlayerCash% >= Bet%) Then

       InptString$ = "Double Down|Take a Hit|Stand"

 Else

                           InptString$ = "Take a Hit|Stand"

                   EndIf

                        Result% =
DialogInput(Player, DW, InptString$, "|")

                        If Result%
= 1 And Len(InptString$) > 20 Then

                           Result% = 4

                        ElseIf Result% = 2 And Len(InptString$) > 20 Then

                           Result% = 1

                        EndIf

                        Select Result%

 Case 1; Player took a hit

 NextCardFromDeck% = DealCard%(1, NextCardFromDeck%, Player, Dealer)

                      PlayerHandValue% = TallyCards%(1, PlayerHandValue%)

                            Temp$ = ""

                              For i =
1 To 5

                                 If Hand$(1, i) <> "" Then

                                    Temp$ = Temp$ + Hand$(1, i) + " + "

                                    If PlayerHandValue% < 22 And i = 5
Then

                                       FiveCardCharlie = True

                               EndIf

                                 EndIf

                              Next

                              Temp$ =
Left(Temp$, Len(Temp$) - 3)

                              If
PlayerHandValue% < 22 And FiveCardCharlie = True Then

             PlayerIsDone = True

 CloseDialog(Player, DW)

                                 DW =
OpenDialog(Player, Dealer, "Blackjack", DWWindowBG)

          DialogOutput(Player, DW, "You have " + Temp$, 10, 255, 255)

                            DialogOutput(Player, DW, "Your card total is :" +
PlayerHandValue%, 10, 255, 255)

 DialogOutput(Player, DW, "You have Five Card Charlie.")

             ChangeMoney(Player, Bet% * 3)

 Result% = DialogInput(Player, DW, "Continue.", "|")

       EndIf

                           Case 4; Player Doubled down

                              ChangeMoney(Player, -Bet%)

                   Wager% = Bet% * 2

;
 PlaySound(Player, SoundID, 1) ; <---  Bet Money Sound goes here

                      NextCardFromDeck% = DealCard%(1, NextCardFromDeck%,
Player, Dealer)

                              PlayerHandValue% =
TallyCards%(1, PlayerHandValue%)

                              Temp$ = ""

                              For i = 1 To 3

       If Hand$(1, i) <> "" Then

 Temp$ = Temp$ + Hand$(1, i) + " + "

                                 EndIf

                              Next

 Temp$ = Left(Temp$, Len(Temp$) - 3)

                              Result% =
2

                        End Select

                        If
PlayerHandValue% > 21 Then

                           PlayerIsDone = True

                           CloseDialog(Player, DW)

       DW = OpenDialog(Player, Dealer, "Blackjack", DWWindowBG)

                DialogOutput(Player, DW, "You have " + Temp$, 10, 255, 255)

                           DialogOutput(Player, DW, "Your card total is :" +
PlayerHandValue%, 10, 255, 255)

 DialogOutput(Player, DW, "You busted.")

                           Result%
= DialogInput(Player, DW, "Continue.", "|")

                        EndIf

                        If PlayerHandValue% = 21 Then

          If Int(Hand$(1, 1)) = 7 And Int(Hand$(1, 2)) = 7 Then

                   TrippleSeven = True

 PlayerIsDone = True

                              CloseDialog(Player, DW)

                              DW = OpenDialog(Player, Dealer, "Blackjack",
DWWindowBG)

                              DialogOutput(Player, DW, "You have
" + Temp$, 10, 255, 255)

                              DialogOutput(Player,
DW, "Your card total is :" + PlayerHandValue%, 10, 255, 255)

                DialogOutput(Player, DW, "You have Tripple Seven 21.")

                         ChangeMoney(Player, Bet% * 3)

          Result% = DialogInput(Player, DW, "Continue.", "|")

             EndIf

                        EndIf

 Until Result% = 2 Or PlayerIsDone = True Or TrippleSeven = True Or
FiveCardCharlie = True

                     PlayerFinalHand$ = Temp$

                   If PlayerIsDone = False Then

 Repeat

                           Temp$ = ""

 For i = 1 To 8

                              If Hand$(2, i) <> ""
Then

                                 Temp$ = Temp$ + Hand$(2, i) + " + "

                              EndIf

                           Next

                           If Hand$(2, 9) <> "" Then

                Temp$ = Temp$ + Hand$(2, 9)

                           Else

                              Temp$ = Left(Temp$, Len(Temp$) - 3)

                      EndIf

                           CloseDialog(Player,
DW)

                           DW = OpenDialog(Player, Dealer, "Blackjack",
DWWindowBG)

                           DialogOutput(Player, DW, "Player has:
" + PlayerFinalHand$, 10, 255, 255)

 DialogOutput(Player, DW, "Player card total is :" + PlayerHandValue%, 10, 255,

                           DialogOutput(Player, DW, "Dealer has: " +
Temp$)

                           DialogOutput(Player, DW, "Dealer card
total is :" + DealerHandValue%)

                           DealerFinished =
False

                           If DealerHandValue% > 16 Then

                         DealerFinished = True

 DialogOutput(Player, DW, "Dealer stands")

                           Else

                              DialogOutput(Player, DW, "Dealer takes a hit")

                              NextCardFromDeck% = DealCard%(2,
NextCardFromDeck%, Player, Dealer)

 DealerHandValue% = TallyCards%(2, PlayerHandValue%)

    EndIf

                        Until DealerFinished = True

             If DealerHandValue% > PlayerHandValue% And DealerHandValue% <
22 Then

                           DialogOutput(Player, DW, "Dealer wins
with :" + DealerHandValue%)

                        ElseIf DealerHandValue%
= PlayerHandValue% Then

                           DialogOutput(Player, DW,
"It's a TIE.")

                           ChangeMoney(Player, Wager%)

                      Else

                           DialogOutput(Player,
DW, "You win with :" + PlayerHandValue%)

 ChangeMoney(Player, Wager% * 2)

                        EndIf

                DialogInput(Player, DW, "Continue")

 EndIf

                     CloseDialog(Player, DW)

 EndIf

            Case 2 ; <-- Display the rules of
the game.

               CloseDialog(Player, DW)

       DW = OpenDialog(Player, Dealer, "BlackJack Rules")

 DialogOutput(Player, DW, "The rules to balckjack are fairly simple,")

          DialogOutput(Player, DW, "you try to beat the dealers hand by having")

               DialogOutput(Player, DW, "a higher point total without going
over 21.")

               DialogOutput(Player, DW, "Cards are valued at face
value except FACE")

               DialogOutput(Player, DW, "CARDS (K, Q, J)
which count as 10 points")

               DialogOutput(Player, DW, "and ACES
which can be either 1 or 11. If")

               DialogOutput(Player, DW,
"you get an ACE and FACE CARD or 10,")

               DialogOutput(Player,
DW, "that is considered a Blackjack which pays")

 DialogOutput(Player, DW, "2 to 1, all other wins pay even money.")

       DialogInput(Player, DW, "Next", "|")

 CloseDialog(Player, DW)

               DW = OpenDialog(Player, Dealer,
"BlackJack Rules")

               DialogOutput(Player, DW, "You may double
down if your initial hand")

               DialogOutput(Player, DW, "total
is 10 or 11. If you choose to do this,")

               DialogOutput(Player,
DW, "you would double your bet and the dealer")

 DialogOutput(Player, DW, "will give you one additional card. The")

       DialogOutput(Player, DW, "dealer will then play his hand. Remember")

               DialogOutput(Player, DW, "that you only get ONE card when
you")

               DialogOutput(Player, DW, "double down and are NOT
allowed to take")

               DialogOutput(Player, DW, "a hit
afterwards.")

               DialogInput(Player, DW, "Next", "|")

          CloseDialog(Player, DW)

               DW = OpenDialog(Player,
Dealer, "BlackJack Rules")

               DialogOutput(Player, DW, "Getting
Three Sevens is commonly called")

               DialogOutput(Player, DW,
"TRIPPLE SEVEN 21. If you get this hand")

 DialogOutput(Player, DW, "you automatically win the same as a regular")

             DialogOutput(Player, DW, "BlackJack.")

 DialogOutput(Player, DW, "")

               DialogOutput(Player, DW,
"Getting 5 cards total without going bust is")

 DialogOutput(Player, DW, "called a FIVE CARD CHARLIE. If you")

    DialogOutput(Player, DW, "get this hand you automatically win the")

          DialogOutput(Player, DW, "same as a regular BlackJack.")

       DialogInput(Player, DW, "Next", "|")

 CloseDialog(Player, DW)

               DW = OpenDialog(Player, Dealer,
"BlackJack Rules")

               DialogOutput(Player, DW, "When playing,
the dealer MUST say with a")

               DialogOutput(Player, DW, "total
of 17 or better and take a hit on")

               DialogOutput(Player, DW,
"anything less. You are allowed to stay or")

 DialogOutput(Player, DW, "hit on anything until you either stand or")

          DialogOutput(Player, DW, "go over 21. If you go over 21, the dealer")

               DialogOutput(Player, DW, "automatically wins. When taking a
hit, the")

               DialogOutput(Player, DW, "dealer gives you 1
additional card, the")

               DialogOutput(Player, DW, "value of
which is added to your total. You")

               DialogOutput(Player, DW,
"can stop at any time by Standing with what")

 DialogOutput(Player, DW, "you have provided it is not over 21.")

    DialogOutput(Player, DW, "Good Luck!!")

 DialogInput(Player, DW, "Exit Rules", "|")

 CloseDialog(Player, DW)

            Default

               CloseDialog(Player, DW)

               Return

         End Select

         NextCardFromDeck% = 0

 PlayerIsDone = False

         Wager% = 0

         TrippleSeven = False

         FiveCardCharlie = False

   Forever

End Function

Function DealCard%(curHand%, NextCardFromDeck%, Player, Dealer) ; <--
ADD SOUND ID to this function

;    PlaySound(Player, SoundID, 1) ;
<---  Card Dealing Sound goes here

;    AnimateActor(Dealer, "Deal", 0.5)
; <-- Deal Card ANIMATION

;   <-- This function deals a single
card at a time to the

;    -- curHand% player and also increments the
counter that

;    -- allows us to track the last card drawn from the deck

   NextCardFromDeck = NextCardFromDeck + 1

   Repeat

 Counter = Counter + 1

   Until Hand$(curHand, Counter) = "" Or Counter >
5

   If Counter < 6 Then

      Hand$(curHand, Counter) =
Deck$(NextCardFromDeck)

   Else

      NextCardFromDeck = -1

   EndIf

   DoEvents(400)

   Return(NextCardFromDeck)

End Function

Function ResetHands() ;         <-- 100% Complete

;   <--
This function resets the hand variables of both players

;    -- after each
hand.

   For i = 1 To 9

      Hand$(1, i) = ""

      Hand$(2, i)
= ""

   Next

End Function

Function BuildDeck() ;
<-- 100% Complete

;   <-- This function creates the 52 card deck

   DeckString$ = Chr(245) + Chr(244) + Chr(243) + Chr(242) + Chr(252) +
Chr(251) + Chr(250) + Chr(249) + Chr(255) + Chr(227) + Chr(226) + Chr(225) +
Chr(224)

;   DeckString$ = " A K Q J10 9 8 7 6 5 4 3 2"

   For i = 1
to 52

      Counter = Counter + 1

      If Counter = 13 Then

 Counter = 1

      EndIf

      Deck$(i) = Mid(DeckString$, (2 * Counter)
- 1, 2)

   Next

End Function

Function ShuffleDeck(Player,
Dealer) ;        <-- ADD SOUND ID to this function

;
 PlaySound(Player, SoundID, 1) ; <---  Card Shuffleing Sound goes here

;
 AnimateActor(Dealer, "Shuffle", 0.5) ; <-- Shuffle Cards ANIMATION

;   <-- This function uses variable swapping to shuffle the deck. It

;    -- goes through 3 times to ensure the deck is well shuffled.

 For j = 1 to 3

      For i = 1 to 52

         Repeat

 CardSwap = Rand(1, 52)

         Until CardSwap <> i

 Temp$ = Deck$(i)

         Deck$(i) = Deck$(CardSwap)

 Deck$(CardSwap) = Temp$

      Next

   Next

End Function

Function TallyCards%(curHand, PlayerHandValue%) ; <-- 100% Complete

;   <-- This calculates the total value of the current hand and

;    -- returns that value.

   For i = 1 to 9

      If
Hand$(curHand, i) <> "" Then

         If Hand$(curHand, i) = Chr(245)
Then

            Ace = Ace + 1 : Points = Points + 11

         ElseIf
Hand$(curHand, i) = Chr(244) Then

            Points = Points + 10

    ElseIf Hand$(curHand, i) = Chr(243) Then

            Points = Points +
10

         ElseIf Hand$(curHand, i) = Chr(242) Then

            Points
= Points + 10

         ElseIf Hand$(curHand, i) = Chr(252) Then

       Points = Points + 10

         ElseIf Hand$(curHand, i) = Chr(251)
Then

            Points = Points + 9

         ElseIf Hand$(curHand, i) =
Chr(250) Then

            Points = Points + 8

         ElseIf
Hand$(curHand, i) = Chr(249) Then

            Points = Points + 7

    ElseIf Hand$(curHand, i) = Chr(255) Then

            Points = Points + 6

         ElseIf Hand$(curHand, i) = Chr(227) Then

            Points =
Points + 5

         ElseIf Hand$(curHand, i) = Chr(226) Then

 Points = Points + 4

         ElseIf Hand$(curHand, i) = Chr(225) Then

          Points = Points + 3

         ElseIf Hand$(curHand, i) = Chr(224)
Then

            Points = Points + 2

         EndIf

      EndIf

   Next

   Repeat

;   <-- This will adjust the point total of
a hand that goes over 21 IF

;    -- they have an ACE in their hand.

      If Points > 21 And Ace > 0 Then

         Ace = Ace - 1 :
Points = Points - 10

      EndIf

;   <-- This section allows the
dealer to hit on a soft 17 if the player has

;    -- a better hand than the
dealer.

      If curHand = 2

         If Points > 16

    If Ace > 0

               If PlayerHandValue% > Points

          Ace = Ace - 1 : Points = Points - 10

               EndIf

       EndIf

         EndIf

      EndIf

   Until Points < 22 Or
Ace = 0

   Return(Points)

End Function

```