https://en.doc.boardgamearena.com/api.php?action=feedcontributions&user=Tabicat&feedformat=atomBoard Game Arena - User contributions [en]2024-03-29T15:33:59ZUser contributionsMediaWiki 1.39.0https://en.doc.boardgamearena.com/index.php?title=Gamehelpsevenwondersduel&diff=17175Gamehelpsevenwondersduel2023-06-17T17:36:46Z<p>Tabicat: Fix spelling errors.</p>
<hr />
<div><br />
[[Category:Card games]]<br />
<br />
== Overview ==<br />
<br />
In 7 Wonders: Duel, your aim is to make your ancient civilization thrive over three rounds by acquiring resources, building different types of constructions, and building your Wonders. However, you're doing this along with another player who has access to the same resources and buildings you do. Over the course of each round, you'll be acquiring money and points from the different cards played or other actions. Alternatively, you can build up a military to conquer your opponent, or progress on technology to the point that you're just too amazing of a civilization.<br />
<br />
There are three ways to win this game (4 if with Agora expansion):<br />
* Advance the military token all the way to the opponent's edge of the board<br />
* Collect any six different science symbols<br />
* Have the most points at the end of the 3rd round<br />
* Control all six chambers in the senate (only with Agora expansion)<br />
<br />
== Game Anatomy ==<br />
<br />
At any given moment, each player has:<br />
* 4 Wonders. These can be built by tucking a card underneath them for the bonuses printed on them. These are shown on the left side of your board.<br />
* Money. Some cards or Wonders give you money, but this is more commonly earned by discarding cards. Money can be spent to buy cards, or to buy resources you don't already have access to. This is shown on the right side of your player board.<br />
* Points. These are simply the sum of all points earned from cards. The player with the most points wins the game (unless an alternate victory condition is achieved). This is shown on the right side of your player board.<br />
<br />
Between both players is the available "market" of cards. Any cards not covered by any other card can be collected or purchased for the listed price. The shape of this board is different in each round.<br />
<br />
== Game Setup and Preparation ==<br />
<br />
Each player starts the game with 7 coins.<br />
<br />
5 Progress tokens are dealt onto the board.<br />
<br />
Each player also starts with 4 potential Wonders, chosen as follows:<br />
* Deal out 4 random Wonders.<br />
* The starting player selects one of the Wonders.<br />
* The other player then selects two of the remaining Wonders.<br />
* The starting player automatically gets the remaining Wonder.<br />
* Then deal out 4 random Wonders and repeat the above process, except the other player starts that round.<br />
<br />
Each wonder provides certain advantage to the player by way of points, attack shields, coins or other advantage.<br />
<br />
Finally, deal out the Age I cards in the pattern described.<br />
<br />
The starting player goes first.<br />
<br />
== What To Do On Your Turn ==<br />
During your turn, trigger a conspiracy if you want (Agora), then select one of the cards on the board to claim, then choose what to do with it:<br />
* Play the card as normal. This is the most common choice. Doing this will simply give you the benefits of the card. The types of cards and what they do are explained further into these instructions.<br />
* Use the card to build your Wonder. Tuck the card underneath one of your Wonders. It does not matter which card is tucked for this; as long as any card is used for this, the Wonder is considered complete. You do need to be able to pay the resource cost of the Wonder or have enough money to make up the difference. Only 7 Wonders can be completed during the entire course of the game; once the 7th has been built, the 8th and final Wonder is removed from play and can't be built.<br />
* Discard the card for money. You gain 2 coins plus 1 coin for each yellow card you already have. It does not matter which card is discarded for this; all cards are worth the same amount of money when discarded this way.<br />
* Prepare a conspiracy. You put the card underneath one of your conspiracies. Later on, you can trigger a conspiracy before you select a card. (only available when played with Agora)<br />
<br />
If you built to a wonder with a "take another turn action", you may go again. (If you have several such wonders, you can repeat this multiple times, even though the game rules disallow it.) Otherwise, it's now your opponent's turn. <br />
<br />
== Buying Cards ==<br />
<br />
Most cards have a purchase price, shown on the top left of the card, involving resources or money. To buy a card, you must have the available resources for it. However, if you do not have the required resources, you may buy them from the bank. For each missing resource, pay 2 coins, plus 1 extra coin for each of that resource your opponent has.<br />
<br />
Alternatively, some cards have an alternate cost using a previously claimed card. Cards that can take advantage of a chain build later in the game have a symbol printed on the top right, and cards that can be purchased this way have the matching symbol underneath their normal, resource-based cost. If you have the appropriate card, you can buy the new card for free!<br />
<br />
== Types of Cards ==<br />
<br />
Players can gain the following types of cards:<br />
<br />
=== Resource Cards ===<br />
<br />
Brown and gray cards are resources. There are five types of resources; wood, brick, stone (all of which are brown), glass, and paper (which are gray). These resources are required in order to build certain cards or Wonders. If you do not have a particular resource, you can instead pay 2 coins, plus 1 coin for each resource held by your opponent (this money goes to the bank, not to your opponent). Resource cards are never used up - as long as you have the card, you may use the resources on any subsequent turns.<br />
<br />
Unlike other cards, Resource Cards appear in Age I and II, but not at all during Age III.<br />
<br />
=== Commerce Cards ===<br />
<br />
Yellow cards are commerce cards, and usually have something to do with money. They may allow for altered costs to buy resources, or to instantly gain money. Additionally, for each yellow card you have, you gain 1 extra coin each time you discard a card.<br />
<br />
=== Civilian Cards ===<br />
<br />
Blue cards are civilian cards, and are simply worth points at the end of the game.<br />
<br />
=== Science Cards ===<br />
<br />
Green cards are science cards. These are frequently (but not always) worth points, but more importantly, have one of six different scientific instruments on them. If you ever collect one copy of all six symbols, you automatically win the game!<br />
<br />
Additionally, if you get two cards with the same symbol, you also immediately get one of the Progress tokens. There are five Progress tokens dealt at the start of the game, which either give you some sort of bonus or extra effect.<br />
<br />
=== Military Cards ===<br />
<br />
Red cards are military cards. These show some number of sword and shields along the top. When you get one, for each of these sword and shields, advance the military token one step towards your opponent. If it moves into a space next to a penalty symbol, your opponent loses money.<br />
<br />
If you ever advance the military token to the edge closest to your opponent, you've conquered their civilization and automatically win the game! However, if the game ends before this happens, one player will gain points based on its position.<br />
<br />
=== Guild Cards ===<br />
<br />
Purple cards are guild cards. These are worth money and points based on how many of a particular card type or other quality have been built. The money from this is awarded immediately, but the points are only awarded at the end of the game (and consequently do not show up on your point total).<br />
<br />
Unlike other cards, these cards only show up in Age III.<br />
<br />
=== Senators (Agora)===<br />
<br />
Black and White cards are senators. Their cost are coins equal to your number of senators (0 if first). Then apply its effect as follows:<br />
<br />
* Politician (White): Take a number of senate actions (place influence in the section or move an influence) according to the number of blue cards you have (0-1: 1 action, 2-3: 2 actions, 4+: 3 actions).<br />
* Conspirator (Black): Put an influence in any chamber or conspire (draw 2 conspiracies, choose 1 and put the other on top or bottom of the deck).<br />
<br />
If you have more influences than your opponent in a chamber, you control the chamber and have the power of the decree in it. However, you lose it if your opponent has at least the same number of influences as you. If you are tied with your opponent, no one control the chamber.<br />
<br />
These cards only show up if Agora expansion is on. They have a grey back.<br />
<br />
=== Divinities (Pantheon)===<br />
<br />
The large, tarot-sized cards are divinities. Their cost is determined by their placement on the Pantheon board. They are kept in separate decks until they are placed on the board by picking up the corresponding pantheon token during Age I.<br />
<br />
The pantheons are as follows:<br />
<br />
*Mesopotamian - green backs, science-related effects<br />
**Enki: When Enki is revealed, randomly draw 2 Progress tokens from those discarded at the beginning of the game. These tokens are placed face-up on Enki’s card. When you invoke Enki, choose one of these two Progress tokens and gain it. The other token is returned to the box with those discarded at the beginning of the game.<br />
**Ishtar: Grants the Law scientific symbol.<br />
**Nisaba: Place the Snake token on an opponent’s green card. Treat it as if you also have that symbol.<br />
<br />
*Phoenician - yellow backs, economy-related effects<br />
**Astarte: Place 7 coins from the bank on Astarte’s card. These are not part of your City’s Treasury, and so are thus protected against coin losses. It’s possible to spend them normally. At the end of the game, each coin still present on Astarte’s card is worth 1 victory point for you.<br />
**Baal: Steal a brown or grey card built by your opponent, it is added to the cards of your City.<br />
**Tanit: Take 12 coins from the bank.<br />
<br />
*Greek - blue backs, wild-card effects<br />
**Aphrodite: Worth 9 victory points.<br />
**Hades: Choose one card from the discard pile and construct it for free in your City.<br />
**Zeus: Put in the discard pile a card of your choice (face up or down) from the structure, as well as any tokens which may be present on that card.<br />
<br />
*Egyptian - grey backs, wonder-related effects<br />
**Anubis: Discard a card previously used to construct a Wonder (an opposing one or one of your own). The affected player doesn’t lose the instant effects previously granted by that Wonder (shields, coins, progress tokens, constructed or discarded card, replay effect). It is possible to rebuild this Wonder and thus apply its effects once again.<br />
**Isis: Choose a card from the discard pile and construct one of your Wonders for free using that card.<br />
**Ra: Steal an opponent’s Wonder which has not yet been constructed; it is added to your own Wonders.<br />
<br />
*Roman - red backs, military-related effects<br />
**Mars: Grants 2 shields.<br />
**Minerva: Place the Minerva pawn on any space of the Military Track. If the Conflict pawn would enter the space which contains the Minerva pawn, it instead stops moving and its movement ends. Then discard the Minerva pawn.<br />
**Neptune: Choose and discard a Military token without applying its effect. Then choose and apply the effect of another Military token (which is then discarded).<br />
<br />
These cards only show up if Pantheon expansion is on.<br />
<br />
== End Of An Age ==<br />
<br />
An age ends when either player takes the last card from the board. A new set of cards is dealt out in a predefined pattern.<br />
<br />
The player closest to the Military token (that is, the player most in danger of being conquered) chooses which player starts the next round. If the Military token is in the middle, then the last active player (the person who finished the previous age) chooses who starts the next round.<br />
<br />
== End Of The Game ==<br />
<br />
The game can end automatically if either player conquers the other, gets enough scientific symbols, or control all six chambers (Agora). But if neither of those conditions are met, then the game ends at the end of Age III.<br />
<br />
Players earn points from their points on cards (including guilds), Wonders, the final position of the Military token, the senates they controlled (1-3 points, only with Agora) and leftover money (3 coins converts to 1 point). The player with the most points wins! In case of a tie, victory is awarded to the player with the most civilian points (blue cards). If that is also a tie, then the final result is shared victory.</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Tutorial_reversi&diff=14566Tutorial reversi2022-09-04T02:54:45Z<p>Tabicat: /* Let it look like Reversi */</p>
<hr />
<div>{{Studio_Framework_Navigation}}<br />
<br />
== Introduction ==<br />
<br />
Using this tutorial, you can build a complete working game on the BGA environment: Reversi.<br />
<br />
Before you read this tutorial, you must:<br />
* Read the overall presentations of the BGA Framework ([[Studio|see here]]).<br />
* Know the [http://en.wikipedia.org/wiki/Reversi#Rules rules of Reversi].<br />
* Know the languages used on BGA: PHP, SQL, HTML, CSS, Javascript<br />
* Setup your development environment [http://en.doc.boardgamearena.com/First_steps_with_BGA_Studio First Steps with BGA Studio]<br />
<br />
== Create your first game ==<br />
<br />
''Note: you should already have created a project following instructions in [[First_steps_with_BGA_Studio#Create_a_new_game_project|Create a new game project]]. While you will find a '''reversi''' directory in your SFTP folder, do not use it for this tutorial. Instead, use the project you have created as an (empty) starting point.''<br />
<br />
With the initial skeleton of code provided in your project, you can already start a game from the BGA Studio:<br />
* Go to your [https://studio.boardgamearena.com/controlpanel studio Control panel], then Manage games and select your initial project. ''Note: there are warnings displayed about a missing BGG_ID and presentation text. You can ignore that for now.''<br />
* Click the Play link next to your project name. This will open the Play page and offer to create a new table for your project. ''Optional: click the Heart icon to add your project to your favorite games list.''<br />
* On the Play page, on the top of the page, make sure that your settings are "Simple game", "Real time" and "Manual".<br />
* Click "Create table" to create a table of your project. <br />
* For now, we are going to work with one player only, so use the (-) button to set the number of players to 1. Most of the time it is simpler to proceed with only one player during the early phase of development of your game, as it's easy and fast to start/stop games. If you choose to start with 2 players, you should see two names on the right: testdude0 and testdude1. To switch between them, press the red arrow button near their names; it will open another tab. This way you don't need to login and logout from multiple accounts.) <br />
* Reminder: Always use the "Express Start" button to start the game.<br />
<br />
Thus, you can start a "Reversi" game, and arrive on a void, empty game. Yeah.<br />
<br />
End the game by clicking on the game options icon on the top right, and then on "Express Stop".<br />
<br />
== (Optional) Editing the game information ==<br />
<br />
This step is optional and will fix the warnings on the project page (missing BGG_ID and presentation).<br />
* Edit your local copy of the gameinfo.inc.php file:<br />
** Change the 'bgg_id' value from 0 to 2389 - that's around line 37.<br />
** Add "1," to the players array - that's around line 41.<br />
** Change the presentation array content - that's around line 134. Uncomment one line and change the text. Remove the final comma if you keep only one line!<br />
* Upload the gameinfo.inc.php file to the SFTP server (see [[First_steps_with_BGA_Studio#Connect_to_your_SFTP_folder|Connect to your SFTP folder]]).<br />
* Go back to your project page, and in the "Game Information" section, click "Reload game information".<br />
* Finally, refresh the project page in your browser (usually CTRL-F5).<br />
<br />
== Let it look like Reversi ==<br />
<br />
It's always a good idea to start with a little bit of graphic work. Why? Because this helps to figure out how the final game will be, and issues that may appear later.<br />
<br />
Be careful designing the layout of your game: you must always keep in mind that players with a 1024px screen width must be able to play. Usually, it means that the width of the play area can be 750px (in the worst case).<br />
<br />
For Reversi, it's useless to have a 750x750px board - much too big, so we choose this one which fit perfectly (536x528):<br />
<br />
[[File:Board.jpg]]<br />
<br />
Note that we are using a jpg file. Jpg are lighter than png, so faster to load. Later we are going to use PNGs for discs for transparency purpose.<br />
<br />
Now, let's make it appear in our game:<br />
* upload board.jpg in your "img/" directory. Warning: use lowercase file names!<br />
* edit "reversi_reversi.tpl" to add a 'div' for your board.<br />
<br />
Note: If you are building this game by following the tutorial, you will have a different project name than 'reversi' (i.e. ''mygame''_''mygame''.tpl). The file names in your project will be different than shown in this tutorial, replacing 'reversi' with your project name. It should be trivial to find the right file in your project, but be sure that any code (other than comments) that references 'reversi' is changed to your actual project name.<br />
<br />
<pre><br />
<div id="board"><br />
</div><br />
</pre><br />
<br />
* edit your reversi.css file to transform it into a visible board:<br />
<br />
#board {<br />
width: 536px;<br />
height: 528px;<br />
background-image: url('img/board.jpg');<br />
}<br />
<br />
'''Important: refresh your page.''' Here's your board:<br />
<br />
[[File:reversi1.jpg]]<br />
<br />
If the board does not appear, refresh the page (always do this when you update the CSS file), and check the image filename. Remember file names are case sensitive!<br />
<br />
== Make the squares appear ==<br />
<br />
Now, we need to create some invisible HTML elements where squares are. These elements will be used as position references for white and black discs. <br />
We need 64 squares. To avoid writing 64 'div' elements on our template, we are going to use the "block" feature.<br />
<br />
Let's modify our template like this:<br />
<br />
<pre><br />
<div id="board"><br />
<!-- BEGIN square --><br />
<div id="square_{X}_{Y}" class="square" style="left: {LEFT}px; top: {TOP}px;"></div><br />
<!-- END square --><br />
</div><br />
</pre><br />
<br />
As you can see, we created a "square" block, with 4 variable elements: X, Y, LEFT and TOP. We are going to use this block 64 times during page load.<br />
<br />
Let's do it in our "reversi.view.php" file, inside the build_page function:<br />
<br />
<pre><br />
$this->page->begin_block( "reversi_reversi", "square" );<br />
<br />
$hor_scale = 64.8;<br />
$ver_scale = 64.4;<br />
for( $x=1; $x<=8; $x++ )<br />
{<br />
for( $y=1; $y<=8; $y++ )<br />
{<br />
$this->page->insert_block( "square", array(<br />
'X' => $x,<br />
'Y' => $y,<br />
'LEFT' => round( ($x-1)*$hor_scale+10 ),<br />
'TOP' => round( ($y-1)*$ver_scale+7 )<br />
) );<br />
} <br />
}<br />
</pre><br />
<br />
Note: as you can see, squares in our "board.jpg" files do not have an exact width/height in pixels, and that's the reason we are using floating point numbers here.<br />
<br />
Now, to finish our work and check if everything works fine, we are going to style our square a little bit in our CSS stylesheet:<br />
<br />
<pre><br />
#board {<br />
width: 536px;<br />
height: 528px;<br />
background-image: url('img/board.jpg');<br />
position: relative;<br />
}<br />
<br />
.square {<br />
width: 62px;<br />
height: 62px;<br />
position: absolute;<br />
background-color: red;<br />
}<br />
</pre><br />
<br />
Explanations:<br />
* With "position: relative" on board, we ensure square elements are positioned relatively to board.<br />
* For the test, we use a red background color for the square. This is a useful tip to figure out if everything is fine with invisible elements.<br />
<br />
Let's refresh and check our our (beautiful) squares:<br />
<br />
[[File:reversi2.jpg]]<br />
<br />
If the red squares do not appear, check your css file (Chrome DevTools: Application > Frames > top > Stylesheets > reversi.css). If your changes are not there try clearing your cache!<br />
<br />
Hint: Now that we know our squares are set up correctly, we can hide the red background. You can remove the "background-color: red;" line from your .square class in the CSS stylesheet.<br />
<br />
== The discs ==<br />
<br />
Now, our board is ready to receive some disc tokens!<br />
<br />
[Note: Throughout this tutorial, sometimes "tokens" is used, and sometimes "discs" is used. They are often swapped if you're looking at code in the reversi example project.]<br />
<br />
At first, we introduce a new 'div' element as a child of "board" to host all these tokens (in our template):<br />
<br />
<pre><br />
<!-- END square --><br />
<br />
<div id="tokens"><br />
</div><br />
</div><br />
</pre><br />
<br />
Then, let's introduce a new piece of art with the discs. We need some transparency here so we are using a png file:<br />
<br />
[[File:tokens.png]]<br />
<br />
Upload this image file "tokens.png" in your "img/" directory.<br />
<br />
Important: we are using ONE file for both discs. It's really important that you use a minimum number of graphic files for your game with this "CSS sprite" technique, because it makes the game loading faster and more reliable. [http://www.w3schools.com/css/css_image_sprites.asp Read more about CSS sprites].<br />
<br />
Now, let's separate the disc with some CSS stuff:<br />
<br />
<pre><br />
.token {<br />
width: 56px;<br />
height: 56px;<br />
position: absolute;<br />
background-image: url('img/tokens.png');<br />
}<br />
.tokencolor_ffffff { background-position: 0px 0px; }<br />
.tokencolor_000000 { background-position: -56px 0px; }<br />
</pre><br />
<br />
With this CSS code, we apply the classes "token" and "tokencolor_ffffff" to a div element and we've got a white token. Yeah.<br />
<br />
Note the "position: absolute" which allows us to position tokens on the board and make them "slide" to their positions.<br />
<br />
Now, let's make a first token appear on our board. Disc tokens are not visible at the beginning of the game: they appear dynamically during the game. For this reason, we are going to make them appear from our Javascript code, with a BGA Framework technique called "JS template".<br />
<br />
In our template file (reversi_reversi.tpl), let's create the piece of HTML needed to display our token:<br />
<br />
<pre><br />
<script type="text/javascript"><br />
<br />
// Templates<br />
<br />
var jstpl_token='<div class="token tokencolor_${color}" id="token_${x_y}"></div>';<br />
<br />
</script><br />
</pre><br />
<br />
Note: we already created the "templates" section for you in the game skeleton.<br />
<br />
As you can see, we defined a JS template named "jstpl_token" with a piece of HTML and two variables: the color of the token and its x/y coordinates. Note that the syntax of the argument is different for template block variables (braces <code>{}</code>) and JS template variables (dollar and braces <code>${}</code>).<br />
<br />
Now, let's create a method in our Javascript code (in the "reversi.js" file) that will make a token appear on the board, using this template. Add under the section //// Utility methods:<br />
<br />
<pre><br />
addTokenOnBoard: function( x, y, player )<br />
{<br />
dojo.place( this.format_block( 'jstpl_token', {<br />
x_y: x+'_'+y,<br />
color: this.gamedatas.players[ player ].color<br />
} ) , 'tokens' );<br />
<br />
this.placeOnObject( 'token_'+x+'_'+y, 'overall_player_board_'+player );<br />
this.slideToObject( 'token_'+x+'_'+y, 'square_'+x+'_'+y ).play();<br />
},<br />
</pre><br />
<br />
At first, with "dojo.place" and "this.format_block" methods, we create a HTML piece of code and insert it as a new child of "tokens" div element.<br />
<br />
Then, with BGA "this.placeOnObject" method, we place this element over the panel of some player. Immediately after, using BGA "this.slideToObject" method, we make the disc slide to the "square" element, its final destination.<br />
<br />
"'overall_player_board_'+player" refers to the div element that contains each player's information and avatar. By initially placing the token here, it gives the effect that the player's avatar is throwing the token onto the board.<br />
<br />
Note: don't forget to call the "play()", otherwise the token remains at its original location.<br />
<br />
Note: note that during all the process, the parent of the new disc HTML element will remain "tokens". placeOnObject and slideToObject methods are only moving the position of elements on screen, and they are not modifying the HTML tree.<br />
<br />
Before we can show a token, we need to set the player colors in the setupNewGame function in reversi.game.php:<br />
<pre><br />
$default_colors = array( "ffffff", "000000" );<br />
</pre><br />
<br />
Note: Probably you'll have to remove the line "self::reattributeColorsBasedOnPreferences( $players, $gameinfos['player_colors'] );".<br />
<br />
<br />
Now, to test if everything works fine, just add "this.addTokenOnBoard( 2, 2, this.player_id );" in the "setup" Javascript method in reversi.js, and restart the game.<br />
''Note: if the page fails to load with a "Javascript error: n is null" message, make sure you have added the "tokens" div in your template as instructed above.''<br />
<br />
A token should appear and slide immediately to its position, like this:<br />
<br />
[[File:reversi3.jpg]]<br />
<br />
== The database ==<br />
<br />
We did most of the client-side programming, so let's have a look on the other side now.<br />
<br />
To design the database model of our game, the best thing to do is to follow the "Go to game database" link at the bottom of our game, to access the database directly with a [http://www.phpmyadmin.net/ PhpMyAdmin] instance. Your PhpMyAdmin username/password is in your welcome email (and currently the same as the SFTP username/password).<br />
<br />
Then, you can create the tables you need for your game (do not remove existing tables!), and report every SQL command used in your "dbmodel.sql" file. How do you generate SQL to create table after creating the table in the UI? See [https://www.itsupportguides.com/knowledge-base/tech-tips-tricks/how-to-generate-sql-create-table-script-using-phpmyadmin/ here]. Add 'IF NOT EXISTS' to the CREATE TABLE sql (see example below).<br />
<br />
[[File:reversi4.jpg]]<br />
<br />
The database model of Reversi is very simple: just one table with the squares of the board. <br />
<br />
<pre><br />
CREATE TABLE IF NOT EXISTS `board` (<br />
`board_x` smallint(5) unsigned NOT NULL,<br />
`board_y` smallint(5) unsigned NOT NULL,<br />
`board_player` int(10) unsigned DEFAULT NULL,<br />
PRIMARY KEY (`board_x`,`board_y`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
</pre><br />
<br />
Add the above SQL to dbmodel.sql. Now, a new database with a "board" table will be created each time we start a Reversi game. This is why after modifying our dbmodel.sql it's a good time to stop & start again our game.<br />
<br />
== Setup the initial game position ==<br />
<br />
The "setupNewGame" method of our reversi.game.php is called during initial setup: this is the place to initialize our data and to place the initial tokens on the board (initially, there are 4 tokens on the board).<br />
<br />
Insert the following code ''between "// TODO: setup the initial game situation here" and "// Activate first player":''<br />
:<br />
<br />
<pre><br />
// Init the board<br />
$sql = "INSERT INTO board (board_x,board_y,board_player) VALUES ";<br />
$sql_values = array();<br />
list( $blackplayer_id, $whiteplayer_id ) = array_keys( $players );<br />
for( $x=1; $x<=8; $x++ )<br />
{<br />
for( $y=1; $y<=8; $y++ )<br />
{<br />
$token_value = "NULL";<br />
if( ($x==4 && $y==4) || ($x==5 && $y==5) ) // Initial positions of white player<br />
$token_value = "'$whiteplayer_id'";<br />
else if( ($x==4 && $y==5) || ($x==5 && $y==4) ) // Initial positions of black player<br />
$token_value = "'$blackplayer_id'";<br />
<br />
$sql_values[] = "('$x','$y',$token_value)";<br />
}<br />
}<br />
$sql .= implode( ',', $sql_values );<br />
self::DbQuery( $sql );<br />
</pre><br />
<br />
We create one table entry for each square, with a "NULL" value which means "empty square". For 4 specific squares, we place an initial token.<br />
<br />
At the end, we call activeNextPlayer to make the first player active at the beginning of the game - this line is already present in the default code template.<br />
<br />
As already instructed in the previous section, you need to remove the call to self::reattributeColorsBasedOnPreferences() in SetupNewGame() so that any player color preferences do not override the two colors supported here.<br />
<br />
Now, we need to make these tokens appear on the client side. The first step is to return the token positions with our "getAllDatas" PHP method (called during each page reload).<br />
Add the following lines in the "getAllDatas" method, after "// TODO: Gather all information about current game situation (visible by player $current_player_id).".<br />
<br />
<pre><br />
// Get reversi board token<br />
$result['board'] = self::getObjectListFromDB( "SELECT board_x x, board_y y, board_player player<br />
FROM board<br />
WHERE board_player IS NOT NULL" );<br />
</pre><br />
<br />
We are using the BGA framework "getObjectListFromDB" method that formats the result of this SQL query in a PHP array with x, y and player attributes. We add it to the result associative array with the key 'board'.<br />
<br />
Last, we process this array client side, and place a disc token on the board for each array item. We do this using our Javascript "setup" method:<br />
<br />
<pre><br />
for( var i in gamedatas.board )<br />
{<br />
var square = gamedatas.board[i];<br />
<br />
if( square.player !== null )<br />
{<br />
this.addTokenOnBoard( square.x, square.y, square.player );<br />
}<br />
}<br />
</pre><br />
<br />
Our "board" entry created in "getAllDatas" can be used here as "gamedatas.board" in our Javascript. We are using our previously developed "addTokenOnBoard" method.<br />
<br />
Reload... and here we are:<br />
<br />
[[File:reversi5.jpg]]<br />
<br />
It starts to smell Reversi here...<br />
<br />
== The game state machine ==<br />
<br />
Now, let's stop our game again, because we are going to start the core game logic.<br />
<br />
You already read [http://www.slideshare.net/boardgamearena/bga-studio-focus-on-bga-game-state-machine Focus on BGA game state machine], so you know that this is the heart of your game logic. For reversi, it's very simple. Here's a diagram of our game state machine:<br />
<br />
[[File:reversi6.jpg]]<br />
<br />
And here's our "states.inc.php", according to this diagram:<br />
<br />
<pre><br />
$machinestates = array(<br />
<br />
1 => array(<br />
"name" => "gameSetup",<br />
"description" => clienttranslate("Game setup"),<br />
"type" => "manager",<br />
"action" => "stGameSetup",<br />
"transitions" => array( "" => 10 )<br />
),<br />
<br />
10 => array(<br />
"name" => "playerTurn",<br />
"description" => clienttranslate('${actplayer} must play a disc'),<br />
"descriptionmyturn" => clienttranslate('${you} must play a disc'),<br />
"type" => "activeplayer",<br />
"args" => "argPlayerTurn",<br />
"possibleactions" => array( 'playDisc' ),<br />
"transitions" => array( "playDisc" => 11, "zombiePass" => 11 )<br />
),<br />
<br />
11 => array(<br />
"name" => "nextPlayer",<br />
"type" => "game",<br />
"action" => "stNextPlayer",<br />
"updateGameProgression" => true, <br />
"transitions" => array( "nextTurn" => 10, "cantPlay" => 11, "endGame" => 99 )<br />
),<br />
<br />
99 => array(<br />
"name" => "gameEnd",<br />
"description" => clienttranslate("End of game"),<br />
"type" => "manager",<br />
"action" => "stGameEnd",<br />
"args" => "argGameEnd"<br />
)<br />
<br />
);<br />
</pre><br />
<br />
Now, let's create in reversi.game.php the methods that are declared in this game states description file:<br />
* argPlayerTurn: referenced in the "args" property of the "playerTurn" state; this is the name of the method to call to retrieve arguments for this gamestate. Arguments are sent to the client side to be used on "onEnteringState" or to set arguments in the gamestate description.<br />
* stNextPlayer: referenced in the "action" property of the "nextPlayer" state; this is the name of the method to call when this game state become the current game state. <br />
<br />
... and start a new Reversi game.<br />
<br />
As you can see on the screen capture below, the BGA framework makes the game jump to our first game state "playerTurn" right after the initial setup. That's why the status bar contains the description of playerTurn state ("XXXX must play a disc"):<br />
<br />
[[File:reversi7.jpg]]<br />
<br />
== The rules ==<br />
<br />
We will use the "getPossibleMoves" PHP method to:<br />
* Indicate to the current player where she is allowed to play by returning a list of coordinates<br />
* Check if the player has the right to play in the spot they choose<br />
<br />
<blockquote><br />
Example of getPossibleMoves here https://gist.github.com/leocaseiro/a8bc2851bd0caddd06685b5035937d15<br />
</blockquote><br />
<br />
<br />
This is pure PHP programming here, and there are no special things from the BGA framework that can be used. This is why we won't go into details here. The overall idea is:<br />
* Create a "getTurnedOverDiscs(x,y)" method that returns coordinates of discs that would be turned over if a token would be played at x,y.<br />
* Loop through all free squares of the board and call the "getTurnedOverDiscs" method on each of them. If at least 1 token is turned over, this is a valid move.<br />
<br />
IMPORTANT: Keep in mind that making a database query is slow, so please don't load the entire game board with a SQL query multiple times. In our implementation, we load the entire board once at the beginning of "getPossibleMoves", and then pass the board as an argument to all methods.<br />
<br />
If you want to look into details, please look at the "utility method" sections of reversi.game.php. If building the tutorial yourself, copy the functions under "Utility functions" comment from the Reversi tutorial.<br />
<br />
== Display allowed moves ==<br />
<br />
Now we want to highlight the squares where the player can place a disc.<br />
<br />
To do this, we add a "argPlayerTurn" method in reversi.game.php. This method is called on the server each time we enter into "playerTurn" game state, and its result is transferred automatically to the client-side:<br />
<br />
<pre><br />
function argPlayerTurn()<br />
{<br />
return array(<br />
'possibleMoves' => self::getPossibleMoves( self::getActivePlayerId() )<br />
);<br />
}<br />
</pre><br />
<br />
We use the "getPossibleMoves" method we just developed.<br />
<br />
Each time we enter into a new game state, we use the "onEnteringState" Javascript method (in the reversi.js file, under "Game & client states"). This lets us use the data returned by the method above on the client side.<br />
<br />
<pre><br />
onEnteringState: function( stateName, args )<br />
{<br />
console.log( 'Entering state: '+stateName );<br />
<br />
switch( stateName )<br />
{<br />
case 'playerTurn':<br />
this.updatePossibleMoves( args.args.possibleMoves );<br />
break;<br />
}<br />
},<br />
</pre><br />
<br />
So, when we enter into "playerTurn" game state, we call our "updatePossibleMoves" method (under the "Utility functions" section). This method looks like this:<br />
<br />
<pre><br />
updatePossibleMoves: function( possibleMoves )<br />
{<br />
// Remove current possible moves<br />
dojo.query( '.possibleMove' ).removeClass( 'possibleMove' );<br />
<br />
for( var x in possibleMoves )<br />
{<br />
for( var y in possibleMoves[ x ] )<br />
{<br />
// x,y is a possible move<br />
dojo.addClass( 'square_'+x+'_'+y, 'possibleMove' );<br />
} <br />
}<br />
<br />
this.addTooltipToClass( 'possibleMove', '', _('Place a disc here') );<br />
},<br />
</pre><br />
Here's what this does. At first, it removes all "possibleMove" classes currently applied with the very useful combination of "dojo.query" and "removeClass" method.<br />
<br />
Then it loops through all possible moves our PHP "updatePossibleMoves" function created for us, and adds the "possibleMove" class to each corresponding square.<br />
<br />
Finally, it uses the BGA framework "addTooltipToClass" method to associate a tooltip to all those highlighted squares so that players can understand their meaning.<br />
<br />
To see the possible moves we need to create a CSS class ("possibleMove") that can be applied to a "square" element to highlight it:<br />
<pre><br />
.possibleMove {<br />
background-color: white;<br />
opacity: 0.2;<br />
filter:alpha(opacity=20); /* For IE8 and earlier */ <br />
cursor: pointer; <br />
}<br />
</pre><br />
<br />
<br />
<br />
And here we are:<br />
<br />
[[File:reversi8.jpg.jpg]]<br />
<br />
== Let's play ==<br />
<br />
From now, it's better to restart a game with 2 players, because we are going to implement a complete Reversi turn. The summary of what we are going to do is:<br />
* When we click on a "possibleMove" square, send the move to the server.<br />
* Server side, check the move is correct, apply Reversi rules and jump to next player.<br />
* Client side, change the disc position to reflect the move.<br />
<br />
First we associate each click on a square to one of our methods using our Javascript "setup" method:<br />
<br />
<pre><br />
dojo.query( '.square' ).connect( 'onclick', this, 'onPlayDisc' );<br />
</pre><br />
<br />
Note the use of the "dojo.query" method to get all HTML elements with "square" class in just one function call. Now, our "onPlayDisc" method is called each time someone clicks on a square.<br />
<br />
Here's our "onPlayDisc" method below:<br />
<br />
<pre><br />
onPlayDisc: function( evt )<br />
{<br />
// Stop this event propagation<br />
dojo.stopEvent( evt );<br />
<br />
// Get the clicked square x and y<br />
// Note: square id format is "square_X_Y"<br />
var coords = evt.currentTarget.id.split('_');<br />
var x = coords[1];<br />
var y = coords[2];<br />
<br />
if( ! dojo.hasClass( 'square_'+x+'_'+y, 'possibleMove' ) )<br />
{<br />
// This is not a possible move => the click does nothing<br />
return ;<br />
}<br />
<br />
if( this.checkAction( 'playDisc' ) ) // Check that this action is possible at this moment<br />
{ <br />
this.ajaxcall( "/reversi/reversi/playDisc.html", {<br />
x:x,<br />
y:y<br />
}, this, function( result ) {} );<br />
} <br />
},<br />
</pre><br />
<br />
What we do here is:<br />
* We stop the propagation of the Javascript "onclick" event. Otherwise, it can lead to random behavior so it's always a good idea.<br />
* We get the x/y coordinates of the square by using "evt.currentTarget.id".<br />
* We check that clicked square has the "possibleMove" class, otherwise we know for sure that we can't play there.<br />
* We check that "playDisc" action is possible, according to current game state (see "possibleactions" entry in our "playerTurn" game state defined above). This check is important to avoid issues if a player double clicks on a square.<br />
* Finally, we make a call to the server using BGA "ajaxcall" method with argument x and y. Be sure to update the first parameter to match your game if building the tutorial yourself. E.g. "/yourgamename/yourgamename/playDisc.html"<br />
<br />
Now, we have to manage this "playDisc" action on the server side. At first, we introduce a "playDisc" entry point in our "reversi.action.php":<br />
<br />
<pre><br />
public function playDisc()<br />
{<br />
self::setAjaxMode(); <br />
$x = self::getArg( "x", AT_posint, true );<br />
$y = self::getArg( "y", AT_posint, true );<br />
$result = $this->game->playDisc( $x, $y );<br />
self::ajaxResponse( );<br />
}<br />
</pre><br />
<br />
As you can see, we get the 2 arguments x and y from the javascript call, and call a corresponding "playDisc" method in our game logic (reversi.game.php).<br />
<br />
Now, let's have a look of this playDisc method:<br />
<br />
<pre><br />
function playDisc( $x, $y )<br />
{<br />
// Check that this player is active and that this action is possible at this moment<br />
self::checkAction( 'playDisc' ); <br />
</pre><br />
<br />
... at first, we check that this action is possible according to current game state (see "possible action"). We already did it on client side, but it's important to do it on server side too (otherwise it would be possible to cheat).<br />
<br />
<pre><br />
// Now, check if this is a possible move<br />
$board = self::getBoard();<br />
$player_id = self::getActivePlayerId();<br />
$turnedOverDiscs = self::getTurnedOverDiscs( $x, $y, $player_id, $board );<br />
<br />
if( count( $turnedOverDiscs ) > 0 )<br />
{<br />
// This move is possible!<br />
</pre><br />
<br />
...now, we are using the "getTurnedOverDiscs" method again to check that this move is possible.<br />
<br />
<pre><br />
// Let's place a disc at x,y and return all "$returned" discs to the active player<br />
<br />
$sql = "UPDATE board SET board_player='$player_id'<br />
WHERE ( board_x, board_y) IN ( ";<br />
<br />
foreach( $turnedOverDiscs as $turnedOver )<br />
{<br />
$sql .= "('".$turnedOver['x']."','".$turnedOver['y']."'),";<br />
}<br />
$sql .= "('$x','$y') ) ";<br />
<br />
self::DbQuery( $sql );<br />
<br />
</pre><br />
<br />
... we update the database to change the color of all turned over disc + the disc we just placed.<br />
<br />
<pre><br />
// Update scores according to the number of disc on board<br />
$sql = "UPDATE player<br />
SET player_score = (<br />
SELECT COUNT( board_x ) FROM board WHERE board_player=player_id<br />
)";<br />
self::DbQuery( $sql );<br />
<br />
// Statistics<br />
self::incStat( count( $turnedOverDiscs ), "turnedOver", $player_id );<br />
if( ($x==1 && $y==1) || ($x==8 && $y==1) || ($x==1 && $y==8) || ($x==8 && $y==8) )<br />
self::incStat( 1, 'discPlayedOnCorner', $player_id );<br />
else if( $x==1 || $x==8 || $y==1 || $y==8 )<br />
self::incStat( 1, 'discPlayedOnBorder', $player_id );<br />
else if( $x>=3 && $x<=6 && $y>=3 && $y<=6 )<br />
self::incStat( 1, 'discPlayedOnCenter', $player_id );<br />
<br />
</pre><br />
<br />
... now, we update both player score by counting all disc, and we manage game statistics.<br />
<br />
<pre><br />
// Notify<br />
self::notifyAllPlayers( "playDisc", clienttranslate( '${player_name} plays a disc and turns over ${returned_nbr} disc(s)' ), array(<br />
'player_id' => $player_id,<br />
'player_name' => self::getActivePlayerName(),<br />
'returned_nbr' => count( $turnedOverDiscs ),<br />
'x' => $x,<br />
'y' => $y<br />
) );<br />
<br />
self::notifyAllPlayers( "turnOverDiscs", '', array(<br />
'player_id' => $player_id,<br />
'turnedOver' => $turnedOverDiscs<br />
) );<br />
<br />
$newScores = self::getCollectionFromDb( "SELECT player_id, player_score FROM player", true );<br />
self::notifyAllPlayers( "newScores", "", array(<br />
"scores" => $newScores<br />
) );<br />
</pre><br />
<br />
... then we notify about all these changes. We are using for that 3 notifications ('playDisc', 'turnOverDiscs' and 'newScores' that we are going to implement on client side later). Note that the description of the 'playDisc' notification will be logged in the game log.<br />
<br />
<pre><br />
// Then, go to the next state<br />
$this->gamestate->nextState( 'playDisc' );<br />
}<br />
else<br />
throw new BgaSystemException( "Impossible move" );<br />
}<br />
</pre><br />
<br />
... finally, we jump to the next game state if everything goes fine ('playDisc' is the name of a transition in the 'playerTurn' game state description above which leads to state 11 which is 'nextPlayer').<br />
<br />
To make the statistics work, we have to initialize them in stats.inc.php:<br />
<br />
<pre><br />
// Statistics existing for each player<br />
"player" => array(<br />
<br />
"discPlayedOnCorner" => array( "id"=> 10,<br />
"name" => totranslate("Discs played on a corner"), <br />
"type" => "int" ),<br />
<br />
"discPlayedOnBorder" => array( "id"=> 11,<br />
"name" => totranslate("Discs played on a border"), <br />
"type" => "int" ),<br />
<br />
"discPlayedOnCenter" => array( "id"=> 12,<br />
"name" => totranslate("Discs played on board center part"), <br />
"type" => "int" ),<br />
<br />
"turnedOver" => array( "id"=> 13,<br />
"name" => totranslate("Number of discs turned over"), <br />
"type" => "int" ) <br />
)<br />
</pre><br />
<br />
A last thing to do on the server side is to activate the next player when we enter the "nextPlayer" game state (in the "reversi.game.php" file, under "Game state reactions"):<br />
<br />
<pre><br />
function stNextPlayer()<br />
{<br />
// Active next player<br />
$player_id = self::activeNextPlayer();<br />
<br />
// Check if both player has at least 1 discs, and if there are free squares to play<br />
$player_to_discs = self::getCollectionFromDb( "SELECT board_player, COUNT( board_x )<br />
FROM board<br />
GROUP BY board_player", true );<br />
<br />
if( ! isset( $player_to_discs[ null ] ) )<br />
{<br />
// Index 0 has not been set => there's no more free place on the board !<br />
// => end of the game<br />
$this->gamestate->nextState( 'endGame' );<br />
return ;<br />
}<br />
else if( ! isset( $player_to_discs[ $player_id ] ) )<br />
{<br />
// Active player has no more disc on the board => he looses immediately<br />
$this->gamestate->nextState( 'endGame' );<br />
return ;<br />
}<br />
<br />
// Can this player play?<br />
<br />
$possibleMoves = self::getPossibleMoves( $player_id );<br />
if( count( $possibleMoves ) == 0 )<br />
{<br />
<br />
// This player can't play<br />
// Can his opponent play ?<br />
$opponent_id = self::getUniqueValueFromDb( "SELECT player_id FROM player WHERE player_id!='$player_id' " );<br />
if( count( self::getPossibleMoves( $opponent_id ) ) == 0 )<br />
{<br />
// Nobody can move => end of the game<br />
$this->gamestate->nextState( 'endGame' );<br />
}<br />
else<br />
{ <br />
// => pass his turn<br />
$this->gamestate->nextState( 'cantPlay' );<br />
}<br />
}<br />
else<br />
{<br />
// This player can play. Give him some extra time<br />
self::giveExtraTime( $player_id );<br />
$this->gamestate->nextState( 'nextTurn' );<br />
}<br />
<br />
}<br />
</pre><br />
<br />
Now, when we play a disc, the rules are checked and the disc appears in the database.<br />
<br />
[[File:reversi9.jpg]]<br />
<br />
Of course, as we don't manage notifications on client side, we need to press F5 after each move to see the changes on the board.<br />
<br />
== Make the move appear automatically ==<br />
<br />
Now, what we have to do is process the notifications sent by the server and make the move appear on the interface.<br />
<br />
In our "setupNotifications" method, we register 2 methods for the 2 notifications we created at the previous step ('playDisc' and 'turnOverDiscs'):<br />
<br />
<pre><br />
dojo.subscribe( 'playDisc', this, "notif_playDisc" );<br />
this.notifqueue.setSynchronous( 'playDisc', 500 );<br />
dojo.subscribe( 'turnOverDiscs', this, "notif_turnOverDiscs" );<br />
this.notifqueue.setSynchronous( 'turnOverDiscs', 1500 );<br />
dojo.subscribe( 'newScores', this, "notif_newScores" );<br />
this.notifqueue.setSynchronous( 'newScores', 500 );<br />
</pre><br />
<br />
As you can see, we associate each of our 3 notifications with a method prefixed with "notif_". We also define these notifications as "synchronous", with a duration in millisecond. It tells the user interface to wait some time after executing the notification, to let the animation end before starting the next notification. In our specific case, the animation will be the following:<br />
* Make a disc slide from the player panel to its place on the board<br />
* (wait 500ms)<br />
* Make all turned over discs blink (and of course turned them over)<br />
* (wait 1500ms)<br />
* Update the player scores<br />
* (wait 500ms)<br />
<br />
The 2nd parameter in dojo.subscribe call (this) is the 'context', and will be passed in as a parameter to the specified method.<br />
<br />
Let's have a look now on the "playDisc" notification handler method:<br />
<br />
<pre><br />
notif_playDisc: function( notif )<br />
{<br />
// Remove current possible moves (makes the board more clear)<br />
dojo.query( '.possibleMove' ).removeClass( 'possibleMove' ); <br />
<br />
this.addTokenOnBoard( notif.args.x, notif.args.y, notif.args.player_id );<br />
},<br />
</pre><br />
<br />
No surprise here, we re-used some existing stuff to:<br />
* Remove the highlighted squares.<br />
* Add a new disc on board, coming from player panel.<br />
<br />
Now, here's the method that handles the turnOverDiscs notification:<br />
<br />
<pre><br />
notif_turnOverDiscs: function( notif )<br />
{<br />
// Get the color of the player who is returning the discs<br />
var targetColor = this.gamedatas.players[ notif.args.player_id ].color;<br />
<br />
// Make these discs blink and set them to the specified color<br />
for( var i in notif.args.turnedOver )<br />
{<br />
var token = notif.args.turnedOver[ i ];<br />
<br />
// Make the token blink 2 times<br />
var anim = dojo.fx.chain( [<br />
dojo.fadeOut( { node: 'token_'+token.x+'_'+token.y } ),<br />
dojo.fadeIn( { node: 'token_'+token.x+'_'+token.y } ),<br />
dojo.fadeOut( { <br />
node: 'token_'+token.x+'_'+token.y,<br />
onEnd: function( node ) {<br />
<br />
// Remove any color class<br />
dojo.removeClass( node, [ 'tokencolor_000000', 'tokencolor_ffffff' ] );<br />
// ... and add the good one<br />
dojo.addClass( node, 'tokencolor_'+targetColor );<br />
<br />
} <br />
} ),<br />
dojo.fadeIn( { node: 'token_'+token.x+'_'+token.y } )<br />
<br />
] ); // end of dojo.fx.chain<br />
<br />
// ... and launch the animation<br />
anim.play(); <br />
}<br />
},<br />
</pre><br />
<br />
The list of the discs to be turned over has been made available by our server side code in "notif.args.turnedOver" (see previous paragraph). We loop through all these discs, and create a complex animation using dojo.Animation for each of them. The complete documentation on dojo animations [http://dojotoolkit.org/documentation/tutorials/1.6/animation/ can be found here].<br />
<br />
In few words: we create a chain of 4 animations to make the disc fade out, fade in, fade out again, and fade in again. At the end of the second fade out, we change the color of the disc. Finally, we launch the animation with "play()".<br />
<br />
And Also the notification to update the scores:<br />
<br />
<pre><br />
notif_newScores: function( notif )<br />
{<br />
for( var player_id in notif.args.scores )<br />
{<br />
var newScore = notif.args.scores[ player_id ];<br />
this.scoreCtrl[ player_id ].toValue( newScore );<br />
}<br />
},<br />
</pre><br />
<br />
<br />
[[Category:Studio]]</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Tutorial_reversi&diff=14565Tutorial reversi2022-09-03T16:30:56Z<p>Tabicat: /* Create your first game */</p>
<hr />
<div>{{Studio_Framework_Navigation}}<br />
<br />
== Introduction ==<br />
<br />
Using this tutorial, you can build a complete working game on the BGA environment: Reversi.<br />
<br />
Before you read this tutorial, you must:<br />
* Read the overall presentations of the BGA Framework ([[Studio|see here]]).<br />
* Know the [http://en.wikipedia.org/wiki/Reversi#Rules rules of Reversi].<br />
* Know the languages used on BGA: PHP, SQL, HTML, CSS, Javascript<br />
* Setup your development environment [http://en.doc.boardgamearena.com/First_steps_with_BGA_Studio First Steps with BGA Studio]<br />
<br />
== Create your first game ==<br />
<br />
''Note: you should already have created a project following instructions in [[First_steps_with_BGA_Studio#Create_a_new_game_project|Create a new game project]]. While you will find a '''reversi''' directory in your SFTP folder, do not use it for this tutorial. Instead, use the project you have created as an (empty) starting point.''<br />
<br />
With the initial skeleton of code provided in your project, you can already start a game from the BGA Studio:<br />
* Go to your [https://studio.boardgamearena.com/controlpanel studio Control panel], then Manage games and select your initial project. ''Note: there are warnings displayed about a missing BGG_ID and presentation text. You can ignore that for now.''<br />
* Click the Play link next to your project name. This will open the Play page and offer to create a new table for your project. ''Optional: click the Heart icon to add your project to your favorite games list.''<br />
* On the Play page, on the top of the page, make sure that your settings are "Simple game", "Real time" and "Manual".<br />
* Click "Create table" to create a table of your project. <br />
* For now, we are going to work with one player only, so use the (-) button to set the number of players to 1. Most of the time it is simpler to proceed with only one player during the early phase of development of your game, as it's easy and fast to start/stop games. If you choose to start with 2 players, you should see two names on the right: testdude0 and testdude1. To switch between them, press the red arrow button near their names; it will open another tab. This way you don't need to login and logout from multiple accounts.) <br />
* Reminder: Always use the "Express Start" button to start the game.<br />
<br />
Thus, you can start a "Reversi" game, and arrive on a void, empty game. Yeah.<br />
<br />
End the game by clicking on the game options icon on the top right, and then on "Express Stop".<br />
<br />
== (Optional) Editing the game information ==<br />
<br />
This step is optional and will fix the warnings on the project page (missing BGG_ID and presentation).<br />
* Edit your local copy of the gameinfo.inc.php file:<br />
** Change the 'bgg_id' value from 0 to 2389 - that's around line 37.<br />
** Add "1," to the players array - that's around line 41.<br />
** Change the presentation array content - that's around line 134. Uncomment one line and change the text. Remove the final comma if you keep only one line!<br />
* Upload the gameinfo.inc.php file to the SFTP server (see [[First_steps_with_BGA_Studio#Connect_to_your_SFTP_folder|Connect to your SFTP folder]]).<br />
* Go back to your project page, and in the "Game Information" section, click "Reload game information".<br />
* Finally, refresh the project page in your browser (usually CTRL-F5).<br />
<br />
== Let it look like Reversi ==<br />
<br />
It's always a good idea to start with a little bit of graphic work. Why? Because this helps to figure out how the final game will be, and issues that may appear later.<br />
<br />
Be careful designing the layout of your game: you must always keep in mind that players with a 1024px screen width must be able to play. Usually, it means that the width of the play area can be 750px (in the worst case).<br />
<br />
For Reversi, it's useless to have a 750x750px board - much too big, so we choose this one which fit perfectly (536x528):<br />
<br />
[[File:Board.jpg]]<br />
<br />
Note that we are using a jpg file. Jpg are lighter than png, so faster to load. Later we are going to use PNGs for discs for transparency purpose.<br />
<br />
Now, let's make it appear in our game:<br />
* upload board.jpg in your "img/" directory. Warning: use lowercase file names!<br />
* edit "reversi_reversi.tpl" to add a 'div' for your board.<br />
<br />
Note: If you are building this game by following the tutorial, you will have a different project name than 'reversi'. The file names in your project will be different than shown in this tutorial, replacing 'reversi' with your project name. It should be trivial to find the right file in your project, but be sure that any code (other than comments) that references 'reversi' is changed to your actual project name.<br />
<br />
<pre><br />
<div id="board"><br />
</div><br />
</pre><br />
<br />
* edit your reversi.css file to transform it into a visible board:<br />
<br />
#board {<br />
width: 536px;<br />
height: 528px;<br />
background-image: url('img/board.jpg');<br />
}<br />
<br />
'''Important: refresh your page.''' Here's your board:<br />
<br />
[[File:reversi1.jpg]]<br />
<br />
If the board does not appear, refresh the page (always do this when you update the CSS file), and check the image filename. Remember file names are case sensitive!<br />
<br />
== Make the squares appear ==<br />
<br />
Now, we need to create some invisible HTML elements where squares are. These elements will be used as position references for white and black discs. <br />
We need 64 squares. To avoid writing 64 'div' elements on our template, we are going to use the "block" feature.<br />
<br />
Let's modify our template like this:<br />
<br />
<pre><br />
<div id="board"><br />
<!-- BEGIN square --><br />
<div id="square_{X}_{Y}" class="square" style="left: {LEFT}px; top: {TOP}px;"></div><br />
<!-- END square --><br />
</div><br />
</pre><br />
<br />
As you can see, we created a "square" block, with 4 variable elements: X, Y, LEFT and TOP. We are going to use this block 64 times during page load.<br />
<br />
Let's do it in our "reversi.view.php" file, inside the build_page function:<br />
<br />
<pre><br />
$this->page->begin_block( "reversi_reversi", "square" );<br />
<br />
$hor_scale = 64.8;<br />
$ver_scale = 64.4;<br />
for( $x=1; $x<=8; $x++ )<br />
{<br />
for( $y=1; $y<=8; $y++ )<br />
{<br />
$this->page->insert_block( "square", array(<br />
'X' => $x,<br />
'Y' => $y,<br />
'LEFT' => round( ($x-1)*$hor_scale+10 ),<br />
'TOP' => round( ($y-1)*$ver_scale+7 )<br />
) );<br />
} <br />
}<br />
</pre><br />
<br />
Note: as you can see, squares in our "board.jpg" files do not have an exact width/height in pixels, and that's the reason we are using floating point numbers here.<br />
<br />
Now, to finish our work and check if everything works fine, we are going to style our square a little bit in our CSS stylesheet:<br />
<br />
<pre><br />
#board {<br />
width: 536px;<br />
height: 528px;<br />
background-image: url('img/board.jpg');<br />
position: relative;<br />
}<br />
<br />
.square {<br />
width: 62px;<br />
height: 62px;<br />
position: absolute;<br />
background-color: red;<br />
}<br />
</pre><br />
<br />
Explanations:<br />
* With "position: relative" on board, we ensure square elements are positioned relatively to board.<br />
* For the test, we use a red background color for the square. This is a useful tip to figure out if everything is fine with invisible elements.<br />
<br />
Let's refresh and check our our (beautiful) squares:<br />
<br />
[[File:reversi2.jpg]]<br />
<br />
If the red squares do not appear, check your css file (Chrome DevTools: Application > Frames > top > Stylesheets > reversi.css). If your changes are not there try clearing your cache!<br />
<br />
Hint: Now that we know our squares are set up correctly, we can hide the red background. You can remove the "background-color: red;" line from your .square class in the CSS stylesheet.<br />
<br />
== The discs ==<br />
<br />
Now, our board is ready to receive some disc tokens!<br />
<br />
[Note: Throughout this tutorial, sometimes "tokens" is used, and sometimes "discs" is used. They are often swapped if you're looking at code in the reversi example project.]<br />
<br />
At first, we introduce a new 'div' element as a child of "board" to host all these tokens (in our template):<br />
<br />
<pre><br />
<!-- END square --><br />
<br />
<div id="tokens"><br />
</div><br />
</div><br />
</pre><br />
<br />
Then, let's introduce a new piece of art with the discs. We need some transparency here so we are using a png file:<br />
<br />
[[File:tokens.png]]<br />
<br />
Upload this image file "tokens.png" in your "img/" directory.<br />
<br />
Important: we are using ONE file for both discs. It's really important that you use a minimum number of graphic files for your game with this "CSS sprite" technique, because it makes the game loading faster and more reliable. [http://www.w3schools.com/css/css_image_sprites.asp Read more about CSS sprites].<br />
<br />
Now, let's separate the disc with some CSS stuff:<br />
<br />
<pre><br />
.token {<br />
width: 56px;<br />
height: 56px;<br />
position: absolute;<br />
background-image: url('img/tokens.png');<br />
}<br />
.tokencolor_ffffff { background-position: 0px 0px; }<br />
.tokencolor_000000 { background-position: -56px 0px; }<br />
</pre><br />
<br />
With this CSS code, we apply the classes "token" and "tokencolor_ffffff" to a div element and we've got a white token. Yeah.<br />
<br />
Note the "position: absolute" which allows us to position tokens on the board and make them "slide" to their positions.<br />
<br />
Now, let's make a first token appear on our board. Disc tokens are not visible at the beginning of the game: they appear dynamically during the game. For this reason, we are going to make them appear from our Javascript code, with a BGA Framework technique called "JS template".<br />
<br />
In our template file (reversi_reversi.tpl), let's create the piece of HTML needed to display our token:<br />
<br />
<pre><br />
<script type="text/javascript"><br />
<br />
// Templates<br />
<br />
var jstpl_token='<div class="token tokencolor_${color}" id="token_${x_y}"></div>';<br />
<br />
</script><br />
</pre><br />
<br />
Note: we already created the "templates" section for you in the game skeleton.<br />
<br />
As you can see, we defined a JS template named "jstpl_token" with a piece of HTML and two variables: the color of the token and its x/y coordinates. Note that the syntax of the argument is different for template block variables (braces <code>{}</code>) and JS template variables (dollar and braces <code>${}</code>).<br />
<br />
Now, let's create a method in our Javascript code (in the "reversi.js" file) that will make a token appear on the board, using this template. Add under the section //// Utility methods:<br />
<br />
<pre><br />
addTokenOnBoard: function( x, y, player )<br />
{<br />
dojo.place( this.format_block( 'jstpl_token', {<br />
x_y: x+'_'+y,<br />
color: this.gamedatas.players[ player ].color<br />
} ) , 'tokens' );<br />
<br />
this.placeOnObject( 'token_'+x+'_'+y, 'overall_player_board_'+player );<br />
this.slideToObject( 'token_'+x+'_'+y, 'square_'+x+'_'+y ).play();<br />
},<br />
</pre><br />
<br />
At first, with "dojo.place" and "this.format_block" methods, we create a HTML piece of code and insert it as a new child of "tokens" div element.<br />
<br />
Then, with BGA "this.placeOnObject" method, we place this element over the panel of some player. Immediately after, using BGA "this.slideToObject" method, we make the disc slide to the "square" element, its final destination.<br />
<br />
"'overall_player_board_'+player" refers to the div element that contains each player's information and avatar. By initially placing the token here, it gives the effect that the player's avatar is throwing the token onto the board.<br />
<br />
Note: don't forget to call the "play()", otherwise the token remains at its original location.<br />
<br />
Note: note that during all the process, the parent of the new disc HTML element will remain "tokens". placeOnObject and slideToObject methods are only moving the position of elements on screen, and they are not modifying the HTML tree.<br />
<br />
Before we can show a token, we need to set the player colors in the setupNewGame function in reversi.game.php:<br />
<pre><br />
$default_colors = array( "ffffff", "000000" );<br />
</pre><br />
<br />
Note: Probably you'll have to remove the line "self::reattributeColorsBasedOnPreferences( $players, $gameinfos['player_colors'] );".<br />
<br />
<br />
Now, to test if everything works fine, just add "this.addTokenOnBoard( 2, 2, this.player_id );" in the "setup" Javascript method in reversi.js, and restart the game.<br />
''Note: if the page fails to load with a "Javascript error: n is null" message, make sure you have added the "tokens" div in your template as instructed above.''<br />
<br />
A token should appear and slide immediately to its position, like this:<br />
<br />
[[File:reversi3.jpg]]<br />
<br />
== The database ==<br />
<br />
We did most of the client-side programming, so let's have a look on the other side now.<br />
<br />
To design the database model of our game, the best thing to do is to follow the "Go to game database" link at the bottom of our game, to access the database directly with a [http://www.phpmyadmin.net/ PhpMyAdmin] instance. Your PhpMyAdmin username/password is in your welcome email (and currently the same as the SFTP username/password).<br />
<br />
Then, you can create the tables you need for your game (do not remove existing tables!), and report every SQL command used in your "dbmodel.sql" file. How do you generate SQL to create table after creating the table in the UI? See [https://www.itsupportguides.com/knowledge-base/tech-tips-tricks/how-to-generate-sql-create-table-script-using-phpmyadmin/ here]. Add 'IF NOT EXISTS' to the CREATE TABLE sql (see example below).<br />
<br />
[[File:reversi4.jpg]]<br />
<br />
The database model of Reversi is very simple: just one table with the squares of the board. <br />
<br />
<pre><br />
CREATE TABLE IF NOT EXISTS `board` (<br />
`board_x` smallint(5) unsigned NOT NULL,<br />
`board_y` smallint(5) unsigned NOT NULL,<br />
`board_player` int(10) unsigned DEFAULT NULL,<br />
PRIMARY KEY (`board_x`,`board_y`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
</pre><br />
<br />
Add the above SQL to dbmodel.sql. Now, a new database with a "board" table will be created each time we start a Reversi game. This is why after modifying our dbmodel.sql it's a good time to stop & start again our game.<br />
<br />
== Setup the initial game position ==<br />
<br />
The "setupNewGame" method of our reversi.game.php is called during initial setup: this is the place to initialize our data and to place the initial tokens on the board (initially, there are 4 tokens on the board).<br />
<br />
Insert the following code ''between "// TODO: setup the initial game situation here" and "// Activate first player":''<br />
:<br />
<br />
<pre><br />
// Init the board<br />
$sql = "INSERT INTO board (board_x,board_y,board_player) VALUES ";<br />
$sql_values = array();<br />
list( $blackplayer_id, $whiteplayer_id ) = array_keys( $players );<br />
for( $x=1; $x<=8; $x++ )<br />
{<br />
for( $y=1; $y<=8; $y++ )<br />
{<br />
$token_value = "NULL";<br />
if( ($x==4 && $y==4) || ($x==5 && $y==5) ) // Initial positions of white player<br />
$token_value = "'$whiteplayer_id'";<br />
else if( ($x==4 && $y==5) || ($x==5 && $y==4) ) // Initial positions of black player<br />
$token_value = "'$blackplayer_id'";<br />
<br />
$sql_values[] = "('$x','$y',$token_value)";<br />
}<br />
}<br />
$sql .= implode( ',', $sql_values );<br />
self::DbQuery( $sql );<br />
</pre><br />
<br />
We create one table entry for each square, with a "NULL" value which means "empty square". For 4 specific squares, we place an initial token.<br />
<br />
At the end, we call activeNextPlayer to make the first player active at the beginning of the game - this line is already present in the default code template.<br />
<br />
As already instructed in the previous section, you need to remove the call to self::reattributeColorsBasedOnPreferences() in SetupNewGame() so that any player color preferences do not override the two colors supported here.<br />
<br />
Now, we need to make these tokens appear on the client side. The first step is to return the token positions with our "getAllDatas" PHP method (called during each page reload).<br />
Add the following lines in the "getAllDatas" method, after "// TODO: Gather all information about current game situation (visible by player $current_player_id).".<br />
<br />
<pre><br />
// Get reversi board token<br />
$result['board'] = self::getObjectListFromDB( "SELECT board_x x, board_y y, board_player player<br />
FROM board<br />
WHERE board_player IS NOT NULL" );<br />
</pre><br />
<br />
We are using the BGA framework "getObjectListFromDB" method that formats the result of this SQL query in a PHP array with x, y and player attributes. We add it to the result associative array with the key 'board'.<br />
<br />
Last, we process this array client side, and place a disc token on the board for each array item. We do this using our Javascript "setup" method:<br />
<br />
<pre><br />
for( var i in gamedatas.board )<br />
{<br />
var square = gamedatas.board[i];<br />
<br />
if( square.player !== null )<br />
{<br />
this.addTokenOnBoard( square.x, square.y, square.player );<br />
}<br />
}<br />
</pre><br />
<br />
Our "board" entry created in "getAllDatas" can be used here as "gamedatas.board" in our Javascript. We are using our previously developed "addTokenOnBoard" method.<br />
<br />
Reload... and here we are:<br />
<br />
[[File:reversi5.jpg]]<br />
<br />
It starts to smell Reversi here...<br />
<br />
== The game state machine ==<br />
<br />
Now, let's stop our game again, because we are going to start the core game logic.<br />
<br />
You already read [http://www.slideshare.net/boardgamearena/bga-studio-focus-on-bga-game-state-machine Focus on BGA game state machine], so you know that this is the heart of your game logic. For reversi, it's very simple. Here's a diagram of our game state machine:<br />
<br />
[[File:reversi6.jpg]]<br />
<br />
And here's our "states.inc.php", according to this diagram:<br />
<br />
<pre><br />
$machinestates = array(<br />
<br />
1 => array(<br />
"name" => "gameSetup",<br />
"description" => clienttranslate("Game setup"),<br />
"type" => "manager",<br />
"action" => "stGameSetup",<br />
"transitions" => array( "" => 10 )<br />
),<br />
<br />
10 => array(<br />
"name" => "playerTurn",<br />
"description" => clienttranslate('${actplayer} must play a disc'),<br />
"descriptionmyturn" => clienttranslate('${you} must play a disc'),<br />
"type" => "activeplayer",<br />
"args" => "argPlayerTurn",<br />
"possibleactions" => array( 'playDisc' ),<br />
"transitions" => array( "playDisc" => 11, "zombiePass" => 11 )<br />
),<br />
<br />
11 => array(<br />
"name" => "nextPlayer",<br />
"type" => "game",<br />
"action" => "stNextPlayer",<br />
"updateGameProgression" => true, <br />
"transitions" => array( "nextTurn" => 10, "cantPlay" => 11, "endGame" => 99 )<br />
),<br />
<br />
99 => array(<br />
"name" => "gameEnd",<br />
"description" => clienttranslate("End of game"),<br />
"type" => "manager",<br />
"action" => "stGameEnd",<br />
"args" => "argGameEnd"<br />
)<br />
<br />
);<br />
</pre><br />
<br />
Now, let's create in reversi.game.php the methods that are declared in this game states description file:<br />
* argPlayerTurn: referenced in the "args" property of the "playerTurn" state; this is the name of the method to call to retrieve arguments for this gamestate. Arguments are sent to the client side to be used on "onEnteringState" or to set arguments in the gamestate description.<br />
* stNextPlayer: referenced in the "action" property of the "nextPlayer" state; this is the name of the method to call when this game state become the current game state. <br />
<br />
... and start a new Reversi game.<br />
<br />
As you can see on the screen capture below, the BGA framework makes the game jump to our first game state "playerTurn" right after the initial setup. That's why the status bar contains the description of playerTurn state ("XXXX must play a disc"):<br />
<br />
[[File:reversi7.jpg]]<br />
<br />
== The rules ==<br />
<br />
We will use the "getPossibleMoves" PHP method to:<br />
* Indicate to the current player where she is allowed to play by returning a list of coordinates<br />
* Check if the player has the right to play in the spot they choose<br />
<br />
<blockquote><br />
Example of getPossibleMoves here https://gist.github.com/leocaseiro/a8bc2851bd0caddd06685b5035937d15<br />
</blockquote><br />
<br />
<br />
This is pure PHP programming here, and there are no special things from the BGA framework that can be used. This is why we won't go into details here. The overall idea is:<br />
* Create a "getTurnedOverDiscs(x,y)" method that returns coordinates of discs that would be turned over if a token would be played at x,y.<br />
* Loop through all free squares of the board and call the "getTurnedOverDiscs" method on each of them. If at least 1 token is turned over, this is a valid move.<br />
<br />
IMPORTANT: Keep in mind that making a database query is slow, so please don't load the entire game board with a SQL query multiple times. In our implementation, we load the entire board once at the beginning of "getPossibleMoves", and then pass the board as an argument to all methods.<br />
<br />
If you want to look into details, please look at the "utility method" sections of reversi.game.php. If building the tutorial yourself, copy the functions under "Utility functions" comment from the Reversi tutorial.<br />
<br />
== Display allowed moves ==<br />
<br />
Now we want to highlight the squares where the player can place a disc.<br />
<br />
To do this, we add a "argPlayerTurn" method in reversi.game.php. This method is called on the server each time we enter into "playerTurn" game state, and its result is transferred automatically to the client-side:<br />
<br />
<pre><br />
function argPlayerTurn()<br />
{<br />
return array(<br />
'possibleMoves' => self::getPossibleMoves( self::getActivePlayerId() )<br />
);<br />
}<br />
</pre><br />
<br />
We use the "getPossibleMoves" method we just developed.<br />
<br />
Each time we enter into a new game state, we use the "onEnteringState" Javascript method (in the reversi.js file, under "Game & client states"). This lets us use the data returned by the method above on the client side.<br />
<br />
<pre><br />
onEnteringState: function( stateName, args )<br />
{<br />
console.log( 'Entering state: '+stateName );<br />
<br />
switch( stateName )<br />
{<br />
case 'playerTurn':<br />
this.updatePossibleMoves( args.args.possibleMoves );<br />
break;<br />
}<br />
},<br />
</pre><br />
<br />
So, when we enter into "playerTurn" game state, we call our "updatePossibleMoves" method (under the "Utility functions" section). This method looks like this:<br />
<br />
<pre><br />
updatePossibleMoves: function( possibleMoves )<br />
{<br />
// Remove current possible moves<br />
dojo.query( '.possibleMove' ).removeClass( 'possibleMove' );<br />
<br />
for( var x in possibleMoves )<br />
{<br />
for( var y in possibleMoves[ x ] )<br />
{<br />
// x,y is a possible move<br />
dojo.addClass( 'square_'+x+'_'+y, 'possibleMove' );<br />
} <br />
}<br />
<br />
this.addTooltipToClass( 'possibleMove', '', _('Place a disc here') );<br />
},<br />
</pre><br />
Here's what this does. At first, it removes all "possibleMove" classes currently applied with the very useful combination of "dojo.query" and "removeClass" method.<br />
<br />
Then it loops through all possible moves our PHP "updatePossibleMoves" function created for us, and adds the "possibleMove" class to each corresponding square.<br />
<br />
Finally, it uses the BGA framework "addTooltipToClass" method to associate a tooltip to all those highlighted squares so that players can understand their meaning.<br />
<br />
To see the possible moves we need to create a CSS class ("possibleMove") that can be applied to a "square" element to highlight it:<br />
<pre><br />
.possibleMove {<br />
background-color: white;<br />
opacity: 0.2;<br />
filter:alpha(opacity=20); /* For IE8 and earlier */ <br />
cursor: pointer; <br />
}<br />
</pre><br />
<br />
<br />
<br />
And here we are:<br />
<br />
[[File:reversi8.jpg.jpg]]<br />
<br />
== Let's play ==<br />
<br />
From now, it's better to restart a game with 2 players, because we are going to implement a complete Reversi turn. The summary of what we are going to do is:<br />
* When we click on a "possibleMove" square, send the move to the server.<br />
* Server side, check the move is correct, apply Reversi rules and jump to next player.<br />
* Client side, change the disc position to reflect the move.<br />
<br />
First we associate each click on a square to one of our methods using our Javascript "setup" method:<br />
<br />
<pre><br />
dojo.query( '.square' ).connect( 'onclick', this, 'onPlayDisc' );<br />
</pre><br />
<br />
Note the use of the "dojo.query" method to get all HTML elements with "square" class in just one function call. Now, our "onPlayDisc" method is called each time someone clicks on a square.<br />
<br />
Here's our "onPlayDisc" method below:<br />
<br />
<pre><br />
onPlayDisc: function( evt )<br />
{<br />
// Stop this event propagation<br />
dojo.stopEvent( evt );<br />
<br />
// Get the clicked square x and y<br />
// Note: square id format is "square_X_Y"<br />
var coords = evt.currentTarget.id.split('_');<br />
var x = coords[1];<br />
var y = coords[2];<br />
<br />
if( ! dojo.hasClass( 'square_'+x+'_'+y, 'possibleMove' ) )<br />
{<br />
// This is not a possible move => the click does nothing<br />
return ;<br />
}<br />
<br />
if( this.checkAction( 'playDisc' ) ) // Check that this action is possible at this moment<br />
{ <br />
this.ajaxcall( "/reversi/reversi/playDisc.html", {<br />
x:x,<br />
y:y<br />
}, this, function( result ) {} );<br />
} <br />
},<br />
</pre><br />
<br />
What we do here is:<br />
* We stop the propagation of the Javascript "onclick" event. Otherwise, it can lead to random behavior so it's always a good idea.<br />
* We get the x/y coordinates of the square by using "evt.currentTarget.id".<br />
* We check that clicked square has the "possibleMove" class, otherwise we know for sure that we can't play there.<br />
* We check that "playDisc" action is possible, according to current game state (see "possibleactions" entry in our "playerTurn" game state defined above). This check is important to avoid issues if a player double clicks on a square.<br />
* Finally, we make a call to the server using BGA "ajaxcall" method with argument x and y. Be sure to update the first parameter to match your game if building the tutorial yourself. E.g. "/yourgamename/yourgamename/playDisc.html"<br />
<br />
Now, we have to manage this "playDisc" action on the server side. At first, we introduce a "playDisc" entry point in our "reversi.action.php":<br />
<br />
<pre><br />
public function playDisc()<br />
{<br />
self::setAjaxMode(); <br />
$x = self::getArg( "x", AT_posint, true );<br />
$y = self::getArg( "y", AT_posint, true );<br />
$result = $this->game->playDisc( $x, $y );<br />
self::ajaxResponse( );<br />
}<br />
</pre><br />
<br />
As you can see, we get the 2 arguments x and y from the javascript call, and call a corresponding "playDisc" method in our game logic (reversi.game.php).<br />
<br />
Now, let's have a look of this playDisc method:<br />
<br />
<pre><br />
function playDisc( $x, $y )<br />
{<br />
// Check that this player is active and that this action is possible at this moment<br />
self::checkAction( 'playDisc' ); <br />
</pre><br />
<br />
... at first, we check that this action is possible according to current game state (see "possible action"). We already did it on client side, but it's important to do it on server side too (otherwise it would be possible to cheat).<br />
<br />
<pre><br />
// Now, check if this is a possible move<br />
$board = self::getBoard();<br />
$player_id = self::getActivePlayerId();<br />
$turnedOverDiscs = self::getTurnedOverDiscs( $x, $y, $player_id, $board );<br />
<br />
if( count( $turnedOverDiscs ) > 0 )<br />
{<br />
// This move is possible!<br />
</pre><br />
<br />
...now, we are using the "getTurnedOverDiscs" method again to check that this move is possible.<br />
<br />
<pre><br />
// Let's place a disc at x,y and return all "$returned" discs to the active player<br />
<br />
$sql = "UPDATE board SET board_player='$player_id'<br />
WHERE ( board_x, board_y) IN ( ";<br />
<br />
foreach( $turnedOverDiscs as $turnedOver )<br />
{<br />
$sql .= "('".$turnedOver['x']."','".$turnedOver['y']."'),";<br />
}<br />
$sql .= "('$x','$y') ) ";<br />
<br />
self::DbQuery( $sql );<br />
<br />
</pre><br />
<br />
... we update the database to change the color of all turned over disc + the disc we just placed.<br />
<br />
<pre><br />
// Update scores according to the number of disc on board<br />
$sql = "UPDATE player<br />
SET player_score = (<br />
SELECT COUNT( board_x ) FROM board WHERE board_player=player_id<br />
)";<br />
self::DbQuery( $sql );<br />
<br />
// Statistics<br />
self::incStat( count( $turnedOverDiscs ), "turnedOver", $player_id );<br />
if( ($x==1 && $y==1) || ($x==8 && $y==1) || ($x==1 && $y==8) || ($x==8 && $y==8) )<br />
self::incStat( 1, 'discPlayedOnCorner', $player_id );<br />
else if( $x==1 || $x==8 || $y==1 || $y==8 )<br />
self::incStat( 1, 'discPlayedOnBorder', $player_id );<br />
else if( $x>=3 && $x<=6 && $y>=3 && $y<=6 )<br />
self::incStat( 1, 'discPlayedOnCenter', $player_id );<br />
<br />
</pre><br />
<br />
... now, we update both player score by counting all disc, and we manage game statistics.<br />
<br />
<pre><br />
// Notify<br />
self::notifyAllPlayers( "playDisc", clienttranslate( '${player_name} plays a disc and turns over ${returned_nbr} disc(s)' ), array(<br />
'player_id' => $player_id,<br />
'player_name' => self::getActivePlayerName(),<br />
'returned_nbr' => count( $turnedOverDiscs ),<br />
'x' => $x,<br />
'y' => $y<br />
) );<br />
<br />
self::notifyAllPlayers( "turnOverDiscs", '', array(<br />
'player_id' => $player_id,<br />
'turnedOver' => $turnedOverDiscs<br />
) );<br />
<br />
$newScores = self::getCollectionFromDb( "SELECT player_id, player_score FROM player", true );<br />
self::notifyAllPlayers( "newScores", "", array(<br />
"scores" => $newScores<br />
) );<br />
</pre><br />
<br />
... then we notify about all these changes. We are using for that 3 notifications ('playDisc', 'turnOverDiscs' and 'newScores' that we are going to implement on client side later). Note that the description of the 'playDisc' notification will be logged in the game log.<br />
<br />
<pre><br />
// Then, go to the next state<br />
$this->gamestate->nextState( 'playDisc' );<br />
}<br />
else<br />
throw new BgaSystemException( "Impossible move" );<br />
}<br />
</pre><br />
<br />
... finally, we jump to the next game state if everything goes fine ('playDisc' is the name of a transition in the 'playerTurn' game state description above which leads to state 11 which is 'nextPlayer').<br />
<br />
To make the statistics work, we have to initialize them in stats.inc.php:<br />
<br />
<pre><br />
// Statistics existing for each player<br />
"player" => array(<br />
<br />
"discPlayedOnCorner" => array( "id"=> 10,<br />
"name" => totranslate("Discs played on a corner"), <br />
"type" => "int" ),<br />
<br />
"discPlayedOnBorder" => array( "id"=> 11,<br />
"name" => totranslate("Discs played on a border"), <br />
"type" => "int" ),<br />
<br />
"discPlayedOnCenter" => array( "id"=> 12,<br />
"name" => totranslate("Discs played on board center part"), <br />
"type" => "int" ),<br />
<br />
"turnedOver" => array( "id"=> 13,<br />
"name" => totranslate("Number of discs turned over"), <br />
"type" => "int" ) <br />
)<br />
</pre><br />
<br />
A last thing to do on the server side is to activate the next player when we enter the "nextPlayer" game state (in the "reversi.game.php" file, under "Game state reactions"):<br />
<br />
<pre><br />
function stNextPlayer()<br />
{<br />
// Active next player<br />
$player_id = self::activeNextPlayer();<br />
<br />
// Check if both player has at least 1 discs, and if there are free squares to play<br />
$player_to_discs = self::getCollectionFromDb( "SELECT board_player, COUNT( board_x )<br />
FROM board<br />
GROUP BY board_player", true );<br />
<br />
if( ! isset( $player_to_discs[ null ] ) )<br />
{<br />
// Index 0 has not been set => there's no more free place on the board !<br />
// => end of the game<br />
$this->gamestate->nextState( 'endGame' );<br />
return ;<br />
}<br />
else if( ! isset( $player_to_discs[ $player_id ] ) )<br />
{<br />
// Active player has no more disc on the board => he looses immediately<br />
$this->gamestate->nextState( 'endGame' );<br />
return ;<br />
}<br />
<br />
// Can this player play?<br />
<br />
$possibleMoves = self::getPossibleMoves( $player_id );<br />
if( count( $possibleMoves ) == 0 )<br />
{<br />
<br />
// This player can't play<br />
// Can his opponent play ?<br />
$opponent_id = self::getUniqueValueFromDb( "SELECT player_id FROM player WHERE player_id!='$player_id' " );<br />
if( count( self::getPossibleMoves( $opponent_id ) ) == 0 )<br />
{<br />
// Nobody can move => end of the game<br />
$this->gamestate->nextState( 'endGame' );<br />
}<br />
else<br />
{ <br />
// => pass his turn<br />
$this->gamestate->nextState( 'cantPlay' );<br />
}<br />
}<br />
else<br />
{<br />
// This player can play. Give him some extra time<br />
self::giveExtraTime( $player_id );<br />
$this->gamestate->nextState( 'nextTurn' );<br />
}<br />
<br />
}<br />
</pre><br />
<br />
Now, when we play a disc, the rules are checked and the disc appears in the database.<br />
<br />
[[File:reversi9.jpg]]<br />
<br />
Of course, as we don't manage notifications on client side, we need to press F5 after each move to see the changes on the board.<br />
<br />
== Make the move appear automatically ==<br />
<br />
Now, what we have to do is process the notifications sent by the server and make the move appear on the interface.<br />
<br />
In our "setupNotifications" method, we register 2 methods for the 2 notifications we created at the previous step ('playDisc' and 'turnOverDiscs'):<br />
<br />
<pre><br />
dojo.subscribe( 'playDisc', this, "notif_playDisc" );<br />
this.notifqueue.setSynchronous( 'playDisc', 500 );<br />
dojo.subscribe( 'turnOverDiscs', this, "notif_turnOverDiscs" );<br />
this.notifqueue.setSynchronous( 'turnOverDiscs', 1500 );<br />
dojo.subscribe( 'newScores', this, "notif_newScores" );<br />
this.notifqueue.setSynchronous( 'newScores', 500 );<br />
</pre><br />
<br />
As you can see, we associate each of our 3 notifications with a method prefixed with "notif_". We also define these notifications as "synchronous", with a duration in millisecond. It tells the user interface to wait some time after executing the notification, to let the animation end before starting the next notification. In our specific case, the animation will be the following:<br />
* Make a disc slide from the player panel to its place on the board<br />
* (wait 500ms)<br />
* Make all turned over discs blink (and of course turned them over)<br />
* (wait 1500ms)<br />
* Update the player scores<br />
* (wait 500ms)<br />
<br />
The 2nd parameter in dojo.subscribe call (this) is the 'context', and will be passed in as a parameter to the specified method.<br />
<br />
Let's have a look now on the "playDisc" notification handler method:<br />
<br />
<pre><br />
notif_playDisc: function( notif )<br />
{<br />
// Remove current possible moves (makes the board more clear)<br />
dojo.query( '.possibleMove' ).removeClass( 'possibleMove' ); <br />
<br />
this.addTokenOnBoard( notif.args.x, notif.args.y, notif.args.player_id );<br />
},<br />
</pre><br />
<br />
No surprise here, we re-used some existing stuff to:<br />
* Remove the highlighted squares.<br />
* Add a new disc on board, coming from player panel.<br />
<br />
Now, here's the method that handles the turnOverDiscs notification:<br />
<br />
<pre><br />
notif_turnOverDiscs: function( notif )<br />
{<br />
// Get the color of the player who is returning the discs<br />
var targetColor = this.gamedatas.players[ notif.args.player_id ].color;<br />
<br />
// Make these discs blink and set them to the specified color<br />
for( var i in notif.args.turnedOver )<br />
{<br />
var token = notif.args.turnedOver[ i ];<br />
<br />
// Make the token blink 2 times<br />
var anim = dojo.fx.chain( [<br />
dojo.fadeOut( { node: 'token_'+token.x+'_'+token.y } ),<br />
dojo.fadeIn( { node: 'token_'+token.x+'_'+token.y } ),<br />
dojo.fadeOut( { <br />
node: 'token_'+token.x+'_'+token.y,<br />
onEnd: function( node ) {<br />
<br />
// Remove any color class<br />
dojo.removeClass( node, [ 'tokencolor_000000', 'tokencolor_ffffff' ] );<br />
// ... and add the good one<br />
dojo.addClass( node, 'tokencolor_'+targetColor );<br />
<br />
} <br />
} ),<br />
dojo.fadeIn( { node: 'token_'+token.x+'_'+token.y } )<br />
<br />
] ); // end of dojo.fx.chain<br />
<br />
// ... and launch the animation<br />
anim.play(); <br />
}<br />
},<br />
</pre><br />
<br />
The list of the discs to be turned over has been made available by our server side code in "notif.args.turnedOver" (see previous paragraph). We loop through all these discs, and create a complex animation using dojo.Animation for each of them. The complete documentation on dojo animations [http://dojotoolkit.org/documentation/tutorials/1.6/animation/ can be found here].<br />
<br />
In few words: we create a chain of 4 animations to make the disc fade out, fade in, fade out again, and fade in again. At the end of the second fade out, we change the color of the disc. Finally, we launch the animation with "play()".<br />
<br />
And Also the notification to update the scores:<br />
<br />
<pre><br />
notif_newScores: function( notif )<br />
{<br />
for( var player_id in notif.args.scores )<br />
{<br />
var newScore = notif.args.scores[ player_id ];<br />
this.scoreCtrl[ player_id ].toValue( newScore );<br />
}<br />
},<br />
</pre><br />
<br />
<br />
[[Category:Studio]]</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelptroyes&diff=14128Gamehelptroyes2022-07-22T21:01:00Z<p>Tabicat: /* Place a citizen on building */</p>
<hr />
<div><br />
== Goal ==<br />
<br />
Be the player with the most victory points at the end of the game.<br />
<br />
== Rules summary ==<br />
<br />
(This rules summary is based on the game help written by [http://boardgamegeek.com/user/pregremlin Andrew Agard] for Board Game Geek, under Creative Commons license. Please see [http://boardgamegeek.com/filepage/66976/complete-rules-reference-1-page-fold-in-half original file] here for details. Thank you Andrew !)<br />
<br />
===Initial Placement===<br />
<br />
* In clockwise order place a citizen in empty space of one building<br />
* Continue in counter clockwise order from last player and so on until all citizens placed<br />
<br />
===Game play===<br />
<br />
====Phase 0: Reveal the Activity cards====<br />
<br />
Reveal activity card for each color corresponding to current round (first 3 rounds only)<br />
<br />
====Phase 1: Income and salaries====<br />
<br />
Receive 10 deniers and pay 1 per Bishopric and 2 per Palace citizen or lose 2 VP<br />
<br />
====Phase 2: Assembling the workforce====<br />
<br />
Roll yellow/white/red die per citizen in City Hall/Bishopric/Palace and place in district<br />
<br />
====Phase 3: Events====<br />
<br />
Reveal top red and white or yellow Event and place to right of queue (unlimited Events)<br />
<br />
Events take effect from left to right<br />
<br />
* Military: start player takes 1 black die per die symbol<br />
<br />
* Other events: see annex (can’t execute: execute as much as possible and lose 2 VP)<br />
<br />
After Events, roll black dice and counter:<br />
<br />
* Start player must counter highest-value with one or more dice form district. Total value must be >= die. Discard dice. May counter several dice at once<br />
<br />
* Gain 1 influence per dice countered (can’t counter: discard die and lose 2 VP)<br />
<br />
* In order players must counter highest remaining until all countered<br />
<br />
* Use any color dice. Double red dice. Can’t buy dice or use activity cubes<br />
<br />
====Phase 4: Actions====<br />
<br />
See below.<br />
<br />
====Phase 5: End of the round====<br />
<br />
Receive deniers from district<br />
<br />
Return citizens lying on buildings to personal supplies<br />
<br />
Return unused dice to general supply<br />
<br />
Pass start player card left.<br />
<br />
===Actions===<br />
<br />
In order each player can use 1-3 dice of the same color for one action or pass.<br />
The round ends when no dice available or all players have passed. <br />
May pay player or bank (gray) to use their dice. If using 1/2/3 total dice, you pay 2/4/6 deniers per die.<br />
<br />
====Activate Activity Card====<br />
<br />
Must have tradesman. Hire if necessary by paying indicated amount in deniers. Place<br />
citizen on free space (or illustration if full) from personal supply, any board location or pay two influence to take one from the general supply.<br />
<br />
* 1 tradesman per player per card<br />
* Must activate at least once if tradesman hired<br />
* Citizens on card cannot be moved to newly freed space<br />
<br />
Immediate effect: activation cost (round down) determines color and use of dice<br />
<br />
Delayed effect: place cubes equal to activation cost. Use later (one cube per action)<br />
<br />
====Construct Cathedral====<br />
<br />
* Use 1-3 white dice to place 1-3 cubes on same-numbered construction site<br />
* Must place on lower levels before placing in higher levels for each set of valued spaces<br />
* Gain 1 VP and 1 or 2 Influence for each cube placed in spaces 1-3 or 4-6<br />
<br />
====Combat Events====<br />
<br />
* Activation cost (round down) defines dice and number of cubes to place on card<br />
* Place cubes on small banner starting with upper left. Gain 1 influence for each. Only place on a single card each action and can’t place more cubes than banners<br />
<br />
Event countered when banners filled<br />
* Most cubes earns higher reward (tied: total rounded down, 2nd earns nothing). If only 1 player on card earn both rewards.<br />
* 2nd most cubes earns smaller reward (tied: total rounded down)<br />
* Most cubes takes card (tied: player who placed first). Discard if neutral has most<br />
* Marauding: rewards given, cubes removed, and then event is available again<br />
<br />
====Place a citizen on building====<br />
<br />
* Use exactly one die to place one citizen from personal supply or any board location on first space of matching building row or space corresponding to die color and value.<br />
<br />
* Citizens placed in the City Hall and the Bishopric cause existing citizens in that space to shift right. The right-most citizen in that row is expelled.<br />
<br />
* Citizens placed in the Palace simply replace the citizen already there. The existing citizen is expelled.<br />
<br />
* Citizens pushed off are laid on building illustration.<br />
<br />
* If already have expelled citizen nobody can expel your citizens from that building.<br />
<br />
====Use Agriculture====<br />
<br />
* Gain number of deniers equal to total value divided by 2 (round down)<br />
<br />
===Pass===<br />
<br />
* If dice still in any city square, pass and receive 2 deniers which are placed in district<br />
<br />
* Each turn add another denier to district<br />
<br />
===End of Game Scoring===<br />
<br />
Sum of:<br />
<br />
* VP token gained during the game<br />
<br />
* 1 VP per un-resolved event card that you have a presence<br />
<br />
* VP on activity cards as occupied by each of your tradesman<br />
<br />
* -2 VP per row in cathedral that you do not have a cube on<br />
<br />
* Once revealed, gain VP per character cards. Note: you gain VP from ALL character cards in play, not just your own.<br />
<br />
==Characters scoring==<br />
===Chretien de Troyes===<br />
Awards citizens placed on the 3 principal buildings<br />
* 1 VP for 3+ (4+ with 2 players)<br />
* 3 VP for 5+ (6+ with 2 players)<br />
* 6 VP for 7+ (8+ with 2 players) <br />
===Urbain IV===<br />
Awards cubes placed on the cathedral<br />
* 1 VP for 3+ (4+ with 2 players)<br />
* 3 VP for 5+ (6+ with 2 players)<br />
* 6 VP for 7+ (8+ with 2 players) <br />
===Thibaut II===<br />
Awards deniers<br />
* 1 VP for 6+ <br />
* 3 VP for 12+ <br />
* 6 VP for 18+ <br />
===Hugues de Payns===<br />
Awards influence<br />
* 1 VP for 5+ <br />
* 3 VP for 10+ <br />
* 6 VP for 15+ <br />
===Le Florentin===<br />
Awards tradesman on the activity cards<br />
* 1 VP for 2+ <br />
* 3 VP for 4+ <br />
* 6 VP for 6+ <br />
===Henry I===<br />
Awards event cards<br />
* 1 VP for 1+ <br />
* 3 VP for 3+ <br />
* 6 VP for 5+</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3990Gamehelpquantum2020-04-11T14:47:29Z<p>Tabicat: /* Two Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Two Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Alpha Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Null Hypothesis<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Entanglement<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! False Binary<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Parallax<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
! Circular Logic<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
|}<br />
<br />
! Wave Function<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Terra Minor<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Terra Major<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Matter and Anti-Matter<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| <br />
| 8 <br />
| <br />
| <br />
|}<br />
<br />
|}<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Beta Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3989Gamehelpquantum2020-04-11T14:42:52Z<p>Tabicat: /* Two Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Two Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Alpha Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
<br />
|}<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Beta Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3988Gamehelpquantum2020-04-11T14:42:03Z<p>Tabicat: /* Two Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
== Two Player ==<br />
<br />
{| class="wikitable"<br />
<br />
! Alpha Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
<br />
|}<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Beta Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3987Gamehelpquantum2020-04-11T14:41:39Z<p>Tabicat: /* Maps */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
== Two Player ==<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Beta Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3986Gamehelpquantum2020-04-11T14:41:07Z<p>Tabicat: /* Three Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Beta Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3985Gamehelpquantum2020-04-11T14:40:16Z<p>Tabicat: /* Four Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Gamma Sector<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|}<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3974Gamehelpquantum2020-04-09T16:37:09Z<p>Tabicat: /* Four-Player */</p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Three Player ===<br />
<br />
{| class="wikitable"<br />
<br />
! Space-Time Continuum<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| <br />
| 7 <br />
|-<br />
<br />
| 9 <br />
| 9 <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Critical Density<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 7 <br />
| <br />
|}<br />
<br />
! Gravitational Constant<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 9 <br />
| 9 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! String Theory<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
|}<br />
<br />
! Origin Of Thought<br />
<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 7 <br />
| <br />
|}<br />
<br />
! Equinox<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 7 <br />
| <br />
| 7 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Ouroboros<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| <br />
| <br />
| 9 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|}<br />
<br />
! Outer Reaches<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Foundation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 8 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 7 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
<br />
|}<br />
<br />
=== Four Player ===<br />
{| class="wikitable"<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpquantum&diff=3972Gamehelpquantum2020-04-07T22:47:41Z<p>Tabicat: </p>
<hr />
<div>== Ship Abilities ==<br />
<br />
<br />
Each type of ship has a unique special ability that can be used once per turn.<br />
* An individual ship die can only use ONE ability per turn, even if the number on the die is changed.<br />
* Using a ship ability does not count as an action (although TRANSPORT(2) and MANEUVER (5) are used during a movement action).<br />
* Ship abilities can only be used on your turn, and only by ships on the map.<br />
* A ship number cannot be changed while moving it (for example, before rolling for combat).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Description<br />
|-<br />
| '''1''' - BATTLESTATION - ''mighty weapons of destruction''<br />
'''STRIKE: attack a space next to the battlestation'''<br />
<br />
Strike gives you a single free move/attack of 1 space that must include an attack. It is possible to move/attack normally and also use strike for a second attack on the same turn.<br />
|-<br />
| '''2''' - FLAGSHIP - ''command and control centers''<br />
'''TRANSPORT: carry an adjacent ship as you move'''<br />
<br />
Place one of your ships that is in any surrounding space on top of the flagship. Then use the flagship’s move action to move the flagship 1 or 2 spaces. Finally, place the transported ship in any empty surrounding space. A flagship cannot attack if it transports, but a transported ship CAN move and attack normally after it is dropped off.<br />
|-<br />
| '''3''' - DESTROYER - ''mainstay gunships of a fleet''<br />
'''WARP: swap places with another one of your ships on the map'''<br />
<br />
Warp does not count as the destroyer’s move<br />
|-<br />
| '''4''' - FRIGATE - ''workhorse utility ships''<br />
'''MODIFY: change to a 3 or 5'''<br />
<br />
After you modify, you can’t use the ship’s new ability this turn, since modify was the ship’s ability use for the turn<br />
|-<br />
| '''5''' - INTERCEPTOR - ''stealthy fighters''<br />
'''MANEUVER: travel diagonally'''<br />
<br />
Activating maneuver during your move action lets you go to any surrounding space as you move. This means you can travel diagonally as part or all of your movement. You CAN attack diagonally. <br />
|-<br />
| '''6''' - SCOUT - ''long-range patrol ships''<br />
'''FREE RECONFIGURE: re-roll the ship'''<br />
<br />
If you roll a 6, roll again until you get a new number.<br />
|}<br />
<br />
== Void ==<br />
<br />
<br />
At the start of your turn, for each of your ship dice on the void map tile, you gain +1 research.<br />
<br />
Gaining research from the void does not use up any of your actions or special ability uses for your turn. Ships that earn you +1 research from the void can move and use special abilities normally that turn.<br />
<br />
== Quantum Entanglement ==<br />
<br />
Quantum entanglement has to do with the possibility of placing 2 or more of your cubes on the same planet:<br />
<br />
* You can normally have only ONE of your quantum cubes on a planet. <br />
* However, if the ONLY available space on the entire map is on a planet where you already have a cube, then you can place multiple cubes there. <br />
* The special case of placing a second (or third, or fourth) cube of the same color on a planet is called quantum entanglement. When you construct with quantum entanglement, add 3 to the planet number for each cube you already have there. (Remember – quantum entanglement can only happen if you have no other choice for placing a quantum cube.) <br />
* Example: Near the end of a game, the only place you can construct a quantum cube is on a size 8 planet where you already have a quantum cube. Quantum entanglement would increase the planet number to 11 (8+3) for the purposes of constructing the second cube there. <br />
<br />
Note that when you are placing cubes because you reached infamy (dominance = 6), the same placement rules apply (you can place on a planet where you already have a cube – but only if you have no other options). There are no other special rules for placing a quantum entanglement cube via infamy.<br />
<br />
== Maps ==<br />
<br />
=== Four-Player ===<br />
{| class="wikitable"<br />
<br />
! Singularity<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 10 <br />
| <br />
|-<br />
<br />
| 10 <br />
| 9 <br />
| 10 <br />
|-<br />
<br />
| <br />
| 10 <br />
| <br />
|}<br />
<br />
<br />
! Nexus<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 7 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 9 <br />
| 7 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| <br />
|}<br />
<br />
! Spiral Nebula<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 10 <br />
| 10 <br />
| 9 <br />
|-<br />
<br />
| 9 <br />
| 10 <br />
| 10 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 9 <br />
| <br />
|}<br />
<br />
! Tesseract<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| 8 <br />
| 9 <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Galactic Rotation<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 9 <br />
| 8 <br />
| 7 <br />
| 8 <br />
| <br />
|-<br />
<br />
| <br />
| 7 <br />
| 10 <br />
| 7 <br />
| <br />
|-<br />
<br />
| <br />
| 8 <br />
| 7 <br />
| 8 <br />
| 9 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! The Great Expanse<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 7 <br />
| 7 <br />
| 8 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
|-<br />
<br />
| 8 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 7 <br />
| 7 <br />
|}<br />
<br />
! Event Horizon<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| <br />
| 7 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 10 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 9 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|}<br />
<br />
! Gordian Knot<br />
<br />
{| class="wikitable"<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
|-<br />
<br />
| 7 <br />
| <br />
| 10 <br />
| 10 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 10 <br />
| 10 <br />
| <br />
| 7 <br />
|-<br />
<br />
| <br />
| <br />
| 8 <br />
| <br />
| <br />
| <br />
|-<br />
<br />
| <br />
| <br />
| 7 <br />
| 7 <br />
| <br />
| <br />
|}<br />
<br />
! Barren Empire<br />
<br />
<br />
{| class="wikitable"<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| <br />
| 9 <br />
| <br />
| 9 <br />
| <br />
|-<br />
<br />
| 7 <br />
| 8 <br />
| 9 <br />
| 8 <br />
| 7 <br />
|-<br />
<br />
| 8 <br />
| 7 <br />
| <br />
| 7 <br />
| 8 <br />
|}<br />
<br />
<br />
<br />
|}</div>Tabicathttps://en.doc.boardgamearena.com/index.php?title=Gamehelpcarrara&diff=3840Gamehelpcarrara2020-02-23T23:24:53Z<p>Tabicat: Removed broken links to rules. The only available source for the rules is BGG.</p>
<hr />
<div>'''Components'''<br />
<br />
There are a total of 42 blocks, 7 of each of 6 colours: white, yellow, red, green, blue, and black. <br />
<br />
There are a total of 30 buildings, in 6 different types, with block costs of 1, 2, 3, 4, and 5. For expansion games, there are an additional 6 buildings, with block costs of 8. They are separated into land (green-coloured) and city (gold-coloured):<br />
# villa (land): produces coat of arms objects<br />
# castle (land): produces flag objects<br />
# cathedral (city): produces cup objects<br />
# porta (city): produces gate objects<br />
# library (city): produces book objects<br />
# palaces (city): produces crown objects<br />
<br />
5 of each of these types of objects can be acquired via scoring of cities. 1 of each type can ONLY be purchased for 10 coins from the board after a player's turn action.<br />
<br />
There are 6 cities on the board where buildings can be built. The buildings can only be built with a sufficient number of blocks that each city will accept.<br />
# Livornoa: only white blocks<br />
# Pisa: white or yellow blocks<br />
# Lucca: white, yellow, or red blocks<br />
# Viareggio: white, yellow, red, or green blocks<br />
# Massa: white, yellow, red, green, or blue blocks<br />
# Lerici: white, yellow, red, green, blue, or black blocks<br />
<br />
'''Standard vs. Expansion'''<br />
<br />
The 'standard' game should be considered as a learning setup only since the game becomes one of block buying efficiency. Here are the limitations in the standard game: <br />
# turning the block buying wheel is MANDATORY;<br />
# there is no separate scoring spot for land or city buildings;<br />
# 8.block buildings and their bonus scoring tiles are not available;<br />
# you can not upgrade existing buildings; AND<br />
# 3 fixed objectives.<br />
<br />
'''Objectives'''<br />
<br />
In an expansion game, there are 4 objective categories. There are 6 brown 'top' objectives, 8 purple 'object' objectives, 9 gray 'building' objectives, and 8 green 'bonus vps' objectives. In order for a player to declare the end of the game, they must meet the minimum requirements of the first 3 objectives. The fourth objective is only scored for bonus points at the end of the game. Some objectives are scaled for the number of players. Because of the number of objectives, and how they interact with each other, each game can require very different strategies, leading to excellent game replayability. <br />
<br />
<br />
'''Playing the Game'''<br />
<br />
Each turn, a player can do 1 of 3 things: <br />
# buy blocks;<br />
# build a building; OR <br />
# score a city or building type.<br />
<br />
''''Buying Blocks''''<br />
<br />
At the start of each game, there is 1 block of each colour in the first segment of the block wheel, with costs for each colour indicated on the outer rim. A player choosing to buy blocks may choose to turn the wheel one segment to decrease the cost before buying (this turn action is MANDATORY in the standard game). As the wheel is spun, each block becomes progressively cheaper by 1 coin, so that by the final segment, white blocks cost 1 coin, and every other block colour can be purchased for free. After the wheel is spun, a number of blocks are supplied to the first segment until the total number of blocks on the wheel is 11. If the wheel is NOT spun, no new blocks are supplied.<br />
<br />
Each player starts with 20 coins. After choosing to spin the wheel (or not), the active player can buy as many blocks from a single segment as they wish, as long as they have sufficient coins. Remember, spinning the wheel gives you access to cheaper blocks, but your opponents can also spin on their turns so any blocks you do not buy will get cheaper for them. If there are any blocks remaining in the final (cheapest) segment when the wheel is spun, they remain on the wheel and spin back into the 'first' segment.<br />
<br />
If, after spinning the wheel, a player does not have enough coins to buy ANY available block, they get 2 coins from the bank which ends their turn. If the wheel is empty and there are no blocks remaining in the supply, players must either build or score instead.<br />
<br />
''''Building Buildings''''<br />
<br />
Randomly selected, 9 of the 30 basic buildings are placed on the main board. For expansion games, the 6 8.block buildings are also made available beside the board. To build an available building, you first select the one you want, then click above the city (on your own player board) where you wish to build it. You then choose which blocks you wish to use to build the building, keeping in mind the block colour restrictions for each city. Blocks used to build in this way are returned to the supply. Another building from the supply (if available), is placed in the empty space on the main board.<br />
<br />
In expansion games, when you build an 8.block building, you can choose ANY 1 of the 8 bonus scoring tiles, regardless of the city that you built in or the building type. The ones for the cities of Livornoa, Pisa, and Lucca add +1 vp and +1 coin to the base scoring for each of those cities. The ones for the cities of Viareggio, Massa, and Lerici all add +1 vp to the base scoring for each of those cities. The ones for land and city buildings double the vps or coins received when using those scoring spaces. <br />
<br />
Also only in expansion games, you can upgrade an existing building in a city by paying the difference in block costs between the existing building and the more expensive new building (of any type) that you wish to put in its place. So, to upgrade a 1.block building to a 3.block building, you need to spend 2 blocks, keeping in mind the block colour restriction for the city.<br />
<br />
''''Scoring''''<br />
<br />
Each player starts with 6 scoring meeples. If you have used all 6 of your scoring meeples, you can no longer take the scoring action.<br />
<br />
To score a city, you must have sufficient buildings built in that city. For the cities of Livornoa, Pisa, and Lucca, only 2 buildings are required before those cities can be scored. For the cities of Viareggio, Massa, and Lerici, 3 buildings must be built before they can be scored. You can build more buildings in a city than the minimum before scoring that city, but each city can only be scored ONCE during the game. So, after one player scores a city, they place one of their scoring meeples on that city on the main board, and every other player is blocked from scoring that city. <br />
<br />
When a city is scored, each building in the city generates an object as long as there are objects of that type in the pool (excludes the 6 objects on the main board, which can only be purchased). As well, each scored city provides a separate bonus, either vps or coins (or both for expansion games after building an 8.block building), with the base score of the city multiplied by the number of blocks used to build the buildings in that city. <br />
<br />
*So, if you had the 1.block palace, 2.block castle, and 3.block library when you scored viareggio, you would collect 1 crown object, 1 flag object, and 1 book object, along with 1+2+3 (building blocks) * 2 (coins per block basic viareggio bonus) = 12 coins from the bank. <br />
<br />
Instead of scoring a city, you can choose to score one of the 6 building types, as long as you have built at least 1 of the buildings matching that type. Each building will provide the city score bonus that they are in (including block building multipliers), plus generate an object (if available). Place a scoring meeple on your board to match the type that you are scoring. Opponents can NOT block you from scoring your own building types in this fashion, but once you have scored a type, you can not score that again. <br />
<br />
For expansion games, you can also score city buildings for coins (with building block multiplier) or land buildings for vps (with building block multiplier).<br />
<br />
Also for expansion games, after an 8.block building is built, a bonus tile can be placed on the player board. Every subsequent scoring will take into account the extra bonuses for that city or type. <br />
<br />
''''Buying Objects''''<br />
<br />
After each player's action, they have the option to puchase one of the 6 available objects on the main board (1 of each type) for 10 coins. If there are no remaining objects on the board, then no objects may be purchased.<br />
<br />
'''Ending the Game'''<br />
<br />
A player can CHOOSE to declare the game end if they successfully meet or exceed the requirements for the first 3 objectives. If they do so, they collect 5 vp for the declaration. Each other player who has not yet played that turn (look to who has the first player marker) will get a final turn to act. <br />
<br />
If no one can or wants to declare the game end, the game ends when all 30 of the buildings on the main board have been built. Each other player who has not yet played that turn (look to who has the first player marker) will get a final turn to act. <br />
<br />
'''Final Scoring'''<br />
<br />
Any object not included in the purple 'Object' objective is worth 1 vp (expansion games only).<br />
<br />
Coins are worth 1 vp for every 5 coins (unless you have the 'Top' brown objective that gives a different value).<br />
<br />
Each player will get vps for any objective cards that they match.<br />
<br />
Tiebreaker: The player with the most remaining purchased blocks, regardless of colour.</div>Tabicat