(fate_version 1) (require player.fate) (require global.fate) (require cards.fate) (global bool has_played (false)) (global (list card) current_deck) (global (list card) dealer_hand) (global int bet) (global bool has_doubled) (define_sequence play_a_game () (local card new_card) (if (not has_played) (text_effect action_description Sitting yourself at a table, you see someone rushing to set up the cards and manage the game. ) (set! has_played (true)) ) (if (= (var player.money) 0) I am sorry, (var player.name), but you appear to have ran out of coins. (done!) ) (prompt_integer! (ptr bet) 1 player.money How much would you like to bet? ) (text_effect action_description The dealer shuffles the cards and starts dealing. ) (newline) (set! current_deck (list:shuffle deck_template)) (list:pop_left! current_deck new_card) (list:add! new_card player.hand) (text_effect action_description You have been dealt the (var new_card.name). (newline) ) (list:pop_left! current_deck new_card) (list:add! new_card dealer_hand) (text_effect action_description The dealer has drawn the (var new_card.name). (newline) ) (list:pop_left! current_deck new_card) (list:add! new_card player.hand) (text_effect action_description You have been dealt the (var new_card.name). (newline) ) (newline) (list:pop_left! current_deck new_card) (list:add! new_card dealer_hand) (text_effect action_description The dealer has drawn a card, face down. (newline) ) (visit! initial_draw) (list:clear! dealer_hand player.hand) (newline) Interesting. Would you like to go again? (player_choice! (option ( Yes, please. ) Very well. (newline) (jump_to! play_a_game) ) (option ( No, thank you. ) It was a pleasure to play with you. Farewell. (newline) (done!) ) ) ) (define_sequence initial_draw () (local int dealer_score) (local int player_score) (visit! compute_score (ptr dealer_hand) (ptr dealer_score)) (visit! compute_score (ptr player.hand) (ptr player_score)) (if (= (var dealer_score) 21) (text_effect action_description The dealer reveals their full hand: ) (foreach dealer_hand card (text_effect action_description (newline) * The (var card.name), worth (if_else (= (var card.number) 1) (text 1 or 11 points.) (text (var card.score) points.) ) ) ) (newline) (ifelse (= (var player_score) 21) ( (text_effect action_description The dealer looks very surprised. ) (newline) Double Blackjack! A tie, then. (done!) ) ( (text_effect action_description The dealer looks surprised, but happy. ) (newline) Blackjack! Looks like I win, this time. (visit! money_loss (var bet)) (done!) ) ) ) (if (= (var player_score) 21) (text_effect action_description The dealer looks surprised. ) (newline) Blackjack! Looks like you win, this time. (newline) (visit! money_acquisition (cast int (* (cast float (var bet)) 1.5))) (done!) ) (player_choice! (option ( Another card, please. ) (set! has_doubled (false)) (jump_to! acquire_card) ) (option ( I will stand. ) (jump_to! resolve_dealer) ) (if (and (>= player_score 9) (<= player_score 11)) (option ( Double my bet, I'll only take one card. ) (set! bet (* bet 2)) (set! has_doubled (true)) (jump_to! acquire_card) ) ) ) ) (define_sequence acquire_card () (local card new_card) (local int player_score) (list:pop_left! current_deck new_card) (list:add! (var new_card) player.hand) (visit! compute_score (ptr player.hand) (ptr player_score)) (text_effect action_description You have been dealt the (var new_card.name). (newline) Your hand is currently: ) (foreach player.hand card (text_effect action_description (newline) * The (var card.name), worth (if_else (= (var card.number) 1) (text 1 or 11 points.) (text (var card.score) points.) ) ) ) (newline) (if (> player_score 21) (text_effect action_description The dealer looks disappointed. ) (newline) A bust! What a shame... (newline) (visit! money_loss (var bet)) (done!) ) (if (var has_doubled) (jump_to! resolve_dealer) ) (player_choice! (option ( Another card, please. ) (jump_to! acquire_card) ) (option ( This will do. I stand. ) (jump_to! resolve_dealer) ) ) ) (define_sequence resolve_dealer () (local int dealer_score) (local int player_score) (visit! compute_score (ptr dealer_hand) (ptr dealer_score)) Very well. I shall now play my turn. (newline) (text_effect action_description My current hand is: (newline) ) (foreach dealer_hand card (text_effect action_description (newline) * The (var card.name), worth (if_else (= (var card.number) 1) (text 1 or 11 points. ) (text (var card.score) points. ) ) ) ) (newline) (while (< dealer_score 17) (local card new_card) (list:pop_left! current_deck new_card) (list:add! (var new_card) dealer_hand) (text_effect action_description The dealer has drawn the (var new_card.name). (newline) ) (visit! compute_score (ptr dealer_hand) (ptr dealer_score)) ) (if (> dealer_score 21) (text_effect action_description The dealer looks disappointed. ) (newline) Ah. It would appear I have gone above the limit. (newline) (visit! money_acquisition (var bet)) (done!) ) (visit! compute_score (ptr player.hand) (ptr player_score)) (var player_score) for you, against (var dealer_score) for me. (newline) (if (= (var player_score) (var dealer_score)) A tie, then. (done!) ) (if_else (> player_score dealer_score) ( Congratulation, you won. (newline) (visit! money_acquisition (var bet)) (done!) ) ( It would appear I have won this game. (newline) (visit! money_loss (var bet)) (done!) ) ) )