function sp_reset(type)
{
# Per message
- if (type >= 0) {
+ if (type < 0) {
sp_from = "" # The speakers player name
sp_valid = "" # It is the speaker turn
}
sp_limit = 10 # Bag out limit
delete sp_hands # [p] Each players cards
delete sp_players # [p] Player names players["name"] -> i
- delete sp_cloaks # [c] Player cloaks cloaks["cloak"] -> "name"
+ delete sp_auths # [c] Player auth names auths["auth"] -> "name"
delete sp_order # [i] Player order order[i] -> "name"
delete sp_scores # [i] Teams score
}
game["limit"] = sp_limit;
json_copy(game, "hands", sp_hands);
json_copy(game, "players", sp_players);
- json_copy(game, "cloaks", sp_cloaks);
+ json_copy(game, "auths", sp_auths);
json_copy(game, "order", sp_order);
json_copy(game, "scores", sp_scores);
function sp_load(file, game)
{
# Load
- json_load(file, game);
+ if (!json_load(file, game))
+ return
# Per hand
sp_suit = game["suit"];
sp_limit = game["limit"];
sp_acopy(sp_hands, game["hands"]);
sp_acopy(sp_players, game["players"]);
- sp_acopy(sp_cloaks, game["cloaks"]);
+ sp_acopy(sp_auths, game["auths"]);
sp_acopy(sp_order, game["order"]);
sp_acopy(sp_scores, game["scores"]);
}
say("Bidding starts with " sp_player "!")
}
-function sp_hand(who, sort, str)
+function sp_hand(to, who, sort, str)
{
asorti(sp_hands[who], sort, "sp_csort")
for (i=0; i<length(sort); i++)
str = str "" sprintf("%4s", sort[i])
gsub(/^ +| +$/, "", str)
- return sp_pretty(str, who)
+ return sp_pretty(str, to)
}
function sp_hasa(who, expr)
}
// {
- sp_from = AUTH in sp_cloaks ? sp_cloaks[AUTH] : FROM
+ sp_from = AUTH in sp_auths ? sp_auths[AUTH] : FROM
sp_valid = sp_from && sp_from == sp_player
}
say("Spades! " sp_pretty("As,Ah,Ad,Ac", FROM))
}
-FROM == OWNER &&
+AUTH == OWNER &&
/^\.savegame/ {
sp_save("var/sp_save.json");
say("Game saved.")
}
-FROM == OWNER &&
+AUTH == OWNER &&
/^\.loadgame/ {
sp_load("var/sp_save.json");
say("Game loaded.")
}
# Debugging
-FROM == OWNER &&
+AUTH == OWNER &&
/^\.deal (\w+) (.*)/ {
delete sp_hands[$2]
for (i=3; i<=NF; i++)
}
}
-(sp_from == sp_owner || FROM == OWNER) &&
+(sp_from == sp_owner || AUTH == OWNER) &&
/^\.endgame$/ {
if (sp_state == "new") {
reply("There is no game in progress.")
i = sp_next()
sp_players[FROM] = i
if (AUTH)
- sp_cloaks[AUTH] = FROM
+ sp_auths[AUTH] = FROM
sp_order[i] = FROM
say(FROM " joins the game!")
}
say("Bidding goes to " sp_player "!")
} else {
for (p in sp_players)
- say(p, "You have: " sp_hand(p))
+ say(p, "You have: " sp_hand(p, p))
sp_state = "play"
for (i=0; i<2; i++) {
if (sp_nil[i] == 2 || sp_nil[i+2] == 2) {
}
say(sp_channel, "Cards have been passed, play starts with " sp_player "!")
for (p in sp_players)
- say(p, "You have: " sp_hand(p))
+ say(p, "You have: " sp_hand(p, p))
sp_state = "play"
}
}
say(".slap " FROM ", you are not playing.")
} else {
sp_looked[sp_players[sp_from]] = 1
- say(FROM, "You have: " sp_hand(sp_from))
+ say(FROM, "You have: " sp_hand(FROM, sp_from))
}
}
sp_play(card)
if (sp_state == "play") {
if (length(sp_hands[sp_from]))
- say(FROM, "You have: " sp_hand(sp_from))
+ say(FROM, "You have: " sp_hand(FROM, sp_from))
if (sp_piles)
say(sp_player ": it is your turn! " \
"(" sp_pretty(sp_piles, sp_player) ")")
sp_order[2] " " sp_order[3])
}
if (sp_state == "bid" || sp_state == "play") {
+ say("playing to: " \
+ sp_playto " points, " \
+ sp_limit " bags")
say(sp_team(0) ": " \
int(sp_scores[0]) " points, " \
int(sp_bags(0)) " bags")