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
15 changes: 15 additions & 0 deletions locales/en/apgames.json
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@
"rootbound": "In Root Bound, two groups of ‘plants’ spread in lifelike ways and vie for control of territory as space for new growth rapidly dwindles.",
"saltire": "Connect your two opposite sides of the board by placing stones and swapping pairs of orthogonally or diagonally adjacent stones. A swap must decrease either the number of crosscuts or the number of supercuts on the board, and it must not increase the number of crosscuts.",
"scaffold": "Scaffold is a drawless connection game played on the intersections of a square grid using stones (as in Go). Black is trying to connect N-S edges of the board, White E-W with an orthogonally connected group. On your turn, place a stone of your color on an empty point. Then, if possible, place a stone of your color on an empty point that is orthogonally adjacent to two groups of your color, and keep making such placements until no more are possible.",
"sentinel": "A vigil game using a sowing mechanism with stacks. A vigil game is one where some board position must always be on line-of-sight with some or all of the player's pieces. In Sentinel, players are required to see the board center at the end of each one of their turns.",
"shifty": "A connection game where you either place a piece orthogonally adjacent to a friendly piece, or move one of your pieces orthogonally adjacent to a friendly piece, by a chess queen's move, to a location not orthogonally adjacent to any other friendly pieces. Crosscuts are illegal. The player that forms an orthogonal or diagonal path connecting their two sides wins.",
"siegeofj": "Place cards, representing armies, to exert pressure on segments of the wall around the city of Jacynth. Exert the most pressure on the most segments to win.",
"slither": "Square-board connection game with updated rules from 2018. Optionally move a piece and then place a piece, such that no two pieces of a colour are diagonally adjacent to each other unless they are orthogonally connected by a like-coloured stone. In Advanced Slither, a piece may only move if it is part of a contiguous orthogonal group consisting of pieces of both colours.",
Expand Down Expand Up @@ -2320,6 +2321,11 @@
"name": "Larger 25x25 board"
}
},
"sentinel": {
"#board": {
"name": "9x9 board"
}
},
"shifty": {
"#board": {
"name": "9x9 board"
Expand Down Expand Up @@ -5546,6 +5552,15 @@
"INITIAL_INSTRUCTIONS": "Select a point to place a piece.",
"INVALID_MOVES": "This sequence of moves {{moves}} is invalid."
},
"sentinel": {
"INITIAL_INSTRUCTIONS": "Move a piece forward or sow a stack on any direction. The center cannot be crossed over. Captures are by replacement.",
"EDGE_INSTRUCTIONS": "Move the piece one step forward (orthogonally or diagonally). The piece can be moved out of the board by clicking at the center.",
"PIECE_INSTRUCTIONS": "Move the piece one step forward (orthogonally or diagonally).",
"STACK_INSTRUCTIONS": "Sow the stack in any direction provided there's space to place all of its pieces (plus one). It is illegal to create un-sowable stacks. Captures are by replacement.",
"INVALID_CENTER": "It is illegal to move or sow over the board center!",
"NO_STACK_TURN_3": "Notice that the first player cannot make a stack in his second move.",
"MOVE_INSTRUCTIONS": "First, click on a friendly piece."
},
"shifty": {
"INITIAL_INSTRUCTIONS": "Select an intersection to place a piece next to one of your own pieces, or select a piece to move.",
"INITIAL_INSTRUCTIONS_OPENING": "Select an intersection to place your first piece.",
Expand Down
8 changes: 6 additions & 2 deletions src/games/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ import { GoGame, IGoState } from "./go";
import { StilettoGame, IStilettoState } from "./stiletto";
import { BTTGame, IBTTState } from "./btt";
import { MinefieldGame, IMinefieldState } from "./minefield";
import { SentinelGame, ISentinelState } from "./sentinel";

export {
APGamesInformation, GameBase, GameBaseSimultaneous, IAPGameState,
Expand Down Expand Up @@ -469,6 +470,7 @@ export {
StilettoGame, IStilettoState,
BTTGame, IBTTState,
MinefieldGame, IMinefieldState,
SentinelGame, ISentinelState,
};

const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof CannonGame |
Expand Down Expand Up @@ -550,7 +552,7 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
typeof BambooGame | typeof PluralityGame | typeof CrosshairsGame |
typeof MagnateGame | typeof ProductGame | typeof OonpiaGame |
typeof GoGame | typeof StilettoGame | typeof BTTGame |
typeof MinefieldGame
typeof MinefieldGame | typeof SentinelGame
>();
// Manually add each game to the following array
[
Expand Down Expand Up @@ -586,7 +588,7 @@ const games = new Map<string, typeof AmazonsGame | typeof BlamGame | typeof Cann
SiegeOfJGame, StairsGame, EmuGame, DeckfishGame, BluestoneGame, SunspotGame, StawvsGame,
LascaGame, EmergoGame, FroggerGame, ArimaaGame, RampartGame, KrypteGame, EnsoGame, RincalaGame,
WaldMeisterGame, WunchunkGame, BambooGame, PluralityGame, CrosshairsGame, MagnateGame,
ProductGame, OonpiaGame, GoGame, StilettoGame, BTTGame, MinefieldGame,
ProductGame, OonpiaGame, GoGame, StilettoGame, BTTGame, MinefieldGame, SentinelGame
].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 @@ -1064,6 +1066,8 @@ export const GameFactory = (game: string, ...args: any[]): GameBase|GameBaseSimu
return new BTTGame(args[0], ...args.slice(1));
case "minefield":
return new MinefieldGame(...args);
case "sentinel":
return new SentinelGame(...args);
}
return;
}
Loading
Loading