RaiNet Access Battlers Javascript implementation
// Create a game.
let game = new Game()
The game will be created with some initial state, provided at game.state
. This object can be read to query the state of the game at any time.
Terminology: Here "team" is used to indicate the playing sides of the game, even if there is only one player in each.
Enums are provided by the rainet
module.
To start the game, pass an object to game.start()
:
startingTeam
: Starting team. Can be unspecified, in which case any player can make the first move.arrangement
: Map. Arrangement for each team.
The arrangement array is an array of numbers which is simply the number of link cards to put before each virus card. The order of starting squares for both teams is from left to right with respect to Team.bottom.
Examples:
- LVLVLVLV = [1, 1, 1, 1]
- VLVLVLVL = [0, 1, 1, 1] : the remaining card is inferred
- LLLLVVVV = [4, 0, 0, 0] = [4] : remaining cards are inferred
- LLVVVVLL = [2, 0, 0, 0] = [2]
- VVVVLLLL = [0, 0, 0, 0] = [] : there are no link cards before any virus card
game.start({
startingTeam: Team.bottom,
arrangement: new Map([
[Team.top, [1, 2, 0, 1]],
[Team.bottom, [4]]
])
})
Example:
game.state.terminalCardState.get(Team.bottom).get(TerminalCardType.virusCheck) // boolean
{
let sq = game.state.terminalCardState.get(Team.bottom)
.get(TerminalCardType.lineBoost) // Square if installed
sq.location // Location
sq.card // Card if there's a card here
sq.firewall // Team if there's a firewall here
}
Example:
game.state.winner // undefined or Team
The grid is the main playing area consisting of 8 rows and 8 columns. These are indexed from 0 to 7 from top to bottom and left to right. That is, lower-indexed rows are closer to the team labeled "top".
let grid = game.state.board.grid
grid.rows // array of rows, each row is an array of squares
grid.columns // array of columns, each column is an array of squares
grid.squares // all squares
grid.lookup(new Location(6, 3)) // Square
grid.columns[6][3] // Square
grid.rows[3][6] // Square
Players take turns to submit moves to the game via game.submitMove
. An InvalidMoveError
will be thrown if the move submitted is invalid.
Move an online card
game.submitMove(new OnlineCardMove({
team: Team.bottom,
square: game.state.board.grid.lookup(new Location(4, 6)),
direction: Direction.up
}))
Move an online card with line boost / to the server area
game.submitMove(new OnlineCardMove({
team: Team.bottom,
square: game.state.board.grid.lookup(new Location(6, 0)),
direction: Direction.left,
direction2: Direction.up,
revealCard: true
}))
game.state.board.stackArea.get(Team.top)[0].cause // 'infiltrated'
game.state.board.stackArea.get(Team.top)[0].card.revealed // true
Install / uninstall a line boost / firewall card
game.submitMove(new InstallableTerminalCardMove({
team: Team.bottom,
square: game.state.board.grid.lookup(new Location(4, 6)),
cardType: TerminalCardType.lineBoost
}))
game.submitMove(new InstallableTerminalCardMove({
team: Team.bottom,
cardType: TerminalCardType.lineBoost,
uninstall: true
}))
Use a virus check card
game.submitMove(new TerminalCardMove({
team: Team.top,
square: game.state.board.grid.lookup(new Location(5, 6)),
cardType: TerminalCardType.virusCheck
}))
game.state.board.grid.columns[5][6].card.revealed // true
Use a 404 Not Found card
game.submitMove(new NotFoundTerminalCardMove({
team: Team.bottom,
square: game.state.board.grid.lookup(new Location(4, 6)),
other: game.state.board.grid.lookup(new Location(5, 6)),
swap: true
}))
game.state.board.grid.columns[4][6].card.revealed // false
game.state.board.grid.columns[5][6].card.revealed // false
Surrender
game.submitMove(new SurrenderMove({ team: Team.bottom }))
The exported modules for this package are:
const {
Board,
Card,
Direction,
GameState,
Game,
getEnemyTeam,
Grid,
InstallableTerminalCardMove,
InvalidMoveError,
Location,
Move,
NotFoundTerminalCardMove,
OnlineCardMove,
OnlineCardType,
SquareMove,
StackCause,
StackedOnlineCard,
SurrenderMove,
Team,
TerminalCardMove,
TerminalCardType
} = require('rainet')
These modules can also be accessed in the src
directory. (This might change in the future, in a major semver revision. dist
, perhaps?)
This is pretty much what's needed to interact with the module. Feel free to consult the full documentation / source code.
Simply run npm run jsdoc
to generate documentation.
MIT