if (type >= 1) {
sp_state = "bid" # {new,join,bid,pass,play}
sp_broken = 0 # Whether spades are broken
+ 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
delete sp_nil # [i] Nil multiplier 0=regular, 1=nil, 2=blind
sp_turn = 0 # Index of who's turn it is
sp_player = "" # Who's turn it is
sp_limit = 10 # Bag out limit / nil bonus
- delete sp_hands # [p] Each players cards
delete sp_players # [p] Player names players["name"] -> i
delete sp_auths # [c] Player auth names auths["auth"] -> "name"
delete sp_share # [c] Player teammates share["friend"] -> "name"
function sp_acopy(dst, src, key)
{
- if (isarray(src))
+ if (isarray(src)) {
+ delete(dst)
for (key in src)
json_copy(dst, key, src[key])
+ }
}
function sp_save(file, game)
sp_nil[who] == 2 ? "blind" : "n/a"
}
+function sp_passer(who)
+{
+ return sp_nil[(who+0)%4] == 2 || sp_nil[(who+1)%4] != 0 ||
+ sp_nil[(who+2)%4] == 2 || sp_nil[(who+3)%4] != 0
+}
+
function sp_bidders( i, turn, bid, bids)
{
for (i = 0; i < 4; i++) {
sp_scores[i%2] += sp_limit * 10 * sp_nil[i] * \
(sp_tricks[i] == 0 ? 1 : -1)
}
+ if (sp_scores[0] > sp_scores[1])
+ say(sp_team(0) " lead " sp_scores[0] " to " sp_scores[1])
+ else if (sp_scores[1] > sp_scores[0])
+ say(sp_team(1) " lead " sp_scores[1] " to " sp_scores[0])
+ else
+ say("tied at " sp_scores[0])
}
function sp_play(card, winner, pi)
sp_state ~ "(bid|pass|play)" &&
/^\.show/ {
+ delete _lines
for (_i in sp_share)
- say(_i " can play for " sp_share[_i]);
+ _lines[sp_share[_i]] = _lines[sp_share[_i]] " " _i
+ for (_i in _lines)
+ say(_i " allowed:" _lines[_i])
}
!sp_valid &&
say(p, "You have: " sp_hand(p, p))
sp_state = "play"
for (i=0; i<2; i++) {
- if (sp_nil[(i+0)%4] == 2 || sp_nil[(i+2)%4] == 2 ||
- sp_nil[(i+1)%4] != 0 || sp_nil[(i+3)%4] != 0) {
+ if (sp_passer(i)) {
say(sp_team(i) ": select a card to pass " \
"(/msg " NICK " .pass <card>)")
sp_state = "pass"
if (!(sp_from in sp_players)) {
say(".slap " FROM ", you are not playing.")
}
- else if (sp_nil[_team] == 1 && sp_nil[_team+2] == 1) {
+ else if (!sp_passer(_team)) {
reply("Your team did not go blind")
}
else if (sp_pass[sp_players[sp_from]]) {
}
# check for end of passing
- if (((sp_nil[0] == 1 && sp_nil[2] == 1) || (sp_pass[0] && sp_pass[2])) &&
- ((sp_nil[1] == 1 && sp_nil[3] == 1) || (sp_pass[1] && sp_pass[3]))) {
+ if ((!sp_passer(0) || (sp_pass[0] && sp_pass[2])) &&
+ (!sp_passer(1) || (sp_pass[1] && sp_pass[3]))) {
for (i in sp_pass) {
_partner = (i+2)%4
_card = sp_pass[i]
if (sp_state == "play" && _pile)
say("It is " sp_player "'s turn! (" _pile ")")
for (_i=0; sp_state == "pass" && _i<4; _i++)
- if ((sp_nil[_i%2+0]!=1 || sp_nil[_i%2+2]!=1) && !sp_pass[_i])
+ if (sp_passer(_i) && !sp_pass[_i])
say("Waiting for " sp_order[_i] " to pass a card!")
}