home » builders » builder's lessons » gambling progs
Gambling programs
Gambling programs can get very complex. It is something that in general only an experienced builder comfortable with mob programs can do. The following program was written by Dalvyn, whom I would consider our most savvy area coder. As you can see its quite a complex prog.
#15906
gamemaster master~
{70}a gamemaster~
{70}A gamemaster, clad in a silvery robe, stands here.~
This aged human seems to enjoy his work in the Gamblin Hall very
much. He is clad in a silvery robe decorated with a silver coin,
the symbol of Tymora.
~
U 35 CLASS_FIGHTERS RACE_HUMAN SEX_MALE POS_STANDING DEITY_TYMORA
ACT_SENTINEL|ACT_CITIZEN
0
ARMOR_TYPE_CLOTH MATERIAL_CLOTH
d8+2 650
13 13 13 18 13 13 13
0 0 0 0 0
LANG_COMMON
LANG_COMMON
0 0 0
>time_prog 5~
wake
mpwalkto 15921
~
>time_prog 23~
yawn
say Enough for today. I need some rest.
mpwalkto 15927
~
>arrival_prog 15927~
yawn
sleep
~
>greet_prog 100~
mpmset $n quest 20 9 0
mpmset $n quest 30 1 0
mpmset $n questr 8200 4 1 0
sayto $n If you want to play, you have found the right place!
sayto $n Read the rules on this plaque
sayto $n and give me a token, then we will start.
mpecho The gamemaster points to the plaque on the wall.
~
>give_prog 15900~
if quest(20,3,$n) == 0
mpjunk all
mpmset $n quest 20 3 1
sayto $n Very well... we will play for a copper token.
sayto $n Throw the dice when you want.
else
sayto $n You have already given me a token
give token $n
endif
~
>give_prog 15901~
if quest(20,3,$n) == 0
mpjunk all
mpmset $n quest 20 3 2
sayto $n Very well... we will play for a silver token.
sayto $n Throw the dice when you want.
else
sayto $n You have already given a token.
give token $n
endif
~
>give_prog 15902~
if quest(20,3,$n) == 0
mpjunk all
mpmset $n quest 20 3 3
sayto $n Very well... we will play for a gold token.
sayto $n Throw the dice when you want.
else
sayto $n You have already given me a token
give token $n
endif
~
>give_prog 15903~
if quest(20,3,$n) == 0
mpjunk all
mpmset $n quest 20 3 4
sayto $n Very well... we will play for a platinum token.
sayto $n Throw the dice when you want.
else
sayto $n You have already given me a token
give token $n
endif
~
>give_prog 15904~
if quest(20,3,$n) == 0
mpjunk all
mpmset $n quest 20 3 5
sayto $n Very well... we will play for a luck token.
sayto $n Throw the dice when you want.
else
sayto $n You have already given me a token
give token $n
endif
~
>intercept_prog throw~
if quest(20,3,$n) > 0
if quest(23,3,$n) == 0
if rand(16)
mpechoat $n You throw the dice and get 1 star.
mpechoaround $n $n throws a dice and gets 1 star.
mpmset $n quest 23 3 1
else
if rand(20)
mpechoat $n You throw the dice and get 2 stars.
mpechoaround $n $n throws a dice and gets 2 stars.
mpmset $n quest 23 3 2
else
if rand(25)
mpechoat $n You throw the dice and get 3 stars.
mpechoaround $n $n throws a dice and gets 3 stars.
mpmset $n quest 23 3 3
else
if rand(33)
mpechoat $n You throw the dice and get 4 stars.
mpechoaround $n $n throws a dice and gets 4 stars.
mpmset $n quest 23 3 4
else
if rand(50)
mpechoat $n You throw the dice and get 5 stars.
mpechoaround $n $n throws a dice and gets 5 stars.
mpmset $n quest 23 3 5
else
mpechoat $n You throw the dice and get 6 stars!
mpechoaround $n $n throws a dice and gets 6 stars!
mpmset $n quest 23 3 6
endif
endif
endif
endif
endif
sayto $n Do you want to keep this result?
sayto $n Or to throw again?
mpmset $n questr 8200 4 1 1
else
sayto $n If you want to throw the dice again, say so.
sayto $n Otherwise, tell me that you want to keep this result.
endif
else
sayto $n You must give me a token first!
endif
~
>speech_prog keep~
if questr(8200,4,1,$n) == 1
if quest(20,3,$n) > 0
if quest(23,3,$n) > 0
mpmset $n questr 8200 4 1 0
sayto $n Alright. My turn to throw the dice now!
if rand(8)
mpecho The gamemaster throws a dice and gets 1 star.
mpmset $n quest 26 3 1
else
if rand(10)
mpecho The gamemaster throws a dice and gets 2 stars.
mpmset $n quest 26 3 2
else
if rand(12)
mpecho The gamemaster throws a dice and gets 3 stars.
mpmset $n quest 26 3 3
else
if rand(20)
mpecho The gamemaster throws a dice and gets 4 stars.
mpmset $n quest 26 3 4
else
if rand(50)
mpecho The gamemaster throws a dice and gets 5 stars.
mpmset $n quest 26 3 5
else
mpecho The gamemaster throws a dice and gets 6 stars!
mpmset $n quest 26 3 6
endif
endif
endif
endif
endif
else
mpechoat $n The gamemaster motions for you to throw the dice.
mpechoaround $n The gamemaster motions for $n to throw the dice.
endif
else
sayto $n You should give me a token first!
endif
endif
~
>speech_prog throw again~
if questr(8200,4,1,$n) == 1
if quest(20,3,$n) > 0
if quest(23,3,$n) > 0
mpmset $n questr 8200 4 1 0
mpechoat $n The gamemaster motions for you to throw the dice again.
mpechoaround $n The gamemaster motions for $n to throw the dice again.
if rand(16)
mpechoat $n You throw the dice and get 1 star.
mpechoaround $n $n throws a dice and gets 1 star.
mpmset $n quest 23 3 1
else
if rand(20)
mpechoat $n You throw the dice and get 2 stars.
mpechoaround $n $n throws a dice and gets 2 stars.
mpmset $n quest 23 3 2
else
if rand(25)
mpechoat $n You throw the dice and get 3 stars.
mpechoaround $n $n throws a dice and gets 3 stars.
mpmset $n quest 23 3 3
else
if rand(33)
mpechoat $n You throw the dice and get 4 stars.
mpechoaround $n $n throws a dice and gets 4 stars.
mpmset $n quest 23 3 4
else
if rand(50)
mpechoat $n You throw the dice and get 5 stars.
mpechoaround $n $n throws a dice and gets 5 stars.
mpmset $n quest 23 3 5
else
mpechoat $n You throw the dice and get 6 stars!
mpechoaround $n $n throws a dice and gets 6 stars!
mpmset $n quest 23 3 6
endif
endif
endif
endif
endif
sayto $n My turn now!
if rand(8)
mpecho The gamemaster throws a dice and gets 1 star.
mpmset $n quest 26 3 1
else
if rand(10)
mpecho The gamemaster throws a dice and gets 2 stars.
mpmset $n quest 26 3 2
else
if rand(12)
mpecho The gamemaster throws a dice and gets 3 stars.
mpmset $n quest 26 3 3
else
if rand(20)
mpecho The gamemaster throws a dice and gets 4 stars.
mpmset $n quest 26 3 4
else
if rand(50)
mpecho The gamemaster throws a dice and gets 5 stars.
mpmset $n quest 26 3 5
else
mpecho The gamemaster throws a dice and gets 6 stars!
mpmset $n quest 26 3 6
endif
endif
endif
endif
endif
else
mpechoat $n The gamemaster motions for you to throw the dice.
mpechoaround $n The gamemaster motions for $n to throw the dice.
endif
else
sayto $n You should give me a token first!
endif
endif
~
>rand_prog 60~
if quest(20,3,$r) > 0
if quest(23,3,$r) > 0
if quest(26,3,$r) > 0
mpjunk all
if quest(20,3,$r) == 1
mpoload 15900
mpoload 15900
else
if quest(20,3,$r) == 2
mpoload 15901
mpoload 15901
else
if quest(20,3,$r) == 3
mpoload 15902
mpoload 15902
else
if quest(20,3,$r) == 4
mpoload 15903
mpoload 15903
else
mpoload 15904
mpoload 15904
endif
endif
endif
endif
if quest(23,3,$r) == 6
if quest(26,3,$r) == 6
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r You win!
give token $r
give token $r
endif
else
if quest(23,3,$r) == 5
if quest(26,3,$r) == 6
sayto $r I win... and you lose!
else
if quest(26,3,$r) == 5
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r You win!
give token $r
give token $r
endif
endif
else
if quest(23,3,$r) == 4
if quest(26,3,$r) > 4
sayto $r I win... and you lose!
else
if quest(26,3,$r) == 4
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r You win!
give token $r
give token $r
endif
endif
else
if quest(23,3,$r) == 3
if quest(26,3,$r) > 3
sayto $r I win... and you lose!
else
if quest(26,3,$r) == 3
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r You win!
give token $r
give token $r
endif
endif
else
if quest(23,3,$r) == 2
if quest(26,3,$r) > 2
sayto $r I win... and you lose!
else
if quest(26,3,$r) == 2
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r You win!
give token $r
give token $r
endif
endif
else
if quest(26,3,$r) == 1
sayto $r Same results! You get reimbursed.
give token $r
else
sayto $r I win... and you lose!
endif
endif
endif
endif
endif
endif
mpmset $r quest 20 9 0
mpmset $r quest 30 1 0
mpjunk all
endif
endif
endif
~
>fight_prog 20~
yell Help! I am being attacked by $N
mpat 4500 yell Help! I am being attacked by $N in Fortune Hall.
if quest(0,3,self) < 5
mpmadd self quest 0 3 1
mpecho A guard comes to the help of $I
if rand(20)
mpmload 4500
mpforce m4500 mpkill $n
else
mpmload 15911
mpforce m15911 mpkill $n
endif
endif
~
>death_prog 100~
mplog WITNESS: (on $v) $I has been killed by $n in Fortune Hall.
mpmset self quest 0 3 0
~
|
The first give_prog are to trigger the game, when the game master is given a token (representing the amount that he is willing to bet). The game consists of two contestants rolling 1d6. The player has the choice to reroll once if he wishes (in which case he's forced to keep the second result). It uses qbits on the player to indicate the state: before the first roll, after the first roll, after the second roll, and so on. It uses qbits to store the result of the both the player's and the game master's dice.
20,3 designates the amount that was bet (actually, the type of token). 0 means that no token has been given. 23,3 indicates the result of the player's dice (0 = not thrown, 1-6 = result). 26,3 indicates the result of the game master's dice (0 = not thrown, 1-6 = result)
The program uses 3 intercept progs: throw (for rolling the dice the first time), keep (if the player wants to keep the first result, indicating that the game master must roll his dice), and again (if the player wants to reroll). These intercept prog only determine the results randomly.
Then the rand prog is triggered after some time, and the result of the game is shown (either the player get new tokens if he won, or the qbits are reset if he lost). The other progs are just greet prog, and fight prog with no relation to the actual gambling game.