Skip to content
96LawDawg edited this page Jan 10, 2025 · 38 revisions

Version Upgrades

Some changes to VTT require all added games to be upgraded/migrated to a newer version. The difference to a regular server update is that a Version Upgrade affects the JSON in your uploaded VTT files, so it's no longer compatible with earlier versions of VTT*. If you need to make changes, we will announce the process in Discord before implementing a major change so you have time to ask questions or prepare your games for the change (if needed). Relatively minor changes are discussed in the individual pull requests if you are interested. They will be implemented when ready and announced in Discord after the fact.

We will try our best to make the migration process painless for you, so existing games don't break. With each version upgrade, we will explain the change and explicitly tell you what actions (if any) you may want to take. If you do notice any unexpected problems after an upgrade, let us know in Discord.

(*) If all you do is make and play games on the virtualtabletop.io website, you don't have to worry about version compatibility. You may only experience issues if you try to play a v2 game in an environment that still runs v1.

v17 (implemented 2025-01-09)

Breaking Changes / Required Actions: none
Pull Request: #2432

Removes all usage of Google Material Icons and replaces with Google Material Symbols.

v16 (implemented 2024-09-13)

Breaking Changes / Required Actions: none
Pull Request: #1466

Modifies how the count parameter works for MOVE, MOVEXY, FLIP, and ROTATE. The value 0 now moves/flips/rotates 0 cards. To make the function work on all of the cards, use "all." Positive numbers move that many cards. Negative numbers leave that many cards behind. The file updater converted any 0 values in those functions to "all".

v15 (implemented 2023-11-16)

Breaking Changes / Required Actions: none
Pull Request: #1942

Adds the property skipTurn to all seats and defaults to false. This allows the TURN function to skip any seats with this property set to true. The file updater renamed any existing skipTurn properties (and the references to them in routines) to skipTurnFileUpddater.

v14 (implemented 2023-10-01)

Breaking Changes / Required Actions: none
Pull Request: #1829

Adds the property hidePlayerCursors to all holders with "childrenPerOwner": true. This has the effect of hiding other players' cursors over "hand"-type holders.

v13 (implemented 2023-04-09)

Breaking Changes / Required Actions: none
Pull Request: #1033

Fixes problems with the textArea height and scrollbars in label widgets. Safari browsers still do not work properly.

v12 (implemented 2023-02-10)

Breaking Changes / Required Actions: none
Pull Request: #1501

Adds a new dropShadow property holders. While dragging a widget to a holder with "dropShadow": true, a temporary clone of the widget is added to the holder to visually indicate where that widget will be dropped.

v11 (implemented 2023-01-19)

Breaking Changes / Required Actions: none
Pull Request: #1527

Adds a new parameter resetOwner to MOVEXY. The new parameter defaults to true, but game behavior before this change acted as if the value was false. So the file updater added "resetOwner": false to all existing instances of MOVEXY.

v10 (implemented 2023-01-18)

Breaking Changes / Required Actions: none
Pull Request: #1524

Grids now align by default using the widget's upper left-hand corner and a bug in the grid formula was fixed. The alignment location can be changed from the default by using alignX and alignY, which reflect percentage change from the default location using 0 to 1.

v9 (implemented 2023-01-01)

Breaking Changes / Required Actions: none
Pull Request: #1436

Changes all existing instances of the compute function numericSort to numericStringSort. The function remains unchanged and still sorts a combination of numbers and letters, treating numbers as strings. This makes way for a new function numericSort which sorts numbers as numbers, including negative numbers which was not possible before.

v8 (implemented 2022-11-08)

Breaking Changes / Required Actions: none
Pull Request: #1357

Adds hoverInheritVisibleForSeat and hoverTarget properties. These work in connection with the dragging and onlyVisibleForSeat properties to hide widgets from other players that are being dragged over a properly configured holder. This creates an effect similar to childrenPerOwner that is used in hands but makes it available to every holder.

v7
"hoverInheritVisibleForSeat": (did not exist as a property).
Note: If `onlyVisibleForSeat` was set on widgets prior to v8, the file updater set "hoverInheritVisibleForSeat": false to preserve existing behavior

v8
"hoverInheritVisibleForSeat": true

v7 (implemented 2022-09-05)

Breaking Changes / Required Actions: none
Pull Request: #1267

This PR modified the default "clickable" property for various widget types. The default is "true" for all types except decks and labels (as it was before the change except for holders). Holders were the main change and they now have "clickable":"true". Pre-existing games with the "clickable" property already set were not changed.

v6 (implemented 2021-12-22)

Breaking Changes / Required Actions: none
Pull Request: #1036

This updated the css and appearance for the default pin and pawn pieces in VTT. The old pin is available as "legacyPinPiece" and the old pawn is available as "legacyClassicPiece." (Note PR 1506 further changed the game pieces to svg files which also changes the default appearance, but that PR did not change the appearance for existing games).

v5 (implemented 2021-11-30)

Breaking Changes / Required Actions: none
Pull Request: #174

This added the ability to use "dynamicProperties" on a face object of a card widget.

v4 (implemented 2021-10-14)

Breaking Changes / Required Actions: none
Pull Request: #777

dropTargets set to an empty array ([]) have been altered to be an empty object ({}). After this change, a dropTarget of [] allows no widgets to be dropped, while a dropTarget of {} allows any widget to be dropped.

v3
"dropTarget": []

v4
"dropTarget": {}

v3 (implemented 2021-05-19)

Breaking Changes / Required Actions: none
Pull Request: #307

The COMPUTE operation as well as the applyVariables parameter are removed and replaced by a new format that is very compact as well as easier to read and write. The RANDOM operation is replaced by the randIntfunction which behaves identically. All occurrences of the COMPUTE operation are translated automatically into the new format the first time an old room is loaded.

v2
{
  "func": "COMPUTE",
  "variable": "a",
  "operation": "+",
  "operand1": 2,
  "operand2": 2
},
{
  "func": "RANDOM",
  "variable": "r",
  "min": 1,
  "applyVariables": [
    {
      "parameter": "max",
      "variable": "myLimit"
    }
  ]
},
{
  "func": "LABEL",
  "label": "abcd",
  "applyVariables": [
    {
      "parameter": "value",
      "template": "hello {playerName}"
    }
  ]
},
{
  "func": "COMPUTE",
  "variable: "difference",
  "operation": "-",
  "applyVariables": [
    {
      "widget": "widgetID",
      "property": "y",
      "parameter": "operand1"
    },
    {
      "property": "y",
      "parameter": "operand2"
    }
  ]
}

v3
"var a = 2 + 2",
"var r = randInt 1 ${myLimit}",
{
  "func": "LABEL",
  "label": "abcd",
  "value": "hello ${playerName}"
},
"var difference = ${PROPERTY y of widgetId} - ${PROPERTY y}"

v2 (implemented 2021-04-16)

Breaking Changes / Required Actions: none
Pull Request: #83

The default mode for SELECT button operations is changed to "set" (it used to be "add"). If your v1 based JSON isn't already configured to use a specific mode, it will be changed to explicitly use the "add" mode in order to ensure the game logic does not break. Also, SELECT functions that explicitly specified "mode": "set" will have that explicit specification removed.

_*Please note: if the SELECT mode is specified using the ${variableName} syntax, you will need to check to make sure you are getting the results you expect.

Example change when no mode had been specified:

v1
{
  "func": "SELECT",
  "source": "all",
  "property": "width",
  "relation": ">=",
  "value": 50,
  "collection": "myCollectionName"
}

v2
{
  "func": "SELECT",
  "source": "all",
  "property": "width",
  "relation": ">=",
  "value": 50,
  "collection": "myCollectionName",
  "mode": "add"
}
Clone this wiki locally