-
-
Notifications
You must be signed in to change notification settings - Fork 32
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.
Breaking Changes / Required Actions: none
Pull Request: #2432
Removes all usage of Google Material Icons and replaces with Google Material Symbols.
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".
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
.
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.
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.
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.
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.
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.
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.
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
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.
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).
Breaking Changes / Required Actions: none
Pull Request: #174
This added the ability to use "dynamicProperties" on a face object of a card widget.
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": {}
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 randInt
function 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}"
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"
}
- Widgets
- Functions, automation, and routines
- Dynamic Expressions and using variables
- Math, string, array, color, JSON functions
- Cards and Decks
- Editing JSON
- Using CSS
- Fonts and Symbols
- Publicly available games
- Tutorials
- Available icons, card backs, button styles, and other images
- Demonstration Features
- Useful Code Snippets