-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X card_draw(i,13,dummyd`5Bi`5D); X evaluate_dl_hand(i) Xend; X`20 X`20 X`20 Xprocedure get_player_card(i : integer); X`20 Xbegin X playerh`5Bi`5D := randint(13)+1; X case (playerh`5Bi`5D) of X 2 : dummy`5BI`5D := '2'; X 3 : dummy`5BI`5D := '3'; X 4 : dummy`5BI`5D := '4'; X 5 : dummy`5BI`5D := '5'; X 6 : dummy`5BI`5D := '6'; X 7 : dummy`5BI`5D := '7'; X 8 : dummy`5BI`5D := '8'; X 9 : dummy`5BI`5D := '9'; X 10 : dummy`5BI`5D := '10'; X 11 : dummy`5BI`5D := 'J'; X 12 : dummy`5BI`5D := 'Q'; X 13 : dummy`5BI`5D := 'K'; X 14 : dummy`5BI`5D := 'A'; X end; X card_draw(i,6,dummy`5Bi`5D); X evaluate_pl_hand; Xend; X`20 X`20 X`20 Xprocedure get_dealer_hand; X`20 Xbegin X get_dealer_card(1); X get_dealer_card(2); Xend; X`20 X`20 Xprocedure get_player_hand; X`20 Xbegin X get_player_card(1); X py_index := 2; X get_player_card(2); Xend; X`20 X`20 Xprocedure get_winning; X`20 Xvar X i : integer; X`20 Xbegin X if (deal_bust) then X begin X gld := gld + 2*bet; X case (randint(4)) of X 1,2,3 : msg_print('The dealer busts, you win.'); X 4 : msg_print('The dealer busts.'); X end X end X else X begin X if ((vald > valp) and (vald <> valp)) then X begin X case (randint(5)) of X 1,2,3 : msg_print('You lose.'); X 4 : msg_print('Now you know why gambling is illegal.'); X 5 : msg_print('If you had just taken one more card...'); X end; X end; X if vald = valp then begin X msg_print('You push'); X gld := gld + bet; X end; X if valp > vald then begin X case (randint(4)) of X 1,2,3 : msg_print('You win.'); X 4 : msg_print('You''re not card-counting are you?'); X end; X gld := gld + bet*2; X end; X end; Xend; X`20 X`20 Xprocedure play_dealer_hand; X var X i : integer; X stay_flag : boolean; X`20 Xbegin Xstay_flag := false; Xwin_draw := true; Xcard_draw(1,13,dummyd`5B1`5D); X i := 3; X if ((vald = 17) and (dl_ace_flag)) or (vald < 17) then X begin X repeat X get_dealer_card(i); X i := i + 1; X if vald > 16 then stay_flag := true; X if (vald = 17) and (dl_ace_flag) then stay_flag := false; X if i > 9 then stay_flag := true; X until (stay_flag); X end; X get_winning; Xend; X`20 X`20 X`20 Xprocedure double; X`20 Xbegin Xbet := bet*2; Xpy_index := py_index + 1; Xget_player_card(py_index); Xdouble_flag := true; Xend; X`20 X`20 X`20 Xprocedure split; X`20 Xbegin X playerh`5B6`5D := playerh`5B1`5D; X dummy`5B6`5D:= dummy`5B1`5D; X card_draw(6,6,dummy`5B6`5D); X get_player_card(2); X get_player_card(7); X split_flag := true; Xend; X`20 X`20 X`20 X`20 Xprocedure get_game_command; X var X command : char; X com_val : integer; X n : integer; X`20 Xbegin X if get_com( '', command) then X begin X com_val := ord(command); X case com_val of X 104 : begin (* hit *) X py_index := py_index + 1; X get_player_card(py_index); X end; X 115 : pl_stay_flag := true; (* stay *) X 18 : re_draw; X 118 : begin X display_rules; X re_draw; X end; X 100 : begin (* double *) X if (gld >= bet) then begin X if (py_index = 2) or (py_index = 7) then begin X gld := gld - bet; X display_gold; X double; X end; X end; X end; X 47 : begin (* split *) X if not(split_flag) and (gld >= bet) and X (py_index = 2) and (playerh`5B1`5D = playerh`5B2`5D) then V begin X gld := gld - bet; X display_gold; X split; X msg_print('First play your hand on the left.'); X end; X end; X otherwise prt('Invalid Command.',1,1) X end; X end; Xend; X`20 X`20 Xprocedure play_hand; X var X num,i : integer; X`20 Xbegin X num := 1; X if (split_flag) then X begin X msg_print('As for your second hand...'); X num := 2; X end; Xfor i := 1 to num do X begin X if (i = 2) then msg_print ('As for your first hand...'); X if (i = 2) and (double_flag) then bet := bet div 2; X if (i = 2) and (double_flag_save) then bet := bet*2; X if not(card5 or bust_flag or blackjack) then play_dealer_hand X else begin X if card5 and not(bust_flag) then begin X gld := gld + 2*bet; X msg_print('Five cards, you win.'); X end; X if bust_flag then begin X case (randint(3)) of X 1,3 : msg_print('You bust.'); X 2 : msg_print('You should have stood.'); X end X end; X if blackjack then begin X msg_print('Blackjack!'); X win_draw := true; X card_draw(1,13,dummyd`5B1`5D); X if vald = 21 then begin X msg_print('The dealer also has 21 ... You push.'); X gld := gld + bet; X end X else gld := gld + 2*bet + bet div 2; X end; X end; X valp := save; X bust_flag := bust_save; X blackjack := blackjack_save; X card5 := card5_save; X display_gold; Xend; X clear(21,1); X bet := 0; Xend; X`20 X`20 Xprocedure play_bj; X var X exit_flag : boolean; X`20 Xbegin X exit_flag := false; X clear(1,1); X display_bj_game; X initialize_hand; X get_dealer_hand; X get_player_hand; X repeat X if not((valp=21) and ((py_index=2)or(py_index=7))) then get_game_command V; X check_exit(exit_flag); X until exit_flag; X play_hand; Xend; X`20 X`20 X`20 Xprocedure get_bj_bet; X var X comment : vtype; X num : integer; X exit_flag : boolean; X begin X exit_flag := false; X comment := 'How much would you like to bet(50 to 1000 gp)? '; X repeat X if get_response(comment, num) then X begin X bet := num; X if (bet>49) and (bet<1001) then exit_flag := true X else prt('Improper value.',1,1) X end X else X begin X exit_flag := true; X bet := 0 X end; X until (exit_flag); X if bet > gld then X begin X prt('You have not the gold!',1,1); X bet := 0; X end; X gld := gld - bet; X display_gold Xend; X`20 X`20 X`20 Xprocedure blackjack_commands; X var X command : char; X exit_flag : boolean; X n : integer; X`20 Xbegin X bet := 0; X win_draw := false; X exit_flag := false; X repeat X if get_com('', command) then X begin X case (ord(command)) of X 112 : begin X get_bj_bet; X if bet >0 then X begin X play_bj; X display_bj; X end X end; X 118 : begin X display_rules; X re_draw; X end; X 18 : begin X clear(1,1); X re_draw; X end; X otherwise prt('Invalid Command.',1,1); X end X end X else exit_flag := true; X check_casino_kickout; X until (exit_flag) Xend; X`20 X`20 Xprocedure game_blackjack; X`20 Xbegin X clear(1,1); X display_bj; X initialize_hand; X opening_screen; X prt('The dealer awaits your bet.',1,1); X blackjack_commands Xend; X`20 X`20 X`20 $ CALL UNPACK BJ.INC;1 307279404 $ create 'f' X X`5Bpsect(misc2$code)`5D procedure blow; X var X`09`09i1`09`09`09`09: unsigned; X`09`09i3,i4,chance,i5`09`09`09: integer; X`09`09i2,item_ptr`09`09`09: treas_ptr; X`09`09dir`09`09`09`09: char; X`09`09dur`09`09`09`09: integer; X`09`09dumy,y_dumy,x_dumy`09`09: integer; X`09`09out_val`09`09`09`09: vtype; X`09`09redraw,ident`09`09`09: boolean; X`09`09tstat`09`09`09`09: stat_set; X`09`09loss`09`09`09`09: integer; X begin X`09reset_flag := true; X`09if (inven_ctr > 0) then X`09 begin X`09 if (find_range(`5Bmisc_usable,horn,chime,valuable_gems`5D,false,i2,i3 V)) then X`09 begin X`09`09redraw := false; X`09`09if (get_item(item_ptr,'Use which item?',redraw,i3,trash_char,false)) t Vhen X`09`09 with item_ptr`5E.data do X`09`09 begin X`09`09 if (redraw) then draw_cave; X`09`09`09reset_flag := false; X`09`09`09with py.misc do X`09`09`09 chance := save + lev + bard_adj - level - 5; X`09`09`09if (((py.flags.confused + py.flags.afraid) > 0) and X`09`09`09 ((tval = chime) or (tval = horn))) then X`09`09`09 msg_print('you can not use the instrument...') X`09`09`09else if (p1 > 0) then X`09`09`09begin X`09`09`09if (chance < 0) then chance := 0; X`09`09`09if (randint(chance) < use_device) and X`09`09`09 ((tval <> misc_usable) and (subval <> 24)) then X`09`09`09 msg_print('You failed to use the item properly.') X`09`09`09else`20 X`09`09`09 begin X`09`09`09 i1 := flags; X`09`09`09 ident := false; X`09`09`09 p1 := p1 - 1; X`09`09`09 while (i1 > 0) do X`09`09`09 begin X`09`09`09`09i5 := bit_pos(i1); X`09if ((tval = chime) or (tval=horn)) then X`09begin X`09`7B Chimes...`09`09`09`09 `7D X`09case (i5) of X`7B Chime of Light `7D X`09 1 :`09ident := light_area(char_row,char_col); X`7B Chime of Detect Doors/Stairs `7D X`09 2 :`09ident := detect_sdoor; X`7B Chime of Detect Traps `7D X`09 3 :`09ident := detect_trap; X`7B Chime of Teleportation `7D X`09 4 :`09begin X`09`09 teleport(100); X`09`09 ident := true; X`09`09end; X`7B Chime of Thunderblasts `7D X`09 5 :`09ident := earthquake; X`7B Chime of Summon Monster `7D X`09 6 :`09begin X`09`09 for i3 := 1 to randint(4) do X`09`09 begin X`09`09 y := char_row; X`09`09 x := char_col; X`09`09 if (cave`5By,x`5D.fval in water_set) then X`09`09`09summon_water_monster(y,x,false) X`09`09 else X`09`09`09summon_land_monster(y,x,false); X`09`09 end; X`09`09 ident := true; X`09`09end; X`7B Chime of Disarming `7D X`09 7 :`09begin X`09`09 ident := true; X`09`09 for i3 := 1 to 9 do X`09`09 if (i3 <>5) then X`09`09 disarm_all(i3,char_row,char_col); X`09`09end; X`7B Chime of Aggravation `7D X`09 8 :`09ident := aggravate_monster(20); X`7B Chime of Slow Monster `7D X`09 9 :`09ident := zap_area(0,-1,c_speed); X`7B Chime of Sooth Monster `7D X`09 10 :`09ident := zap_area(0,0,c_sleep); X`7B Chime of Cure Light Wounds `7D X`09 11 :`09ident := hp_player(randint(8),'a chime.'); X`7B Chime of Changing `7D X`09 12 :`09ident := mass_poly; X`7B Chime of Remove Curse `7D X`09 13 :`09if (remove_curse) then X`09`09 begin X`09`09 msg_print('Your equipment glows blue for a moment...'); X`09`09 ident := true; X`09`09 end; X`7B Chime of Curing `7D X`09 14 :`09with py.flags do X`09`09 ident := cure_me(blind) or cure_me(poisoned) X`09`09`09or cure_me(confused); X`7B Chime of Dispell Evil `7D X`09 15 :`09ident := zap_area(%X'0004',60,c_hp); X`7B Chime of Darkness `7D X`09 16 :`09ident := unlight_area(char_row,char_col); X`7B Horns...`09`09`09`09`09`09`09 `7D X`7B Horn of Bubbles `7D X`09 17 :`09begin X`09`09 msg_print('Bubbles stream forth and surround you!'); X`09`09 py.flags.blind := py.flags.blind + (randint(20) +5); X`09`09 ident := unlight_area(char_row,char_col); X`09`09end; X`7B Horn of Calling `7D X`09 18 :`09begin X`09`09 for i3 := 1 to randint(4) do X`09`09 begin X`09`09 y := char_row; X`09`09 x := char_col; X`09`09 if (cave`5By,x`5D.fval in water_set) then X`09`09`09summon_water_monster(y,x,false) X`09`09 else X`09`09`09summon_land_monster(y,x,false); X`09`09 end; X`09`09 ident := true; X`09`09end; X`7B Horn of Soft Sounds `7D X`09 19 :`09ident := sleep_monsters1(char_row,char_col); X`7B Horn of *Blasting* `7D X`09 20 :`09ident := destroy_area(char_row,char_col); X`7B Horn of Cold `7D X`09 21 :`09begin X`09`09 msg_print('A wave of cold pours forth...'); X`09`09 ident := zap_area(%X'0010',60,c_hp); X`09`09end; X`7B Horn of Heat `7D X`09 22 :`09begin X`09`09 msg_print('A blast of warm air pours forth...'); X`09`09 ident := zap_area(%X'0020',60,c_hp); X`09`09end; X`7B Horn of Gas `7D X`09 23 :`09begin X`09`09 msg_print('Gas streams out ...!'); X`09`09 ident := zap_area(%X'0040',60,c_hp); X`09`09 py.flags.poisoned := py.flags.poisoned + randint(10) X`09`09end; X`7B Horn of Recall `7D X`09 24 :`09begin X`09`09 py.flags.word_recall := (randint(20) + 20); X`09`09 ident:= true; X`09`09end; X`7B Horn of *Chaos* `7D X`09 25 :`09begin X`09`09 ident := earthquake; X`09`09 ident := unlight_area(char_row,char_col); X`09`09 for i3 := 1 to randint(4) do X`09`09 begin X`09`09 y := char_row; X`09`09 x := char_col; X`09`09 if (cave`5By,x`5D.fval in water_set) then X`09`09`09summon_water_monster(y,x,false) X`09`09 else X`09`09`09summon_land_monster(y,x,false); X`09`09 end; X`09`09end; X`7B Horn of Glue `7D X`09 26 :`09begin X`09`09 msg_print('glue pours out of the horn!'); X`09`09 msg_print('all of your equipment is stuck!'); X`09`09 for i3 := Equipment_primary to Equipment_cloak do X`09`09 with equipment`5Bi3`5D do X`09`09 flags := uor(flags,%X'80000000'); X`09`09 with equipment`5BEquipment_secondary`5D do X`09`09 flags := uor(flags,%X'80000000'); X`09`09 ident := true; X`09`09end; X`7B Horn of Valhalla `7D X`09 27 :`09begin X`09`09 msg_print('The Voice of Odin (oh brother...) smites evil!'); X`09`09 ident := zap_area(%X'0004',70,c_hp); +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-