ONCE_PROG
MPSETVAR $i BJANTE $%LEVEL($i)%
MPSETVAR $i BJMAXBET '20'
MPSETVAR $i BJMAXBET '*$%LEVEL($i)%'
~
GREET_PROG 100
IF VAR($i BJANTE == '')
MPSETVAR $i BJANTE $%LEVEL($i)%
MPSETVAR $i BJMAXBET '20'
MPSETVAR $i BJMAXBET '*$%LEVEL($i)%'
ENDIF
IF ISPC($n) AND VAR($n MYBJVALS == '')
say "$n" Hello $n. I'm dealing blackjack.
say "$n" My ante is $<$i BJANTE>. If you want to join in, give me $<$i BJANTE>.
ENDIF
~
FUNCTION_PROG RandomCard
MPSETVAR $n BJCARDVAL '$%RANDNUM(13)%'
MPSETVAR $n BJCARDNAME '$<$n BJCARDVAL>'
MPSETVAR $n BJCARDSUIT '$%RANDNUM(4)%'
IF VAR($n BJCARDSUIT == '1')
MPSETVAR $n BJCARDSUIT Hearts
ENDIF
IF VAR($n BJCARDSUIT == '2')
MPSETVAR $n BJCARDSUIT Clubs
ENDIF
IF VAR($n BJCARDSUIT == '3')
MPSETVAR $n BJCARDSUIT Spades
ENDIF
IF VAR($n BJCARDSUIT == '4')
MPSETVAR $n BJCARDSUIT Diamonds
ENDIF
IF VAR($n BJCARDNAME == '1')
MPSETVAR $n BJCARDNAME Ace
MPSETVAR $n BJCARDVAL 11
ENDIF
IF VAR($n BJCARDNAME == '11')
MPSETVAR $n BJCARDNAME Jack
MPSETVAR $n BJCARDVAL 10
ENDIF
IF VAR($n BJCARDNAME == '12')
MPSETVAR $n BJCARDNAME Queen
MPSETVAR $n BJCARDVAL 10
ENDIF
IF VAR($n BJCARDNAME == '13')
MPSETVAR $n BJCARDNAME King
MPSETVAR $n BJCARDVAL 10
ENDIF
MPSETVAR $n CARDCODE '$<$n BJCARDNAME>$<$n BJCARDSUIT>'
~
FUNCTION_PROG AddToTotal
MPSETVAR $n BJTOTAL '0'
MPSETVAR $n BJTOTAL +$g.0
MPSETVAR $n BJTOTAL +$g.1
MPSETVAR $n BJTOTAL +$g.2
MPSETVAR $n BJTOTAL +$g.3
MPSETVAR $n BJTOTAL +$g.4
~
FUNCTION_PROG DealOut
MPCALLFUNC RandomCard
MPWHILE (STRIN('$<$n DEALT>' '$<$n CARDCODE>')) MPCALLFUNC RandomCard $n
MPSETVAR $n DEALT $<$n DEALT> $<$n CARDCODE>
MPSETVAR $n BJLIST $g $<$n BJCARDVAL>
MPCALLFUNC AddToTotal $<$n BJLIST>
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.0' == '11')
MPSETVAR $n BJLIST 1 $<$n BJLIST>.1 $<$n BJLIST>.2 $<$n BJLIST>.3 $<$n BJLIST>.4 $<$n BJLIST>.5
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.1' == '11')
MPSETVAR $n BJLIST $<$n BJLIST>.0 1 $<$n BJLIST>.2 $<$n BJLIST>.3 $<$n BJLIST>.4 $<$n BJLIST>.5
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.2' == '11')
MPSETVAR $n BJLIST $<$n BJLIST>.0 $<$n BJLIST>.1 1 $<$n BJLIST>.3 $<$n BJLIST>.4 $<$n BJLIST>.5
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.3' == '11')
MPSETVAR $n BJLIST $<$n BJLIST>.0 $<$n BJLIST>.1 $<$n BJLIST>.2 1 $<$n BJLIST>.4 $<$n BJLIST>.5
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.4' == '11')
MPSETVAR $n BJLIST $<$n BJLIST>.0 $<$n BJLIST>.1 $<$n BJLIST>.2 $<$n BJLIST>.3 1 $<$n BJLIST>.5
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
IF VAR($n BJTOTAL > 21) AND EVAL('$<$n BJLIST>.5' == '11')
MPSETVAR $n BJLIST $<$n BJLIST>.0 $<$n BJLIST>.1 $<$n BJLIST>.2 $<$n BJLIST>.3 $<$n BJLIST>.4 1
MPCALLFUNC AddToTotal $<$n BJLIST>
ENDIF
~
FUNCTION_PROG GameOver
MPSETVAR $n MYBJVALS
MPSETVAR $n MYBJTOTAL
MPSETVAR $n BJLIST
MPSETVAR $n BJTOTAL
MPSETVAR $n BJCARDNAME
MPSETVAR $n BJCARDVAL
MPSETVAR $n BJCARDSUIT
MPSETVAR $n DEALERBJVALS
MPSETVAR $n TOTALBJBET
~
FUNCTION_PROG GameWinOver
say "$n" $G
MPSETVAR $n TOTALBJBET '*2'
MPOLOAD $<$n TOTALBJBET>
give $<$n TOTALBJBET> $n
MPCALLFUNC GameOver
~
FUNCTION_PROG GameTieOver
say "$n" $G
MPCALLFUNC GameOver
~
FUNCTION_PROG GameWin2Over
say "$n" $G
MPSETVAR $n TOTALBJBET '*3'
MPOLOAD $<$n TOTALBJBET>
give $<$n TOTALBJBET> $n
MPCALLFUNC GameOver
~
FUNCTION_PROG GameLoseOver
say "$n" $G
MPCALLFUNC GameOver
~
GIVE_PROG 'stdcoins' 'gencoins'
MPGSET $i MONEY 0
IF VAR($n MYBJVALS == '')
IF (GOLDAMT($o >= '$<$i BJANTE>'))
IF (GOLDAMT($o > '$<$i BJMAXBET>'))
say "$n" I'm sorry, that is worth far too much for this table. I will only wager as high as $<$i BJMAXBET>.
MPOLOAD $%GOLDAMT($o)%
give $%GOLDAMT($o)% $n
ELSE
MPSETVAR $n DEALT ''
MPSETVAR $n MYBJVALS ''
MPSETVAR $n DEALERBJVALS ''
MPSETVAR $n TOTALBJBET $%GOLDAMT($o)%
say "$n" That's the ante. Here we go!
MPCALLFUNC DealOut $<$n MYBJVALS>
MPSETVAR $n MYBJVALS $<$n BJLIST>
MPSETVAR $n CARD1 $<$n BJCARDNAME> of $<$n BJCARDSUIT>
MPCALLFUNC DealOut $<$n MYBJVALS>
MPSETVAR $n MYBJVALS $<$n BJLIST>
say $n You draw the $<$n CARD1> and the $<$n BJCARDNAME> of $<$n BJCARDSUIT>, for a total of $<$n BJTOTAL>.
IF VAR($n BJTOTAL == 21)
MPCALLFUNC GameWin2Over You have blackjack! You win!
ELSE
MPCALLFUNC DealOut $<$n DEALERBJVALS>
MPSETVAR $n DEALERBJVALS $<$n BJLIST>
MPSETVAR $n CARD1 $<$n BJCARDNAME> of $<$n BJCARDSUIT>
MPCALLFUNC DealOut $<$n DEALERBJVALS>
MPSETVAR $n DEALERBJVALS $<$n BJLIST>
say $n The dealer draws the $<$n CARD1> and the $<$n BJCARDNAME> of $<$n BJCARDSUIT>, for a total of $<$n BJTOTAL>.
IF VAR($n BJTOTAL == 21)
MPCALLFUNC GameLoseOver The dealer draws blackjack. You lose!
ELSE
say $n Would you like to 'HIT' or 'STAY'?
ENDIF
ENDIF
ENDIF
ELSE
say $n The ante is $<$i BJANTE>.
MPOLOAD $%GOLDAMT($o)%
give $%GOLDAMT($o)% $n
ENDIF
ENDIF
~
SPEECH_PROG hit
IF VAR($n MYBJVALS == '')
say "$n" You are not currently playing. Ante up $<$i BJANTE> and we'll start up a game.
ELSE
MPCALLFUNC DealOut $<$n MYBJVALS>
MPSETVAR $n MYBJVALS $<$n BJLIST>
say $n You draw the $<$n BJCARDNAME> of $<$n BJCARDSUIT>, for a total of $<$n BJTOTAL>.
IF VAR($n BJTOTAL > 21)
MPCALLFUNC GameLoseOver You went bust. Sorry, you lose!
ELSE
IF EVAL('$<$n MYBJVALS>.4' > 0)
MPCALLFUNC GameWinOver Thats five cards without a bust! You win!
ELSE
MPCALLFUNC AddToTotal $<$n DEALERBJVALS>
IF VAR($n BJTOTAL < 17)
MPCALLFUNC DealOut $<$n DEALERBJVALS>
MPSETVAR $n DEALERBJVALS $<$n BJLIST>
say $n The dealer draws the $<$n BJCARDNAME> of $<$n BJCARDSUIT>, for a total of $<$n BJTOTAL>.
IF VAR($n BJTOTAL > 21)
MPCALLFUNC GameWinOver The house goes bust. You win!
ELSE
IF EVAL('$<$n DEALERBJVALS>.4' > 0)
MPCALLFUNC GameLoseOver The house drew five cards without a bust. You lose.
ELSE
say $n Would you like to 'HIT' or 'STAY'?
ENDIF
ENDIF
ELSE
say $n Would you like to 'HIT' or 'STAY'?
ENDIF
ENDIF
ENDIF
ENDIF
~
FUNCTION_PROG DoStay
MPCALLFUNC AddToTotal $<$n MYBJVALS>
MPSETVAR $n MYBJTOTAL $<$n BJTOTAL>
MPCALLFUNC AddToTotal $<$n DEALERBJVALS>
IF EVAL('$<$n BJTOTAL>' > '$<$n MYBJTOTAL>')
MPCALLFUNC GameLoseOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. You lose.
ELSE
IF EVAL('$<$n BJTOTAL>' >= '17') AND EVAL('$<$n BJTOTAL>' < '$<$n MYBJTOTAL>')
MPCALLFUNC GameWinOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. The dealer may not draw again. You win.
ELSE
IF EVAL('$<$n BJTOTAL>' == '$<$n MYBJTOTAL>') AND VAR($n BJTOTAL >= 17)
MPCALLFUNC GameTieOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. Tie goes to the dealer. You lose.
ELSE
MPCALLFUNC DealOut $<$n DEALERBJVALS>
MPSETVAR $n DEALERBJVALS $<$n BJLIST>
say $n The dealer draws the $<$n BJCARDNAME> of $<$n BJCARDSUIT>, for a total of $<$n BJTOTAL>.
IF VAR($n BJTOTAL > 21)
MPCALLFUNC GameWinOver The house busts. You win!
ELSE
IF EVAL('$<$n DEALERBJVALS>.4' > 0)
MPCALLFUNC GameLoseOver The house drew five cards without a bust. You lose.
ELSE
IF VAR($n BJTOTAL > '$<$n MYBJTOTAL>')
MPCALLFUNC GameLoseOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. You lose.
ELSE
IF VAR($n BJTOTAL == '$<$n MYBJTOTAL>')
MPCALLFUNC GameTieOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. Tie goes to the dealer. You lose.
ELSE
IF VAR($n BJTOTAL < 17)
MPCALLFUNC DoStay
ELSE
MPCALLFUNC GameWinOver The house has $<$n BJTOTAL> to your $<$n MYBJTOTAL>. The dealer may not draw again. You win.
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
~
SPEECH_PROG stay stand
IF VAR($n MYBJVALS == '')
say "$n" You are not currently playing. Ante up $<$i BJANTE> and we'll start up a game.
ELSE
MPCALLFUNC DoStay
ENDIF
~
SPEECH_PROG round? round
IF VAR($n MYBJVALS == '')
say "$n" You are not currently playing. Ante up $<$i BJANTE> and we'll start up a game.
ELSE
IF EVAL('$<$n MYBJVALS>.5' > 0)
say "$n" You are in round 5.
ELSE
IF EVAL('$<$n MYBJVALS>.4' > 0)
say "$n" You are in round 4.
ELSE
IF EVAL('$<$n MYBJVALS>.3' > 0)
say "$n" You are in round 3.
ELSE
IF EVAL('$<$n MYBJVALS>.2' > 0)
say "$n" You are in round 2.
ELSE
say "$n" You are playing, I think.
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
~
SPEECH_PROG rules rule
say "$n" This is blackjack. You know, twenty-one? The card game?
~
SPEECH_PROG ante
say "$n" My ante is $<$i BJANTE>.
~
SPEECH_PROG cheat cheater cheating
say "$n" I do have to use a separate deck for each player, if that's what you mean. Otherwise, I have no idea what you're talking about.
innocent
~
# pretty please leave this
SPEECH_PROG wrote credit design credits author
say "$n" I was written by Bo Zimmerman, inspired by code from Jeremy Vyska of False Realities MUD
~