seat1
seat2
seat3
seat4
seat5
Note that some cards are identical -- for example, there are two of each "whole element" and three of each action. These duplicates have distinct strings (distinguished by "_1", "_2", etc), and they are distinguished for the purposes of the ruleset and referee. The client may display them as identical, or make them distinct (for decorative purposes).
The action card names begin with act_
. The element card
names begin with
w_
, l_
, p_
, or q_
(for whole cards, half-landscape, half-portait, and quartered). The
element card names also describe the elements on each card:
a
for air,
e
for earth,
f
for fire,
w
for water,
v
for void.
w_a_1, w_a_2, w_e_1, w_e_2, w_f_1,
w_f_2, w_w_1, w_w_2, w_v_1, w_v_2
l_ea, l_we, l_fw, l_vf, l_av,
l_aw, l_fa, l_ef, l_ve, l_wv
p_ea, p_we, p_fw, p_vf, p_av,
p_aw, p_fa, p_ef, p_ve, p_wv
q_wevf, q_efwv, q_eawv, q_awev, q_awfe,
q_waef, q_wvfa, q_wavf, q_veaf, q_evfa
act_a_1, act_a_2, act_a_3
(shuffle goals)act_e_1, act_e_2, act_e_3
(move card)act_f_1, act_f_2, act_f_3
(zap card)act_w_1, act_w_2, act_w_3
(trade goals)act_v_1, act_v_2, act_v_3
(trade hands)
game.is_chicken(string sender, bool flag)
-- The flag indicates whether this will be an Aqua-Chicken game.
(Config phase only.)
game.hand_size(string seat, int count)
-- Gives the number of cards in the hand of the given player.
(You receive this when another player's hand changes size: at the beginning
of the game, because of a Zap, because of Trade Hands, because of a forced
pass, or because of deck exhaustion in the last few turns. This is not used
for ordinary draw-and-play hand updates. You will not receive this RPC for
your own seat.)
game.new_hand(array cards)
-- You have a new hand.
(You receive this at the beginning of the game, and for Trade Hands and
Zap a Card.)
game.new_goal(string element)
-- You have a new goal. The string is a single lower-case letter:
a
, e
, f
, w
, v
.
(This is used at the beginning of the game, and after Trade Goals and Shuffle
Goals. In Aqua-Chicken, you will not receive new_goal() in those situations
-- you will get knows_goal(false) instead. When you look at your goal
card, then you'll get new_goal().)
game.knows_goal(string seat, bool flag)
-- The given seat knows, or does not know, his goal card.
(This is only used in Aqua-Chicken. At the beginning of the game, and
after Trade and Shuffle Goals, players do not know their goal.)
game.place_card(string card, int x, int y, bool upright)
-- The given card has been placed on the board.
(This is used at the beginning of the game, and for every move that places
or moves a card. If the move was a Move Card action, you will receive
game.remove_card() before game.place_card().)
game.remove_card(string card, int x, int y)
-- The given card has been removed from the board.
(This is used for Zap and Move actions.)
game.play_action(string card)
-- The given action card has been played, and is now in the discard pile.
game.measures(int air, int earth, int fire, int water,
int void)
-- Each element's largest groups now have these sizes.
(If an element is not represented on the board, its size will be zero.)
game.other_turn(string seat)
-- It is the given player's turn.
(This is used for each turn that is not yours.)
game.your_turn(string card, bool canmove)
-- It is your turn, and you have drawn the given card.
(If the deck is exhausted, the card is the empty string.
You'll also get the empty string if you're rejoining the game in the middle
of your turn; the just-drawn card is in your hand, in that case.
The canmove flag indicates whether you have a legal move -- it is
easier for the referee to compute this than the UI. If canmove is
false, your only legal move is to pass.)
game.outcome(list winners,
string el1, string el2, string el3, string el4, string el5)
-- Give the winner of the game, and reveal every seat's goal.
(This is used at the end of the game.
The winners list contains the winning seat, or seats if there was a tie.
The goals include seats who were not involved in the game -- makes the API
simpler. Each element is a single-letter string.)
game.set_chicken(bool flag)
-- Set whether this will be an Aqua-Chicken game.
(Config phase only.)
game.play_card(string card, int x, int y, bool upright)
-- Play an element card.
game.play_shuffle_goals(string card)
-- Play a Shuffle Goals action.
game.play_trade_goals(string card, string seat)
-- Play a Trade Goals action. (Trading with the given seat.)
game.play_trade_hands(string card, string seat)
-- Play a Trade Hands action. (Trading with the given seat.)
game.play_zap_card(string card, string card)
-- Play a Zap A Card action.
(The card to be zapped is the second argument.)
game.play_move_card(string card, string card, int x, int y, bool upright)
-- Play a Move A Card action.
(The card to be moved is the second argument; the following arguments give
its new position.)
game.pass()
-- Pass.
(This is only legal if you received the canmove flag in
game.your_turn()
.)
game.see_goal()
-- See your goal card.
(This elicits a game.new_goal()
RPC in return. It is not needed
except in Aqua-Chicken games.)
game.two_seats_needed
-- "At least two players are needed to play."
game.dont_have_card
-- "That card is not in your hand."
game.space_not_empty
-- "That space is already occupied."
game.not_adjacent
-- "That space is not adjacent to a card on the board."
game.no_match
-- "That move does not match any elements."
game.move_possible
-- "You may not pass, because you have a legal move."
game.board_too_small
-- "You may not remove the only card on the board."
game.not_on_board
-- "That card is not on the board."
game.identity_move
-- "You must change the card's location or orientation."