Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions locales/en/apgames.json
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@
"evenatodds": "To place on the table, place one end on empty ground adjacent to a matching active face; the other end may go on any adjacent empty ground. To stack, one end must match the face underneath; the other end may cover any active face *on a different tile* at the same height. In the notation, the first coordinate is the end that matches one of these rules. Blanks are blockers, belonging to no one.\n\nTiles in your hand are hidden from your opponent. Boneyard identities and the two removed overtime tiles are hidden until the game ends. The boneyard count is shown in the sidebar.",
"exxit": "Translations of the rules tend to omit certain nuances. This implementation conforms with the original French edition of the rules.\n\nBecause the board is built out as you play in irregular shapes, the hexes are labelled numerically instead of algebraically. This ensures that the labels don't change as the map grows.",
"forms": "Forms was designed by Steven Meyers in 2007. After each move, all pieces outside the group that contains the last-moved piece are captured. The last player to move loses (so Forms is a misère game). The first version allowed a piece to capture any opponent's piece. Later, in 2011, Meyers developed a second version, **Advanced Forms**, where you could only capture orthogonally adjacent pieces, but a piece could also move to an empty cell if both were connected by a sequence of orthogonal steps over empty cells. The setup also changed to a checkered pattern. This second version is the default variant here at AP. More information can be found at [WAG](https://jpneto.github.io/world_abstract_games/forms.htm).",
"frogger": "As in other Decktet games at Abstract Play, the deck is displayed at the bottom of the board and includes both cards in the deck and unknown cards in other players' hands. After the first hand, all cards are drawn from the open draw pool, so hands gradually become open. The discards pile is also displayed.\n\nDue to how randomization works at Abstract Play, forced passes are needed for a player to refill the draw pool in the middle of his turn. Passes are handled automatically by the server, but a there's also a draw pool variant that avoids forced passing if desired.\n\nThe Crocodiles variant is by Jorge Arroyo, the translator of the English rules. The Advanced rules and other minor variants are by P. D. Magnus; they appear in The Decktet Book, where the game is called Xing.",
"frogger": "As in other Decktet games at Abstract Play, the deck is displayed at the bottom of the board and includes both cards in the deck and unknown cards in other players' hands. After the first hand, all cards are drawn from the open draw pool, so hands gradually become open. The discards pile is also displayed.\n\nForced passes are no longer used when a player refills the draw pool (and submits) in the middle of his turn. That player's second partial turn is handled automatically by the server. There's also a draw pool variant that avoids the double-ply, if desired.\n\nThe Crocodiles variant is by Jorge Arroyo, the translator of the English rules. The Advanced rules and other minor variants are by P. D. Magnus; they appear in The Decktet Book, where the game is called Xing.",
"garden": "To make it very clear what happened on a previous turn, each move is displayed over four separate boards. The first board shows the game after the piece was first placed. The second board shows the state after adjacent pieces were flipped. The third board shows any harvests. The fourth board is the final game state and is where you make your moves.\n\nIn our implementation, black is always the \"tome\" or tie-breaker colour. The last player to harvest black will have a `0.1` after their score.",
"guerrilla": "Either player wins by removing all of the opponent's pieces. P2 also wins if they survive long enough that P1 runs out of insurgents to place.",
"scribe": "The glyph reference chart is shown in the left margin. A dot marks each player's most recent placement. When a mini grid fills, glyph points are tallied and the higher score wins that grid (ties go to the player who completed it).",
Expand Down Expand Up @@ -5659,7 +5659,7 @@
"TOO_EARLY_FOR_REFILL": "Please submit your refill request before making your remaining moves.",
"TOO_LATE_FOR_BLOCKED": "You do not count as blocked if you've already moved on this turn.",
"TOO_LATE_FOR_REFILL": "There is no need to force a refill of the draw pool after your third move. It will refill automatically after you submit.",
"VALID_REFILL": "Please submit your move to trigger the refill. The other player(s) will pass automatically, and you will have {{count}} moves remaining in your partial turn (as well as the option to pass)."
"VALID_REFILL": "Please submit your move to trigger the refill. You will get another turn automatically, and you will have {{count}} moves remaining in your partial turn (as well as the option to pass)."
},
"furl": {
"CAPTURE4UNFURL": "You signalled a capture unfurl move, but {{to}} not is occupied by the opponent. Use \">\" to denote non-capture unfurl.",
Expand Down
2 changes: 1 addition & 1 deletion locales/en/apresults.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"arimaa": "This position has occurred before. Further repeats of this position are forbidden.",
"biscuit": "The following cards were in opposing hands: {{cards}}.",
"deckfish": "{{player}} was unable to move and must pass from now on.",
"frogger": "{{player}} chose to refill the draw pool. Other players must pass so he can take his {{moves}} remaining move(s).",
"frogger": "{{player}} chose to refill the draw pool mid-move, so will take a partial turn to complete his {{moves}} remaining move(s).",
"quincunx": "Player {{playerNum}} had the following cards left in their hand: {{cards}}.",
"scribe_super": "{{player}}'s super formation: {{formation}}.",
"stawvs": "{{player}} was unable to move and must pass from now on. Their pieces remain on the following pyramids: {{pyramids}}."
Expand Down
8 changes: 6 additions & 2 deletions src/games/_base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -687,10 +687,14 @@ export abstract class GameBase {

public chatLog(players: string[]): string[][] {
const result: string[][] = [];
for (const state of this.stack) {
// Index 0 has no associated ply) so it's skipped.
for (let i = 1; i < this.stack.length; i++) {
const state = this.stack[i];
if ( (state._results !== undefined) && (state._results.length > 0) ) {
const node: string[] = [(state._timestamp && new Date(state._timestamp).toISOString()) || "unknown"];
let otherPlayer = state.currplayer as number - 1;
// Resolved via plyActor(), not `state.currplayer - 1`,
// to fix turn model cases of skip-turn and sequenced.
let otherPlayer = this.plyActor(i);
if (otherPlayer < 1) {
otherPlayer = this.numplayers;
}
Expand Down
Loading
Loading