<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.doc.boardgamearena.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xmakina</id>
	<title>Board Game Arena - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.doc.boardgamearena.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xmakina"/>
	<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/Special:Contributions/Xmakina"/>
	<updated>2026-11-06T11:39:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=Tools_and_tips_of_BGA_Studio&amp;diff=18928</id>
		<title>Tools and tips of BGA Studio</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=Tools_and_tips_of_BGA_Studio&amp;diff=18928"/>
		<updated>2023-11-19T09:10:57Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: /* State machine diagram generation tool */ Add link for new State Machine generator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Studio_Framework_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== Server Tools and Tips ==&lt;br /&gt;
=== Starting a game in one click ===&lt;br /&gt;
&lt;br /&gt;
To start a game:&lt;br /&gt;
* Go to Play now and configure game type: Simple game -&amp;gt; Turn-based -&amp;gt; Manual&lt;br /&gt;
* Select your game and click on &amp;quot;Create&amp;quot;.&lt;br /&gt;
* If you want to play a game with 3 players, specify that you want a maximum of 3 players at this table.&lt;br /&gt;
* Click on &amp;quot;Express Start&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Stopping a game in one click ===&lt;br /&gt;
&lt;br /&gt;
* Click on the &amp;quot;menú&amp;quot; icon on the top right of the screen.&lt;br /&gt;
* Click on &amp;quot;Express Stop&amp;quot; (&amp;quot;Quit this game&amp;quot; if playing a solo game).&lt;br /&gt;
&lt;br /&gt;
=== Switching between users ===&lt;br /&gt;
&lt;br /&gt;
When running a game on Studio, you can use the little red arrow near each player&#039;s name to open a new tab with this player&#039;s perspective.&lt;br /&gt;
You can also modify the URL to view the table as any user you want (changing &amp;amp;testuser=myid in the URL), allowing to easily test as a spectator.&lt;br /&gt;
&lt;br /&gt;
=== Access to game database and Logs ===&lt;br /&gt;
&lt;br /&gt;
At the bottom of the game area, there is section without a title containing 3 useful links:&lt;br /&gt;
&lt;br /&gt;
  Go to game database • BGA request&amp;amp;SQL logs • BGA unexpected exceptions logs&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Go to game database&amp;quot; link is an immediate access to the PhpMyAdmin tool to view/edit the tables of the current game&lt;br /&gt;
* BGA request&amp;amp;SQL logs - link to your studio PHP log - all tables, all severities. Anything you print using debugging and tracing functions from PHP and some framework logs&lt;br /&gt;
* BGA unexpected exceptions logs - same log as above but only severity warning and higher&lt;br /&gt;
&lt;br /&gt;
See [[Practical debugging]] for more info about it.&lt;br /&gt;
&lt;br /&gt;
=== Save &amp;amp; restore state ===&lt;br /&gt;
&lt;br /&gt;
Using links of this section, you can save the complete current (database) state of your game, then restore it later.&lt;br /&gt;
&lt;br /&gt;
This is particularly useful when you want to develop a part of the game that is difficult to reproduce: you just have to save the situation just before, and then restore it until this part works fine.&lt;br /&gt;
&lt;br /&gt;
We provide you 3 &amp;quot;slots&amp;quot;: 1, 2 and 3. This way, you can save 3 different game situations.&lt;br /&gt;
&lt;br /&gt;
Limits:&lt;br /&gt;
* the &amp;quot;restore&amp;quot; function does not work anymore when the game is over.&lt;br /&gt;
* a saved situation from a given table cannot be restored in another table.&lt;br /&gt;
* when you &amp;quot;restore&amp;quot; a situation, the current browser page is refreshed to reflect the updated game situation, but you have to refresh you other tabs/pages manually.&lt;br /&gt;
&lt;br /&gt;
=== Input/Output debugging section ===&lt;br /&gt;
&lt;br /&gt;
This section shows you:&lt;br /&gt;
* The AJAX calls made by your game interface to the game server. AJAX calls (outputs) begins with &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
* The notifications received by your game interface. Notifications (inputs) begins with &amp;quot;&amp;lt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note: if you click on some notification title, you can resend it immediately to the user interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run PHP functions from the chat ===&lt;br /&gt;
&lt;br /&gt;
On BGA Studio, you can directly run a PHP method from the table chat. The production environment does not allow PHP methods to be called from the table chat.&lt;br /&gt;
&lt;br /&gt;
For example, if on your PHP you have this method:&lt;br /&gt;
   &lt;br /&gt;
   function giveMoneyToPlayer($player_id, $amount) { ... }&lt;br /&gt;
&lt;br /&gt;
You can call this method directly from the chat like this: &lt;br /&gt;
&lt;br /&gt;
  giveMoneyToPlayer(2564,2)&lt;br /&gt;
&lt;br /&gt;
Note: this is not a real php statement, you cannot use self::, you cannot use &amp;quot;;&amp;quot; at the end and you cannot use quotes,&lt;br /&gt;
if you need to pass a string skip the quotes, like this&lt;br /&gt;
  &lt;br /&gt;
  giveToActivePlayer(money,2)&lt;br /&gt;
&lt;br /&gt;
What if you want something more complex like passing an array? Or calling other function? Just create another function in php for that and use it. I suggest to use prefix debug for all such functions.&lt;br /&gt;
  function debug_q($x) {&lt;br /&gt;
       $player_id = $this-&amp;gt;getActivePlayerId();&lt;br /&gt;
       $this-&amp;gt; giveMoneyToPlayer($player_id, $x);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Zombify a player ===&lt;br /&gt;
&lt;br /&gt;
Call this from chat (studio only) to zombify current player (who is &amp;quot;thinking&amp;quot;)&lt;br /&gt;
  timeout()&lt;br /&gt;
&lt;br /&gt;
Never call from game code.&lt;br /&gt;
&lt;br /&gt;
=== Stopping Hanging Game ===&lt;br /&gt;
&lt;br /&gt;
If game is hanging and you cannot enter it to stop you can type this URL (replace 12345 with your table number),&lt;br /&gt;
which should bring you to a place where you can stop it without entering:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;https://studio.boardgamearena.com/#!table?table=12345&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Desktop and Web Tools ==&lt;br /&gt;
=== Code Editors and IDEs ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Visual Studio Code ====&lt;br /&gt;
Microsoft Visual Studio Code is light weight IDE/Editor. All desktops.&lt;br /&gt;
https://code.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
See [[Setting up BGA Development environment using VSCode]]&lt;br /&gt;
&lt;br /&gt;
==== Eclipse For PHP Developers ====&lt;br /&gt;
&lt;br /&gt;
Eclipse PHP package can be starting point for development you need. You may also want to &lt;br /&gt;
install Tern JS plugins to understand dojo style JS. All desktops.&lt;br /&gt;
https://projects.eclipse.org/projects/tools.pdt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Gedit (Ubuntu) ====&lt;br /&gt;
&#039;&#039;&#039;Edit TPL&#039;&#039;&#039;&lt;br /&gt;
To edit TPL with HTML code highlightings in Gedit under Ubuntu:&lt;br /&gt;
&lt;br /&gt;
find gtksourceview directory in /usr/share, depending on your version (2.0, 3.0,...).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Here it&#039;s 3.0, then type in a terminal window:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo gedit /usr/share/gtksourceview-3.0/language-specs/html.lang&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then find &#039;globs&#039; section, and change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;globs&amp;quot;&amp;gt;*.html;*.htm;*.tpl&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File Sync ===&lt;br /&gt;
&lt;br /&gt;
NOTE: If you use VS Code you don&#039;t need to use methods below, use one of the sync methods provided by VS Code extensios. See [[Setting up BGA Development environment using VSCode]]&lt;br /&gt;
&lt;br /&gt;
==== File Sync on Windows ====&lt;br /&gt;
&lt;br /&gt;
Install [http://winscp.net/ WinSCP]. Map a remote directory to a local one and enable continuous sync (one way). You need SFTP password you get when you registered dev account.&lt;br /&gt;
&lt;br /&gt;
==== File Sync on Linux ====&lt;br /&gt;
&lt;br /&gt;
===== Option 1 - Nautilus (file manager) =====&lt;br /&gt;
You can just use Nautilus &amp;quot;connect to a server&amp;quot; function with URL sftp://1.studio.boardgamearena.com&lt;br /&gt;
Then you&#039;ll get a mounted local folder mapping your studio folder and you can use any editor you like without further need for sync. Downside - if connection goes down you cannot work on source code, no local copy.&lt;br /&gt;
&lt;br /&gt;
===== Option 2 - sftp and rsync =====&lt;br /&gt;
This setup will sync in the background (continious sync) when file is saved, after you set it up and start just save your files and they be on server before you can hit refresh.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
BASEDIR=`dirname $0`&lt;br /&gt;
REMOTE=$BASEDIR/remote&lt;br /&gt;
LOCAL=$BASEDIR/workspace&lt;br /&gt;
GAME=mygamenamehere&lt;br /&gt;
&lt;br /&gt;
#mount remote&lt;br /&gt;
fusermount -u $REMOTE #this unmounts dir&lt;br /&gt;
#this asssumes your default ssh key is uploaded to studio&lt;br /&gt;
sshfs  myusernamehere@1.studio.boardgamearena.com: $REMOTE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#this starts auto-sync from local to remote mount&lt;br /&gt;
killall lsyncd&lt;br /&gt;
lsyncd -delay 1 -rsync $LOCAL/$GAME/ $REMOTE/$GAME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be able run on startup, so you don&#039;t have to do anything manually. However sshfs is not very stable you&lt;br /&gt;
have to kill and restart it sometimes. And remote goes away sometimes due to connection issues with studio. &lt;br /&gt;
In this case its handy to have a local copy, which is what lsyncd for.&lt;br /&gt;
&lt;br /&gt;
You can also sync on demand (from a build script or editor command) using&lt;br /&gt;
 rsync -vlrt $LOCAL/$GAME/ $REMOTE/$GAME&lt;br /&gt;
&lt;br /&gt;
Note: is insecure way of running sshfs&lt;br /&gt;
echo LongDevPassword | sshfs -o password_stdin ...&lt;br /&gt;
&lt;br /&gt;
===== Option 3 - lftp =====&lt;br /&gt;
&lt;br /&gt;
[https://lftp.yar.ru/ lftp] is a fast command-line file transfer program. It supports parallel threads, transferring multiple files at a time.&lt;br /&gt;
&lt;br /&gt;
* Linux: Install using your package manager, for example: &#039;&#039;&#039;sudo apt-get install lftp&#039;&#039;&#039;&lt;br /&gt;
* Mac: Install [https://brew.sh/ Homebrew], then install lftp using &#039;&#039;&#039;brew install lftp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To upload your project to BGA studio, use the &amp;quot;mirror&amp;quot; command like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lftp sftp://&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;myuser&amp;lt;/span&amp;gt;:&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;mypassword&amp;lt;/span&amp;gt;@1.studio.boardgamearena.com/ -e &amp;quot;mirror --reverse --parallel=10 --delete &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;/local/path/to/myproject&amp;lt;/span&amp;gt;/ &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;myproject&amp;lt;/span&amp;gt;/; exit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Be sure to include the trailing &#039;&#039;&#039;/&#039;&#039;&#039; after both directory names.&lt;br /&gt;
&lt;br /&gt;
By default, if a file already exists on BGA Studio with the same time + size it assumed to be the same and won&#039;t be transferred. This makes the transfer process much quicker after the first time. If you&#039;re working with multiple developers on the same project and you find that it is transfers all files every time, you may want to add the option &#039;&#039;&#039;--ignore-time&#039;&#039;&#039; (if a file already exist on BGA Studio with the same size it is assumed to be the same and won&#039;t be transferred). Read [https://lftp.yar.ru/lftp-man.html the manual] for more details.&lt;br /&gt;
&lt;br /&gt;
This is one time sync (unless I am missing something this does not do continious sync?)&lt;br /&gt;
&lt;br /&gt;
=== Debuggers ===&lt;br /&gt;
&lt;br /&gt;
Browser is the best tool for JS/HTML5 debugging, see [[Practical debugging]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Version Control ===&lt;br /&gt;
Studio provides svn for you code on server, there are some limited abilities there to see history and restore. I recommend to also keep your code in another repository, which allows keeping more fine-grained history and can simplify collaboration.&lt;br /&gt;
&lt;br /&gt;
A quick option is to use a local repo, which you can sync to cloud or backup.&lt;br /&gt;
&lt;br /&gt;
Other option is to host source code on github. If you do, the convention is to use github.com/&amp;lt;yourname&amp;gt;/bga-&amp;lt;yourgame&amp;gt;. It is recommended to add the [https://github.com/topics/boardgamearena boardgamearena] tag and add your repo to the list on the [[BGA_Code_Sharing]] page.&lt;br /&gt;
&lt;br /&gt;
If you publish the source somewhere externally, make sure you &#039;&#039;&#039;don&#039;t post high-res publisher graphics&#039;&#039;&#039;, only web resources, and post a separate license for graphics files. Also, &#039;&#039;&#039;don&#039;t include a file with your sftp password&#039;&#039;&#039; (github is automatically crawled for passwords by hackers; a hacking attempt occurred on BGA studio for this reason in June 2020).&lt;br /&gt;
&lt;br /&gt;
You can also configure github to automatically deploy to BGA whenever you push to a branch. See [https://forum.boardgamearena.com/viewtopic.php?f=12&amp;amp;t=13370&amp;amp;start=10#p59537 this forum post] for instructions.&lt;br /&gt;
&lt;br /&gt;
=== PHP CLI ===&lt;br /&gt;
Its handy to have php cli (command line) tools install to run php locally, so you can test some stuff without deployment cycle, or create some scripts that generate code or markup.&lt;br /&gt;
&lt;br /&gt;
=== Image Manipulation ===&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Handy set of image manipulation &#039;&#039;&#039;command line&#039;&#039;&#039; tools, useful to for example to stitch together bunch of images and re-size, to use as sprite (in Stock component for example). I.e. you got a graphics file from publisher where every tile is 600x600 PNG file in separate file. You want .jpg instead of .png to make it not like 20Mb, and combine all images in one column and re-size to 128x128:&lt;br /&gt;
&lt;br /&gt;
(Linux example)&lt;br /&gt;
 /usr/bin/montage  `ls Tiles*.png` -tile 1 -geometry 128x128+0+0 out/tiles128.jpg&lt;br /&gt;
&lt;br /&gt;
The order of the images will match the &#039;ls&#039; order. If needed change the filenames if you need a specific order.&lt;br /&gt;
&lt;br /&gt;
https://www.imagemagick.org/script/download.php&lt;br /&gt;
&lt;br /&gt;
==== Gimp ====&lt;br /&gt;
&lt;br /&gt;
GUI tool, very complex but will do ALL what you possibly need to do with game graphics&lt;br /&gt;
&lt;br /&gt;
https://www.gimp.org/&lt;br /&gt;
&lt;br /&gt;
==== Shrinking ====&lt;br /&gt;
&lt;br /&gt;
Shrink images without loss of quality https://tinypng.com/ or http://www.iloveimg.com/ &lt;br /&gt;
&lt;br /&gt;
==== PDF Scrapper ====&lt;br /&gt;
extract images from PDF file (i.e. game rulebook) :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.ilovepdf.com/&lt;br /&gt;
&lt;br /&gt;
http://www.extractpdf.com/&lt;br /&gt;
&lt;br /&gt;
On linux tool that does it in command line &amp;quot;pdfimages&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Rename/Copy project ====&lt;br /&gt;
&lt;br /&gt;
You can now override your project with any other project using Studio Control Panel.&lt;br /&gt;
&lt;br /&gt;
Alternatively there is a script available in sharedcode project to do the renaming which can be called in command line if you have php command line installed.&lt;br /&gt;
You need to have php clt (command line interface) installed, then you can download script and run it.&lt;br /&gt;
&lt;br /&gt;
https://github.com/elaskavaia/bga-sharedcode/blob/master/misc/bgaprojectrename.php&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
 php bgaprojectrename.php &amp;lt;originalProjectPath&amp;gt; &amp;lt;copyOfProjectRenamedPath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example on how to call it in command line  if you project name is &amp;quot;heartsmyproject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 php7.0 git/bga-sharedcode/tools/bgaprojectrename.php remote/hearts/ remote/heartsmyproject/&lt;br /&gt;
&lt;br /&gt;
==== BGA Workbench ====&lt;br /&gt;
&lt;br /&gt;
PHP library providing tools to help manage BGA Studio projects including deployment and test utilities. https://github.com/danielholmes/bga-workbench&lt;br /&gt;
&lt;br /&gt;
=== Testing and validation tools ===&lt;br /&gt;
&lt;br /&gt;
* Run static analysis on your project to detect common problem and translation issues - project check - available from control panel - manage games - &amp;lt;your project&amp;gt; - Check project (blue button left middle)&lt;br /&gt;
* Check if web feature is supported https://caniuse.com/&lt;br /&gt;
* PHP: https://phpcodechecker.com/&lt;br /&gt;
* JS: http://esprima.org/demo/validate.html&lt;br /&gt;
* CSS: http://jigsaw.w3.org/css-validator/&lt;br /&gt;
&lt;br /&gt;
=== State machine diagram generation tool ===&lt;br /&gt;
&lt;br /&gt;
You can easily generate a state machine diagram from your states.inc.php using the dot language (https://graphviz.org/) via a PHP script.&lt;br /&gt;
&lt;br /&gt;
To do so:&lt;br /&gt;
* download the php script from the bga-sharedcode git repo located here https://github.com/elaskavaia/bga-sharedcode/blob/master/misc/generate_state_diagram.php and place it into your project root (on the same level as states.inc.php)&lt;br /&gt;
* run the script locally: &amp;quot;php.exe generate_state_diagram.php &amp;gt; graph.dot&amp;quot;&lt;br /&gt;
* open the generated dot file for visualization in visual studio code using the &amp;quot;Graphviz Interactive Preview&amp;quot; extension&lt;br /&gt;
* alternatively install graphiz (https://graphviz.org/download/) and generate an image file by running the following command &amp;quot;dot -Tpng -o graph.png graph.dot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here is an example of running the generation script on the hearts game from the tutorial:&lt;br /&gt;
&lt;br /&gt;
[[File:State_machine_diagram_dot.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Legend:&#039;&#039;&#039;&lt;br /&gt;
* states of type game appear in yellow&lt;br /&gt;
* states of type activeplayer appear in blue&lt;br /&gt;
* states of type multipleactiveplayer appear in green&lt;br /&gt;
Once you have this state machine, you can use it to generate boilerplate code using the [https://github.com/xmakina/bga-statemachinegenerator BGA State Machine Generator]&lt;br /&gt;
&lt;br /&gt;
== Other useful tools ==&lt;br /&gt;
&lt;br /&gt;
* Website with bunch of textures and sounds http://www.grsites.com/archive/textures/&lt;br /&gt;
* Shrink images without loss of quality https://tinypng.com/ or http://www.iloveimg.com/ (recommended by Gregory Isabelli)&lt;br /&gt;
* CSS shapes https://css-tricks.com/examples/ShapesOfCSS/&lt;br /&gt;
* PDF Scraper - extract images - http://www.extractpdf.com/&lt;br /&gt;
* Hexagonal Grids (from Red Blob Games) - https://www.redblobgames.com/grids/hexagons/&lt;br /&gt;
* CSS tools (shades, shapes, textures) - https://dev.to/lissy93/super-useful-css-resources-1ba3&lt;br /&gt;
* Color blind pallette https://jfly.uni-koeln.de/color/&lt;br /&gt;
* CSS stroked text https://blog.logrocket.com/create-beautiful-stroked-text-css/&lt;br /&gt;
* CSS box model and SVG images https://www.freecodecamp.org/news/how-to-use-css-box-model-and-style-svg-images/&lt;br /&gt;
&lt;br /&gt;
== Client Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Speed up game re-loading by disabling Input/Output debug section ===&lt;br /&gt;
&lt;br /&gt;
Development UI have few sections for debugging only, such as &#039;Input/Output debugging section&#039;. Loading this data will significantly slow down&lt;br /&gt;
your reload. I did some profiling and my reloading (i.e. F5) took 14 seconds, 12 of which it was dealing with loading this section. &lt;br /&gt;
If you not using it you can disable it. In your JavaScript code, in the begging of &#039;setup&#039; method add this code&lt;br /&gt;
&lt;br /&gt;
         dojo.destroy(&#039;debug_output&#039;);&lt;br /&gt;
&lt;br /&gt;
That should get rid of this section and overhead associated with loading it (it may have some other side-effects, I have not explored all of them)&lt;br /&gt;
&lt;br /&gt;
=== Speed up CSS development and layout ===&lt;br /&gt;
&lt;br /&gt;
Syncing files to server and refreshing is relative fast but still can take up to 20 seconds which is annoying.&lt;br /&gt;
If you working&lt;br /&gt;
a lot on css/images/layout you can speed it up by copying html in some state of the game to your local folder.&lt;br /&gt;
I.e. in your  project folder create directory misc/ and save your html as misc/test.html and changing path to css to load from local disk (and it will load your images to from local disk as well). &lt;br /&gt;
I.e. find something like&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://1.studio.boardgamearena.com:8081/data/themereleases/151226-1240/games/mygame/999999-9999/mygame.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and replace with&lt;br /&gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;../mygame.css&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You project structure will look like this&lt;br /&gt;
&lt;br /&gt;
 mygame&lt;br /&gt;
   img/ &amp;lt;-- your images&lt;br /&gt;
   mygame.css  &amp;lt;-- your original css&lt;br /&gt;
   ...&lt;br /&gt;
   misc/&lt;br /&gt;
     test.html &amp;lt;-- your test html&lt;br /&gt;
&lt;br /&gt;
It is a bit tricky to save html exact state, if you do save as it also pulls all resources sometimes.&lt;br /&gt;
&lt;br /&gt;
[[Category:Studio]]&lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=File:Hearts_all_rows.png&amp;diff=18824</id>
		<title>File:Hearts all rows.png</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=File:Hearts_all_rows.png&amp;diff=18824"/>
		<updated>2023-11-10T09:20:55Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Display a list of all players, with a dummy card in each position&lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=File:Hearts_Tutorial_showing_all_players.png&amp;diff=18823</id>
		<title>File:Hearts Tutorial showing all players.png</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=File:Hearts_Tutorial_showing_all_players.png&amp;diff=18823"/>
		<updated>2023-11-10T09:19:03Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Display a list of all players, with a dummy card in each position&lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17791</id>
		<title>Tips eminentdomain</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17791"/>
		<updated>2023-08-14T18:50:31Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: /* Tips from the Pros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base Game ==&lt;br /&gt;
Take the time to learn the Base Game before you add in the Escalation expansion.&lt;br /&gt;
&lt;br /&gt;
Pick either Warfare of Colonise for taking control of planets, don&#039;t try to use both.&lt;br /&gt;
&lt;br /&gt;
Use the Research Action to remove the cards you don&#039;t plan on using. If you ever discard a card at the end of your round, ask yourself if you even want it in your deck.&lt;br /&gt;
&lt;br /&gt;
Survey early to find planets which complement each other.&lt;br /&gt;
&lt;br /&gt;
Try to get 3 planets of the same kind and push for the level 3 technology (7 research icons). These technologies give you game breaking abilities.&lt;br /&gt;
&lt;br /&gt;
Remember that the planets don&#039;t have the level 1 technology that should match with them (Fertile does not have Improved Colonise, Advanced does not have Advanced Research and Metallic does not have Advanced Warfare)&lt;br /&gt;
&lt;br /&gt;
Planets with a Colony symbol are a permanent discount to all colonisation costs instead of an extra icon when the role is chosen.&lt;br /&gt;
&lt;br /&gt;
Planets which increase hand size will give you a lot more options each turn.&lt;br /&gt;
&lt;br /&gt;
Keep an eye on how many cards are left in each role; if you&#039;re ahead consider taking a less efficient role to finish the game faster.&lt;br /&gt;
&lt;br /&gt;
== Escalation Expansion ==&lt;br /&gt;
Annex can really mess with colonisers.&lt;br /&gt;
&lt;br /&gt;
You can buy research with fighters, destroyers and battlecruisers. If you Warfare, you can get game end tech without needing to lead Research roles.&lt;br /&gt;
&lt;br /&gt;
Diverse Planets are now an option, especially with Oversight Committee consider pushing for one-of-each&lt;br /&gt;
&lt;br /&gt;
== Tips from the Pros ==&lt;br /&gt;
&lt;br /&gt;
=== SMoslim ===&lt;br /&gt;
This is a Victory Point game the main source of VP&#039;s are your roles. You are allowed only one necessary 0 VP role, the one when you get your first tech. Next you should always get points in your roles. The main method to do that is to go for survey each time you cannot get points otherwise, especially in the beginning. A lot of beginners waist time in getting multiple level 1 tech that is useless because it is not worth the role you pay for them. You can however get them if you are following, not leading.&lt;br /&gt;
&lt;br /&gt;
A tip I learned from analysing the top player is at the very beginning of the game; if you have first turn and you choose the Survey role, do not use any of your Survey cards. Keep them so you can use them to follow your opponent&#039;s Survey role.&lt;br /&gt;
&lt;br /&gt;
If you get an Advanced Planet with a Research symbol early, consider skipping getting a Level 1 tech and get your fourth Research symbol from exchanging Politics for Research. This should be especially true if the Advanced world only needs 3 colonies to Settle.&lt;br /&gt;
&lt;br /&gt;
In Escalation, Warfare is a big risk/big reward strategy. Most top players avoid it because of the risk. Skilled players can mix Warfare and Colonize mid game, but a player needs very specific circumstances and skills to make this work, so I do no advise this strategy for beginners. I would only go for Warfare in Escalation if I start with a metallic planet, and I Survey&#039;d a metallic planet that only needs 4 fighters to attack, and preferably with a warfare symbol.&lt;br /&gt;
&lt;br /&gt;
Not all tech cards are created equal, some of them are really powerful and should always be picked if they&#039;re available. Pay attention to what the top players choose. As your experience grows, and you can start paying attention to what your opponent is going for, you may get a less optimal technology just to prevent your opponent from getting it, since it fits perfectly into their strategy.&lt;br /&gt;
&lt;br /&gt;
The Eminent Domain community on BGA is small, so it might be subject to &amp;quot;group think&amp;quot;. Once you have became a strong player, you need to start experimenting with different strategies. Pay attention to what other players do that is unusual. Even when I thought I was an expert, I learned a lot from weaker players that were using unusual strategies.&lt;br /&gt;
&lt;br /&gt;
I see a lot of players getting stuck in low levels even though they played a lot of games. The main reason, I believe, is because they never change their playing style and always do what they are used to. I am now a master, and I still think about a few strategies in the opening phases of the game that I figured weren&#039;t that optimal. So, you need to always keep evolving. I also asked some top players about the different tech cards and their strategies, however they never used them. That&#039;s a big mistake since it limits your growth, and although those players are great, they hit the limit of the potential of their limited strategies.&lt;br /&gt;
&lt;br /&gt;
The main reason is one of two; they play on auto mode so they don&#039;t get out of their confort zone. Or, they don&#039;t want to risk experimenting because losing comes at a great punishment, which I, personally, understand. The main solution to this is to play lots of Scenario games since they force new strategies on you while you are still a Good or Strong player since losing isn&#039;t that big of a deal that those levels. Now that I&#039;m at a master ranking, losing any game absolutely destroys my ELO rating.&lt;br /&gt;
&lt;br /&gt;
If you are really serious about the game, you need to start analysing high level player games and critique their decisions and compare them to yours. However, don&#039;t follow these games blindly, high level players aren&#039;t perfect, and also they don&#039;t always tale the game super seriously, and sometimes make a worse decision because it us more fun.&lt;br /&gt;
&lt;br /&gt;
One of the most successful strategies that I use now is the Heavy Survey/Remove Cards opening strategy. I use this strategy because during a game, sometimes you get the perfect colonize hand but no Face Down planets, or more colonize cards than needed for the planets you have, so you are forced to play a suboptimal role. You never have this problem if you have an abundance of Face Down planets, so get a lot of planets in the early game so you can always have optimal turns and a lot of options to where you want to take the game according to your circumstance. When I first discovered this strategy, I quickly found it has a huge flaw, it fills your deck with Survey cards that are, generally, useless in the mid to late game. So, the Heavy Remove cards from the game strategy is needed as well. You need to keep removing those Survey cards from your deck, using the Research action, to keep your deck compact.&lt;br /&gt;
&lt;br /&gt;
Another strategy that comes with this one. Is that you try to get at least one follow. Either by following Survey or Colonise. To that you need to keep your hand prepared for those. Following is main source of extra points in high level games. To have the ability to follow you need to keep cheking your opponents discard pile so you can predict their next move. To do that you might need, from time to time, to use the wait option before the clean up phase to see if your opponents follows you. Just don&#039;t be the guy that use it all the time, especially in turn based games. I encountered a few of those players and it just slows down the game a lot for no reason.&lt;br /&gt;
&lt;br /&gt;
Deck balance: a lot of rookies and some times top players go for heavy warfare or heavy survey without paying attention to their deck balance. Although it seems perfect at the start, they later start getting a lot of cards they don&#039;t need, or take roles they dont want to take, and it only gets worse and removing cards frome your deck mid game is really suboptimal. So you need to avoid it. Unless you are using Oversight Commitee tech card, which is not as bad. Your deck needs to always be balanced so don&#039;t mess it up at the opening stage.&lt;br /&gt;
&lt;br /&gt;
Discard pile: as previously said, pay attention to your opponents discard pile to predict if he is going to follow you or what is he going to play next turn.but another very important discard pile is the planets discard pile. When you became a strong player you should know all the planets of the game. so use the discard pile to predict what you might get. Although you cannot see the cards in the planets deck you can have perfect information just by looking at cards in colonies and the discard pile. Some times you give up on your perfect role just to play or follow a surveil role to get the top Planet because it is woth it for you or too good to let your opponent get it.&lt;br /&gt;
&lt;br /&gt;
Bad tech cards are extremely powerful in some strategies: if you are going for a strategy double down on it in the tech cards have your entire deck go for it instead of having a diversified strat. It might seem simple as a tip but no very few players go for this because they are swayed buy the shiny good tech card. Because they are used to choosing it. Especially that this adviced cannot always be used to the fullest since it is a circumstances specific. The the real tip hiding behind this obvious one is always pay attention to your go-to moves yes they are the best in 90% of the times but not in 100% of them and this is way a lot of players never played some tech cards because they missed the opportunity to use them when the rare circumstance to use them optimally comes up.&lt;br /&gt;
&lt;br /&gt;
Your action: most average to strong players don&#039;t understand how important this one is because roles are the source of points and the optimal action is most of the time obvious. But what they dont realise is that the action should be prepared. In the previous turn so you are not forced to an action.&lt;br /&gt;
&lt;br /&gt;
One of the wosrt actions is the draw action it simply give you 0 point. It is only realy useful when you are in a race against your opponent to get a tech card first. Or to have a realy big role. But I a realy big one not to complete a normal one. Because when used to accomplish a big role it means&lt;br /&gt;
&lt;br /&gt;
it made you play 2 roles in 1and that is not a common situation. By the way getting a lvl 3 tech card isn&#039;t a big role that is just a normal role. I mean by big a 1.5 to 2 roles in one. In other terms wining points. Another wast of an action is the remove cards from hand one once you are no longer in the opening phase.&lt;br /&gt;
&lt;br /&gt;
So you only have as a good action the suttel/attack or a tech that doesn&#039;t what a role doses or win points. Otherwise you are wasting an action.&lt;br /&gt;
&lt;br /&gt;
This tip however is top teir one don&#039;t pay attention to it if you are an average player because it needs high lvl hand management. Otherwise your action is foced any way.&lt;br /&gt;
&lt;br /&gt;
Deck cycle:&lt;br /&gt;
&lt;br /&gt;
Much more tips to come this just the generalities. I&#039;m tired now. If you are a native English speaker you might need to rephrase an reorganize most of this. If you find a tip not clear or if you don&#039;t agree with it. Tell me so I clarify or have a discussion so we converge or agree to disagree       &lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17044</id>
		<title>Tips eminentdomain</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17044"/>
		<updated>2023-05-30T18:53:09Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: Added tips from SMoslim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base Game ==&lt;br /&gt;
Take the time to learn the Base Game before you add in the Escalation expansion.&lt;br /&gt;
&lt;br /&gt;
Pick either Warfare of Colonise for taking control of planets, don&#039;t try to use both.&lt;br /&gt;
&lt;br /&gt;
Use the Research Action to remove the cards you don&#039;t plan on using. If you ever discard a card at the end of your round, ask yourself if you even want it in your deck.&lt;br /&gt;
&lt;br /&gt;
Survey early to find planets which complement each other.&lt;br /&gt;
&lt;br /&gt;
Try to get 3 planets of the same kind and push for the level 3 technology (7 research icons). These technologies give you game breaking abilities.&lt;br /&gt;
&lt;br /&gt;
Remember that the planets don&#039;t have the level 1 technology that should match with them (Fertile does not have Improved Colonise, Advanced does not have Advanced Research and Metallic does not have Advanced Warfare)&lt;br /&gt;
&lt;br /&gt;
Planets with a Colony symbol are a permanent discount to all colonisation costs instead of an extra icon when the role is chosen.&lt;br /&gt;
&lt;br /&gt;
Planets which increase hand size will give you a lot more options each turn.&lt;br /&gt;
&lt;br /&gt;
Keep an eye on how many cards are left in each role; if you&#039;re ahead consider taking a less efficient role to finish the game faster.&lt;br /&gt;
&lt;br /&gt;
== Escalation Expansion ==&lt;br /&gt;
Annex can really mess with colonisers.&lt;br /&gt;
&lt;br /&gt;
You can buy research with fighters, destroyers and battlecruisers. If you Warfare, you can get game end tech without needing to lead Research roles.&lt;br /&gt;
&lt;br /&gt;
Diverse Planets are now an option, especially with Oversight Committee consider pushing for one-of-each&lt;br /&gt;
&lt;br /&gt;
== Tips from the Pros ==&lt;br /&gt;
&lt;br /&gt;
=== SMoslim ===&lt;br /&gt;
This is a Victory Point game the main source of VP&#039;s are your roles. You are allowed only one necessary 0 VP role, the one when you get your first tech. Next you should always get points in your roles. The main method to do that is to go for survey each time you cannot get points otherwise, especially in the beginning. A lot of beginners waist time in getting multiple level 1 tech that is useless because it is not worth the role you pay for them. You can however get them if you are following, not leading.&lt;br /&gt;
&lt;br /&gt;
A tip I learned from analysing the top player is at the very beginning of the game; if you have first turn and you choose the Survey role, do not use any of your Survey cards. Keep them so you can use them to follow your opponent&#039;s Survey role.&lt;br /&gt;
&lt;br /&gt;
If you get an Advanced Planet with a Research symbol early, consider skipping getting a Level 1 tech and get your fourth Research symbol from exchanging Politics for Research. This should be especially true if the Advanced world only needs 3 colonies to Settle.&lt;br /&gt;
&lt;br /&gt;
In Escalation, Warfare is a big risk/big reward strategy. Most top players avoid it because of the risk. Skilled players can mix Warfare and Colonize mid game, but a player needs very specific circumstances and skills to make this work, so I do no advise this strategy for beginners. I would only go for Warfare in Escalation if I start with a metallic planet, and I Survey&#039;d a metallic planet that only needs 4 fighters to attack, and preferably with a warfare symbol.&lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
	<entry>
		<id>https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17041</id>
		<title>Tips eminentdomain</title>
		<link rel="alternate" type="text/html" href="https://en.doc.boardgamearena.com/index.php?title=Tips_eminentdomain&amp;diff=17041"/>
		<updated>2023-05-30T11:02:09Z</updated>

		<summary type="html">&lt;p&gt;Xmakina: Added some hints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base Game ==&lt;br /&gt;
Take the time to learn the Base Game before you add in the Escalation expansion.&lt;br /&gt;
&lt;br /&gt;
Pick either Warfare of Colonise for taking control of planets, don&#039;t try to use both.&lt;br /&gt;
&lt;br /&gt;
Use the Research Action to remove the cards you don&#039;t plan on using. If you ever discard a card at the end of your round, ask yourself if you even want it in your deck.&lt;br /&gt;
&lt;br /&gt;
Survey early to find planets which complement each other.&lt;br /&gt;
&lt;br /&gt;
Try to get 3 planets of the same kind and push for the level 3 technology (7 research icons). These technologies give you game breaking abilities.&lt;br /&gt;
&lt;br /&gt;
Remember that the planets don&#039;t have the level 1 technology that should match with them (Fertile does not have Improved Colonise, Advanced does not have Advanced Research and Metallic does not have Advanced Warfare)&lt;br /&gt;
&lt;br /&gt;
Planets with a Colony symbol are a permanent discount to all colonisation costs instead of an extra icon when the role is chosen.&lt;br /&gt;
&lt;br /&gt;
Planets which increase hand size will give you a lot more options each turn.&lt;br /&gt;
&lt;br /&gt;
Keep an eye on how many cards are left in each role; if you&#039;re ahead consider taking a less efficient role to finish the game faster.&lt;br /&gt;
&lt;br /&gt;
== Escalation Expansion ==&lt;br /&gt;
Annex can really mess with colonisers.&lt;br /&gt;
&lt;br /&gt;
You can buy research with fighters, destroyers and battlecruisers. If you Warfare, you can get game end tech without needing to lead Research roles.&lt;br /&gt;
&lt;br /&gt;
Diverse Planets are now an option, especially with Oversight Committee consider pushing for one-of-each&lt;/div&gt;</summary>
		<author><name>Xmakina</name></author>
	</entry>
</feed>