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
28 changes: 28 additions & 0 deletions locales/en/apgames.json
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@
"pikemen": "A Looney pyramid game where the pyramids represents soldiers with long pikes. Pieces charge in the direction they're facing and can then change their orientation. Capture a certain number of enemy soldiers to win.\n\nWhile the game is technically playable by three and four players, this implementation only supports two players.",
"pilastri": "Outlast your opponent in this game of blocking and moving, as pieces are forced to climb higher and higher until they run out of moves.",
"pinch": "Orthogonal connection game where a diagonal of friendly stones can capture adjacent stones that need to be relocated in the same turn. This might result in more relocations starting a chain-reaction.",
"pippinzip": "An asymmetrical connection game.",
"pletore": "Territorial line-of-sight game. Intersections are controlled and pieces on them are flipped based on the number and direction of pieces that can see them. The winner is the player who occupies more of the board at the end.",
"plurality": "Territorial game where players place trominos to enclosure areas. The player with more stones on a given area's perimeter owns that area.",
"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.",
Expand Down Expand Up @@ -2226,6 +2227,23 @@
"name": "Flip Pinch"
}
},
"pippinzip": {
"size-9": {
"name": "9x9 board"
},
"#board": {
"name": "11x11 board"
},
"size-13": {
"name": "13x13 board"
},
"size-15": {
"name": "15x15 board"
},
"size-19": {
"name": "19x19 board"
}
},
"pletore": {
"#board": {
"name": "Default board (13x13)"
Expand Down Expand Up @@ -5739,6 +5757,16 @@
"OPP_SELF_STONES_TO_PLACE": "There are still {{opp}} opponent captured stone(s), and then {{own}} friendly stone(s), to relocate.",
"INITIAL_INSTRUCTIONS_ORIGINAL": "Place a stone on an empty cell. If a pinch capture is made, the captured stone flips color. This flip might cause subsequent flips, starting a chain-reaction until the board stabilizes."
},
"pippinzip": {
"INITIAL_INSTRUCTIONS": "This is the auction phase. Either place one to three pieces on empty cells to improve 'Zip' position, or press 'pass' to finish the auction and be 'Zip'. 'Zip' then places one piece per turn and tries to connect all four board edges. Pip then places two non-adjacent pieces per turn and must orthogonally connect two opposite edges.",
"INSTRUCTIONS_PIP": "Place two friendly pieces not orthogonally adjacent to each other.",
"INSTRUCTIONS_PIP_2": "Place the second friendly piece not orthogonally adjacent to the previous one.",
"INSTRUCTIONS_ZIP": "Place one friendly piece.",
"TOO_MANY_PLACEMENTS_AUCTION": "Too many placements. During the auction players can place up to three pieces on empty cells!",
"ERROR_PLACEMENT_PIP": "The Pip player must place two pieces on non-orthogonally adjacent empty cells!",
"ADJACENT_PLACEMENT_PIP": "The second piece is orthogonally adjacent to the first!",
"ERROR_PLACEMENT_ZIP": "The Zip player (the taker) must place one piece on an empty cell!"
},
"pletore": {
"INITIAL_INSTRUCTIONS": "Place a piece onto an empty intersection not controlled by the opponent, replace an enemy piece on an intersection you control, or 'pass' if all intersections are occupied or controlled. The game ends when both players pass in sequence.",
"INITIAL_INSTRUCTIONS_BUTTON": "Place a piece onto an empty intersection not controlled by the opponent, replace an enemy piece on an intersection you control, or take the button (worth .5 points).",
Expand Down
8 changes: 6 additions & 2 deletions src/games/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ import { TanboGame, ITanboState } from "./tanbo";
import { UnaneGame, IUnaneState } from "./unane";
import { LinageGame, ILinageState } from "./linage";
import { PolluxGame, IPolluxState } from "./pollux";
import { PippinzipGame, IPippinzipState } from "./pippinzip";

export {
APGamesInformation, GameBase, GameBaseSimultaneous, IAPGameState,
Expand Down Expand Up @@ -513,6 +514,7 @@ export {
UnaneGame, IUnaneState,
LinageGame, ILinageState,
PolluxGame, IPolluxState,
PippinzipGame, IPippinzipState,
};

const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof CannonGame |
Expand Down Expand Up @@ -601,7 +603,7 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
typeof SoccolotGame | typeof CourtGame | typeof HalmaGame |
typeof MinimizeGame | typeof HalmaClimbersGame | typeof SynapseGame |
typeof AtariGoGame | typeof TanboGame | typeof UnaneGame |
typeof LinageGame | typeof PolluxGame
typeof LinageGame | typeof PolluxGame | typeof PippinzipGame
>();
// Manually add each game to the following array
[
Expand Down Expand Up @@ -640,7 +642,7 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
ProductGame, OonpiaGame, GoGame, StilettoGame, BTTGame, MinefieldGame, SentinelGame,
XanaGame, SporaGame, SquirmGame, PinchGame, DomineeringGame, TwinFlamesGame, YGame, ShapeChessGame,
SlimetrailGame, CatsDogsGame, SoccolotGame, CourtGame, HalmaGame, MinimizeGame, HalmaClimbersGame,
SynapseGame, AtariGoGame, TanboGame, UnaneGame, LinageGame, PolluxGame
SynapseGame, AtariGoGame, TanboGame, UnaneGame, LinageGame, PolluxGame, PippinzipGame
].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 @@ -1162,6 +1164,8 @@ export const GameFactory = (game: string, ...args: any[]): GameBase|GameBaseSimu
return new LinageGame(...args);
case "pollux":
return new PolluxGame(...args);
case "pippinzip":
return new PippinzipGame(...args);
}
return;
}
Loading
Loading