X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=spades.awk;h=6cadbb3b4ffb0a3bd0462b0e76e91904a7fb49e8;hb=e127016c4d99ec40d93eeb474b88626f1813b527;hp=fee89509557a8747f35e33d756cc4a28c704cf95;hpb=a9f8b9ba4abf65d18387f8bfc73b7f4c273cb9df;p=~andy%2Frhawk diff --git a/spades.awk b/spades.awk index fee8950..6cadbb3 100644 --- a/spades.awk +++ b/spades.awk @@ -33,6 +33,7 @@ function sp_reset(type) if (type >= 1) { sp_state = "bid" # {new,join,bid,pass,play} sp_broken = 0 # Whether spades are broken + sp_last = "" # The result of the last hand delete sp_hands # [p] Each players cards delete sp_looked # [i] Whether a player has looked a their cards delete sp_bids # [i] Each players bid @@ -83,6 +84,7 @@ function sp_save(file, game) # Per round game["state"] = sp_state; game["broken"] = sp_broken; + game["last"] = sp_last; json_copy(game, "looked", sp_looked); json_copy(game, "bids", sp_bids); json_copy(game, "nil", sp_nil); @@ -123,6 +125,7 @@ function sp_load(file, game) # Per round sp_state = game["state"]; sp_broken = game["broken"]; + sp_last = game["last"]; sp_acopy(sp_looked, game["looked"]); sp_acopy(sp_bids, game["bids"]); sp_acopy(sp_nil, game["nil"]); @@ -310,7 +313,7 @@ function sp_score( bids, times, tricks) else if (sp_scores[1] > sp_scores[0]) say(sp_team(1) " lead " sp_scores[1] " to " sp_scores[0] " of " sp_playto) else - say("tied at " sp_scores[0]) + say("tied at " sp_scores[0] " of " " of " sp_playto) } function sp_play(card, winner, pi) @@ -334,6 +337,7 @@ function sp_play(card, winner, pi) sp_tricks[pi]++ say(sp_pile[winner] " wins with " sp_pretty(winner, FROM) \ " (" sp_pretty(sp_piles, FROM) ")") + sp_last = sp_pile[winner] " took " sp_piles sp_next(sp_pile[winner]) sp_reset(0) } @@ -428,6 +432,7 @@ AUTH == OWNER && say(".bid [n] -- bid for tricks") say(".pass [card] -- pass a card to your partner") say(".play [card] -- play a card") + say(".last -- show who took the previous trick") say(".turn -- check whose turn it is") say(".bids -- check what everyone bid") say(".tricks -- check how many trick have been taken") @@ -502,7 +507,7 @@ match($0, /^\.newgame ?([1-9][0-9]*) *- *([1-9][0-9]*)$/, _arr) { } } -/^\.join$/ { +/^\.join/ { if (sp_state == "new") { reply("There is no game in progress") } @@ -709,9 +714,6 @@ sp_state == "play" && if (!(_card in sp_deck)) { reply("Invalid card") } - else if (!(_card in sp_hands[sp_from])) { - reply("You do not have that card") - } else if (sp_suit && _card !~ sp_suit && sp_hasa(sp_from, sp_suit)) { reply("You must follow suit (" sp_suit ")") } @@ -721,6 +723,9 @@ sp_state == "play" && else if (_card ~ /s/ && length(sp_pile) == 0 && sp_hasa(sp_from, "[^s]$") && !sp_broken) { reply("Spades have not been broken") } + else if (!(_card in sp_hands[sp_from])) { + reply("You do not have that card") + } else { sp_play(_card) if (sp_state == "play") { @@ -735,6 +740,13 @@ sp_state == "play" && } } +/^\.last/ && sp_state == "play" { + if (!sp_last) + say("No tricks have been taken!"); + else + say(sp_pretty(sp_last, FROM)); +} + /^\.bids/ && sp_state == "bid" || /^\.turn/ && sp_state ~ "(bid|pass|play)" { _bids = sp_bidders() @@ -760,8 +772,8 @@ sp_state == "play" && if (/!!/ && (sp_state == "bid" || sp_state == "play")) { if (sp_player in sp_notify) { - if (!_bids) _bids = "none" - if (!_pile) _pile = "none" + _bids = _bids ? _bids : "none" + _pile = _pile ? sp_piles : "none" mail_send(sp_notify[sp_player], \ "It is your " sp_state "!", \ "Bids so far: " _bids "\n" \