This is a documentation for Board Game Arena: play board games online !
Game meta-information: gameinfos.inc.php
Overview
From this file, you can edit the various meta-information of your game.
Once you modified the file, don't forget to click on "Reload game informations" from the Control Panel in order in can be taken into account.
Note: if you broke gameinfos and cannot load management page reload using direct URL https://studio.boardgamearena.com/admin/studio/reloadGameInfos.html?game= (with your game name at the end of url).
Most information provided in this file are self-explainable.
See sections below for specific cases.
Publisher/Designer fields
These fields should match the publisher/designer for the game. In the case of a public domain name, they should be left empty (empty string )
Beta
You are not allowed to set the "is_beta" to 0 before the game has been released on BGA and stabilized.
Time Profiles
fast/medium/slow_additional_time: please set high values here: after the game has been released, we will lower these value to match the real game duration.
Number of players
players
'players' => array( 3, 4, 6 ),
- during the first step of development of a game, it is recommended to have "1 player" configuration: much easy to start/stop a game this way, don't need to switch players.
- if you change the minimum number of players from for example 1 to 2, make sure the new tables you create are not restricted from 1 to 1 player otherwise when you create a new table and this account setting is used, there will be a conflict with the new minimum number of players allowed and you will be blocked from creating the game.
But you can also unblock yourself by changing player number again, launching a game with a larger number, and then getting back to the numbers you want.
suggest_player_number / not_recommend_player_number don't specify anything here if there is no configuration that is REALLY better/worst than another one. You can check player's poll on BoardGameGeek game page if you have any doubt. Important exception: in the automatic lobby, if 'suggest_player_number' is not specified, the system will try first the lowest. So if the lowest player number is not compatible with the default options for your game (especially if there is a Solo mode that can only be played in training mode) you have to specify a suggest_player_number of your choice, so that players launching a game in the automatic lobby without checking the option don't get an error with the default configuration.
Colors
player_colors
'player_colors' => array( "ff0000", "008000", "0000ff", "ffa500", "ffffff" ),
This array defines the default player colors, theoretically this can be bigger then maximum number of players but you have to support all of the in your game. Your setupNewGame in php is responsible for attributing these values to players. See section "Player color preferences" in Main_game_logic:_yourgamename.game.php for details.
Losers not ranked between themselves
By default, all player are ranked, but in some games, the rules say that there is only one winner and that all the other players are losers and not ranked between themselves. You can set this option to true so that for your game, there is only one winner and losers, without a full ranking of all players.
The score in this case should be 1 for the winner and 0 for the losers.
// If in the game, all losers are equal (no score to rank them or explicit in the rules that losers are not ranked between them), set this to true // The game end result will display "Winner" for the 1st player and "Loser" for all other players 'losers_not_ranked' => false,
Disable player rotation in case of rematch
By default, in case of a rematch players are rotated so that the first player changes. If for your game it's better to always have a random player order you can change this option.
// When doing a rematch, the player order is swapped using a "rotation" so the starting player is not the same // If you want to disable this, set this to true (even if the comment in your game file say the opposite). 'disable_player_order_swap_on_rematch' => false,
Custom "buy this game" button
By default, the "buy this game" button is a link to an Amazon search with the name of the game.
You can replace it by a different URL / game button label with :
'custom_buy_button' => array( 'url' => 'http://yoururl.com', 'label' => 'Name of the website' ),
Note : button label will be "Buy on <Name of the website>"
Tags
A maximum of ten tags can be attributed to your game (not counting complexity and duration tags).
Tags are useful to place your game in the correct game list section and to give a good quick overview of what the game is about to players.
⚠ Note: The order of the tags is very important too, you'll have to put the most relevant first.
⚠ Note: tags are only read during the first deploy from the file gameinfos.inc.php
; afterwards, setting tags for a game is done via the Game Metadata Manager.
Game complexity (you must specify one tag and only one from this category):
2
: Casual games3
: For regular players4
: For core gamers
Duration tags (only indicative - the correct tag will be automatically set by BGA after a while):
10
: Short game (<10 minutes)11
: Medium length game (10 minutes to 30 minutes)12
: Long game (>30mn)
Other tags:
20
: Awarded game (Win a prestigious award) (the game must have been at the first place of one the following major awards list).22
: Prototype (This game has not been published yet)23
: Classic (This game is a classic from Public Domain)25
: Party game26
: Family27
: Miniatures (figurines)28
: Recommended in Realtime29
: Recommended in Turnbased30
: Best for 2 (best with 2 players) (automatically added to games for 2p only)
Theme tags:
100
: Fantasy101
: Science-Fiction102
: Historical103
: Adventure104
: Exploration105
: Conquest106
: Building107
: Western108
: Espionage109
: Trains110
: Sport111
: Economy112
: Aviation113
: Surreal/Silly/Absurd114
: Animals115
: Wargame1
: Abstract game
Mechanism tags:
200
: Cards (cards plays a central role in this game)201
: Dice202
: Solo203
: Worker placement204
: Hand management205
: Bluffing206
: Tile placement207
: Combos208
: Area Majority209
: Race210
: Collection211
: Cooperative212
: Random213
: Speed214
: Asymmetrical215
: Communication216
: Conquest217
: Team218
: Bidding219
: Objectives220
: Trick-taking221
: Resource management222
: Roles223
: Roll & Write224
: Push your luck225
: Voting226
: Word games227
: Deck Building228
: Engine building229
: Drafting230
: Player elimination
Game Presentation
Short game presentation text that will appear on the game description page, structured as an array of paragraphs.
Each paragraph must be wrapped with totranslate() for translation and should not contain html (plain text without formatting). A good length for this text is between 100 and 150 words (about 6 to 9 lines on a standard display)
Example:
'presentation' => array( totranslate("This wonderful game is about geometric shapes!"), totranslate("It was awarded best triangle game of the year in 2005 and nominated for the Spiel des Jahres."), ... ),
Tie breaker description
Describe tie breaker score calculation (player_score_aux in player table).
Important: This is used in the javascript too, which is automatically generated. Using newlines in here will cause errors in the javascript, which will cause the game to not load.
Example:
'tie_breaker_description' => totranslate("Number of remaining cards in hand"),
Multiple tie breaker management
If your game has multiple tie breakers, here is what you should do.
Let's take this example: "In case of a tie, the winner is the game with the most remaining money, then number of buildings built, then number of cards in your hand".
In this example, your "score_aux" field is probably calculated like this:
10000 * (remaining_money ) + 100 * (buildings_built) + (number_of_cards)
In this case, you should add the following in gameinfos.inc.php:
'tie_breaker_split' => array( 10000, 100 , 1 ),
It means that the first tie breaker has been multiplied by 10000, the second by 100, and the third by 1.
Using this, the result screen will be adapted to show exactly what is needed. For example:
- When 2 players are tied, it will show their remaining money.
- If their remaining money are equal, it will show the number of building built in addition to the remaining money.
- If these two tie breaker are still the same, it will show the 3 tie breaking values.
Language dependency
If you have a game that is language dependent, you can use the option described here: Main_game_logic:_yourgamename.game.php#Language_dependent_games_API
Game page warning
If a specific warning is needed on the game page (to discuss and validate with admins) it can be displayed from the game infos. For example for Texas Hold'em:
'gamepanel_page_warning' => totranslate("There is no real money involved on BGA: this game has the mechanism of Poker but is using points instead of real money."),
Coop Elo Mode
For cooperative games, by default players will earn as many Elo points as the score.
For games where there is no variable difficulty (such as for example Bandido) we keep that setting, but for all coop games where we have options to change the difficulty level and/or where the score reached indicates a higher level of skill and/or where the number of players has a significant impact on the difficulty, we have to set up a reference scale for Elo points (between 1300 and 2500). Players regularly winning with a specific difficulty setting will have their Elo nearing this value asymptotically over time.
For this, you have to set up the coop_elo_mode parameter.
Warning: While this can reflect player skills more precisely compared to flat ELO gain, players may abandon losing games or avoid new players to prevent ELO loss.
Related discussion - https://forum.boardgamearena.com/viewtopic.php?f=3&t=24363
Here is an example using options and win/loss (score 1/0):
'coop_elo_mode' => [ 'type' => 'points_references', 'references' => [ // Difficulty 1 ['players_nbr' => 2, 'options' => [100 => 1, 101 => 0], 'elo' => [0 => 1000, 1 => 1400]], ['players_nbr' => 2, 'options' => [100 => 1, 101 => 1], 'elo' => [0 => 1000, 1 => 1470]], ['players_nbr' => 3, 'options' => [100 => 1, 101 => 0], 'elo' => [0 => 1000, 1 => 1350]], ['players_nbr' => 3, 'options' => [100 => 1, 101 => 1], 'elo' => [0 => 1000, 1 => 1400]], ['players_nbr' => 4, 'options' => [100 => 1, 101 => 0], 'elo' => [0 => 1000, 1 => 1400]], ['players_nbr' => 4, 'options' => [100 => 1, 101 => 1], 'elo' => [0 => 1000, 1 => 1470]], // Difficulty 2 ['players_nbr' => 2, 'options' => [100 => 2, 101 => 0], 'elo' => [0 => 1000, 1 => 1540]], ['players_nbr' => 2, 'options' => [100 => 2, 101 => 1], 'elo' => [0 => 1000, 1 => 1690]], ['players_nbr' => 3, 'options' => [100 => 2, 101 => 0], 'elo' => [0 => 1000, 1 => 1450]], ['players_nbr' => 3, 'options' => [100 => 2, 101 => 1], 'elo' => [0 => 1000, 1 => 1540]], ['players_nbr' => 4, 'options' => [100 => 2, 101 => 0], 'elo' => [0 => 1000, 1 => 1540]], ['players_nbr' => 4, 'options' => [100 => 2, 101 => 1], 'elo' => [0 => 1000, 1 => 1690]], // Difficulty 3 ['players_nbr' => 2, 'options' => [100 => 3, 101 => 0], 'elo' => [0 => 1000, 1 => 1690]], ['players_nbr' => 2, 'options' => [100 => 3, 101 => 1], 'elo' => [0 => 1000, 1 => 1910]], ['players_nbr' => 3, 'options' => [100 => 3, 101 => 0], 'elo' => [0 => 1000, 1 => 1540]], ['players_nbr' => 3, 'options' => [100 => 3, 101 => 1], 'elo' => [0 => 1000, 1 => 1690]], ['players_nbr' => 4, 'options' => [100 => 3, 101 => 0], 'elo' => [0 => 1000, 1 => 1690]], ['players_nbr' => 4, 'options' => [100 => 3, 101 => 1], 'elo' => [0 => 1000, 1 => 1910]], // Difficulty 4 ['players_nbr' => 2, 'options' => [100 => 4, 101 => 0], 'elo' => [0 => 1000, 1 => 1830]], ['players_nbr' => 2, 'options' => [100 => 4, 101 => 1], 'elo' => [0 => 1000, 1 => 2120]], ['players_nbr' => 3, 'options' => [100 => 4, 101 => 0], 'elo' => [0 => 1000, 1 => 1640]], ['players_nbr' => 3, 'options' => [100 => 4, 101 => 1], 'elo' => [0 => 1000, 1 => 1830]], ['players_nbr' => 4, 'options' => [100 => 4, 101 => 0], 'elo' => [0 => 1000, 1 => 1830]], ['players_nbr' => 4, 'options' => [100 => 4, 101 => 1], 'elo' => [0 => 1000, 1 => 2120]], // Difficulty 5 ['players_nbr' => 2, 'options' => [100 => 5, 101 => 0], 'elo' => [0 => 1000, 1 => 1980]], ['players_nbr' => 2, 'options' => [100 => 5, 101 => 1], 'elo' => [0 => 1000, 1 => 2340]], ['players_nbr' => 3, 'options' => [100 => 5, 101 => 0], 'elo' => [0 => 1000, 1 => 1740]], ['players_nbr' => 3, 'options' => [100 => 5, 101 => 1], 'elo' => [0 => 1000, 1 => 1980]], ['players_nbr' => 4, 'options' => [100 => 5, 101 => 0], 'elo' => [0 => 1000, 1 => 1980]], ['players_nbr' => 4, 'options' => [100 => 5, 101 => 1], 'elo' => [0 => 1000, 1 => 2340]], ], ],
Here is an example using different scoring values to indicate the level of difficulty mastered by the players winning the game:
'coop_elo_mode' => array( 'type' => 'points_references', 'references' => array( array( 'players_nbr' => 2, //'options' => array( ), 'elo' => array( 0 => 1000, 1 => 1350, 2 => 1425, 3 => 1500, 4 => 1576, 5 => 1651, 6 => 1727, 7 => 1802, 8 => 1878, 9 => 1953, 10 => 2029, 11 => 2104, 12 => 2180 ) ), array( 'players_nbr' => 3, //'options' => array( ), 'elo' => array( 0 => 1000, 1 => 1400, 2 => 1470, 3 => 1541, 4 => 1612, 5 => 1683, 6 => 1754, 7 => 1825, 8 => 1895, 9 => 1966, 10 => 2018, 11 => 2095, 12 => 2250 ) ), array( 'players_nbr' => 4, //'options' => array( ), 'elo' => array( 0 => 1000, 1 => 1430, 2 => 1505, 3 => 1580, 4 => 1655, 5 => 1730, 6 => 1805, 7 => 1880, 8 => 1955, 9 => 2030, 10 => 2105, 11 => 2180, 12 => 2330 ) ), array( 'players_nbr' => 5, // 'options' => array( ), 'elo' => array( 0 => 1000, 1 => 1480, 2 => 1558, 3 => 1636, 4 => 1714, 5 => 1792, 6 => 1870, 7 => 1949, 8 => 2027, 9 => 2105, 10 => 2183, 11 => 2261, 12 => 2340 ) ) ) ),