Skip to content
Merged
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
14 changes: 14 additions & 0 deletions locales/en/apgames.json
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@
"pods": "Natal Seas - Pods is a territorial game where the players take on the metaphorical role of competing whales vying for space to protect their young. Played on a hexagonal board, it uses an innovative mechanism of placements and movements.",
"pollux": "A mix of Hex and Amazons: shoot to connect your edges or block the adversary.",
"pontedd": "Players build islands and attempt to connect as many of them as possible by bridge. Most points wins.",
"posit": "Try to stalemate the adversary by building unscalable stacks.",
"product": "Players score by multiplying their two largest groups. Largest score wins. If tied, the second player wins.",
"prudh": "Prudh (\"prew\") is a game of shared pieces where one player owns the light squares and the other owns the dark. Manipulate stacks of pieces to earn points. Highest score at the end of the game wins.",
"pylon": "The game is played in two phases: a placement phase, in which all the pyramids are placed onto the board, followed by a stacking phase, in which pyramids are collected into stacks. Control the majority of the pyramids to win.",
Expand Down Expand Up @@ -305,6 +306,7 @@
"pinch": "Pinch is a 2026 redesign of an original 2019 concept, proposing a new perspective to the orthogonal connection genre. At its core is the **pinch capture**: when two friendly stones flank an enemy piece at a right angle, the captured stone is relocated rather than removed. This mechanic can trigger a cascade of further relocations, creating a chain-reaction that expands one local capture into changes over multiple sections of the board.",
"pippinzip": "Initially, each player places 1-3 WHITE stones in the auction phase, until one player 'takes' and becomes 'Zip'. Zip will play a SINGLE white stone per turn. The opponent becomes 'Pip' and will play TWO black stones per turn, which cannot be orthogonally adjacent. Immediately after 'take' is announced, Pip is the next to move.\n\nZip wins by connecting all FOUR sides of the board with a chain of white stones that are orthogonally and/or diagonally adjacent; Pip wins by connecting any TWO opposite sides with a chain of black stones that are orthogonally adjacent.\n\nIn this implementation, the white stones are neutral gray stones, and the black stones will be the player's color which takes the auction and becomes Zip.",
"pletore": "An intersection is controlled by a player if they 'pinch' it while the opponent does not. You 'pinch' an intersection if you have pieces that can see that intersection from two different axes. Your score is the sum of the number of stones of your color on the board and the number of empty points you control, plus a komi bonus and a button bonus. The button is used when the komi value plus the number of intersections on the board is even, and any player may take a turn off and claim the button if it has yet to be claimed. The game ends when both players pass in succession, but claiming the button does not count toward this. Players cannot pass until the entire board is occupied or controlled.",
"posit": "Posit was designed by Shinichi Tobita in 1991. The game was published by Yonezawa corp. as a videogame called **Posit: 3-D board**.\n\nPosit is played on a 6x6 square board. Each player has a pawn. Initially, the pawns are placed on the c6 and d1 squares. In each turn, players move their pawn to an (orthogonally or diagonally) adjacent square, and then place a neutral piece in any square (which does not have a pawn). Neutral pieces can be stacked up to three levels. Pawns can climb one level up, but cannot go down, or climb two levels at once, or climb on top of three levels. A player wins by stalemating the adversary.",
"plurality": "Plurality is a finite territorial game. The concept of territory exist disconnected from concepts like groups or liberty. Territories' ownership depend on the most represented color in their perimeters. On their turn, players drop two friendly stones and one adversary stone as a single orthogonally connected group (a tromino). It is forbidden to make a 2x2 shape of stones of any color configuration.",
"queensland": "After the first game completes, the board resets and you play a second game but with blue playing first. Highest combined score wins.",
"quincunx": "A game consists of as many rounds as there are players. Highest accumulated score wins.\n\nBasic scoring: For each orthogonally adjacent card, add the ranks together.\n* 2-9 w/ matching Ace: gain, otherwise lose\n* 10: no effect\n* 11: draw a card\n* 12-19: gain sum - 10\n* 20: draw a card\n\nPairs: For each orthogonally adjacent card that is the same rank, gain 5 points. (**Exception:** If that pair is also part of a set, it does *not* also score as a pair.)\n\nSets: If the placed card creates a line (including diagonal) of three *or more* cards of the same rank, gain 30 pts for each line.\n\nStraights: If the placed card creates or extends sequence of three or more cards in rank order along a line (including diagonal), gain 20 points for each line.\n\nPower play: If you played an Ace or Crown orthogonally adjacent to the matching Ace or Crown, score the number of points equal to the sum of the ranks of all the *other* cards in the tableau that share that suit.\n\nMore information on the Decktet system can be found on the [official Decktet website](https://www.decktet.com). Cards in players' hands are hidden from observers and opponents.",
Expand Down Expand Up @@ -5908,6 +5910,18 @@
"TOO_CLOSE": "Islands may not diagonally touch other islands or sandbars of that colour.",
"TOO_MANY": "You may not place more than two tiles."
},
"posit": {
"INSTRUCTIONS": "Select your piece.",
"SELECT_MOVE": "Select a square to move your piece. The piece cannot go down, move up two or more levels at once, or climb on top of a 3-stack.",
"SELECT_PLACEMENT": "Select a square to place a neutral piece. Stacks cannot have more than three neutral pieces. It is invalid to place a neutral stone on top of a player's piece.",
"SELECT_ERROR": "The player needs first to move his piece!",
"CANNOT_GO_DOWN": "The piece cannot move to a smaller stack!",
"CANNOT_GO_UPUP": "The piece cannot move up two or more levels at once!",
"CANNOT_CLIMB": "The piece cannot climb on top of a 3-stack!",
"OPPONENT_MOVE": "Cannot move to the opponent's player square!",
"PLACE_ON_PIECE": "Neutral pieces cannot be placed where player's pieces are!",
"STACK_TOO_BIG": "Stacks cannot have more than three neutral pieces!"
},
"product": {
"INITIAL_INSTRUCTIONS": "At the start, place one stone of either color. Click current friendly stone to flip color, click again to empty hex.",
"INSTRUCTIONS": "Players place, on empty hexes, two stones of either color. Click current friendly stone to flip color, click again to empty hex.",
Expand Down
9 changes: 7 additions & 2 deletions src/games/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ import { PippinzipGame, IPippinzipState } from "./pippinzip";
import { NarrowsGame, INarrowsState } from "./narrows";
import { InvectorGame, IInvectorState } from "./invector";
import { TricouleurGame, ITricouleurState } from "./tricouleur";
import { PositGame, IPositState } from "./posit";

export {
APGamesInformation, GameBase, GameBaseSimultaneous, IAPGameState,
Expand Down Expand Up @@ -521,6 +522,7 @@ export {
NarrowsGame, INarrowsState,
InvectorGame, IInvectorState,
TricouleurGame, ITricouleurState,
PositGame, IPositState,
};

const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof CannonGame |
Expand Down Expand Up @@ -610,7 +612,8 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
typeof MinimizeGame | typeof HalmaClimbersGame | typeof SynapseGame |
typeof AtariGoGame | typeof TanboGame | typeof UnaneGame |
typeof LinageGame | typeof PolluxGame | typeof PippinzipGame |
typeof NarrowsGame | typeof InvectorGame | typeof TricouleurGame
typeof NarrowsGame | typeof InvectorGame | typeof TricouleurGame |
typeof PositGame
>();
// Manually add each game to the following array
[
Expand Down Expand Up @@ -650,7 +653,7 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
XanaGame, SporaGame, SquirmGame, PinchGame, DomineeringGame, TwinFlamesGame, YGame, ShapeChessGame,
SlimetrailGame, CatsDogsGame, SoccolotGame, CourtGame, HalmaGame, MinimizeGame, HalmaClimbersGame,
SynapseGame, AtariGoGame, TanboGame, UnaneGame, LinageGame, PolluxGame, PippinzipGame, NarrowsGame,
InvectorGame, TricouleurGame
InvectorGame, TricouleurGame, PositGame
].forEach((g) => {
if (games.has(g.gameinfo.uid)) {
throw new Error("Another game with the UID '" + g.gameinfo.uid + "' has already been used. Duplicates are not allowed.");
Expand Down Expand Up @@ -1180,6 +1183,8 @@ export const GameFactory = (game: string, ...args: any[]): GameBase|GameBaseSimu
return new InvectorGame(...args);
case "tricouleur":
return new TricouleurGame(...args);
case "posit":
return new PositGame(...args);
}
return;
}
Loading
Loading