Skip to content

Save File Format

Saving uses JSON serialization for easy to use, human readable format. More specifically, JSON .NET for Unity. This page is a technical document which can be used to better understand how an in-game table is recorded into a save file. Bson is used for saving to the workshop, but is converted back to JSON when saved to disk.

If you make any mistakes when editing a save, the chat will spit out a debugging error for troubleshooting.

Example JSON

{
    “SaveName”: “JSON Example Save”,
    “GameMode”: “None”,
    “Date”: “2/22/2015 2:44:18 PM”,
    “Table”: “Table_Octagon”,
    “Sky”: “Sky_Forest”,
    “Note”: “This is an example save demonstrating how to use the custom shader and edit physics properties.”,
    “Rules”: “”,
    “PlayerTurn”: “”,
    “Grid”:
    {
        “Type”: 0,
        “Lines”: false,
        “Snapping”: false,
        “Offset”: false,
        “xSize”: 2.0,
        “ySize”: 2.0
    },
    “DrawImage”: “”,
    “ObjectStates”: [
    {
        “Name”: “Custom_Model”,
        “Transform”:
        {
            “posX”: -6.14662361,
            “posY”: 1.02520883,
            “posZ”: 0.435920656,
            “rotX”: 8.387837E-06,
            “rotY”: 179.991959,
            “rotZ”: 1.49730022E-05,
            “scaleX”: 1.0,
            “scaleY”: 1.0,
            “scaleZ”: 1.0
        },
        “Nickname”: “Example Chip”,
        “Description”: “You can see how to tweak the custom shader with this example.”,
        “ColorDiffuse”:
        {
            “r”: 0.9999999,
            “g”: 0.9999999,
            “b”: 0.9999999
        },
        “Grid”: true,
        “Locked”: false,
        “CustomMesh”:
        {
            “MeshURL”: “http://pastebin.com/raw.php?i=00YWZ28Y”,
            “DiffuseURL”: “http://www.berserk-games.com/images/TTS-Coin-Template.png”,
            “NormalURL”: “”,
            “ColliderURL”: “”,
            “Convex”: true,
            “MaterialIndex”: 1,
            “TypeIndex”: 5,
            “CustomShader”:
            {
                “SpecularColor”:
                {
                    “r”: 0.9,
                    “g”: 0.9,
                    “b”: 0.9
                },
                “SpecularIntensity”: 0.1,
                “SpecularSharpness”: 3.0,
                “FresnelStrength”: 0.1
            }
        }
    },
    {
        “Name”: “Die_20”,
        “Transform”:
        {
            “posX”: 5.3177824,
            “posY”: 1.38374138,
            “posZ”: 0.03327445,
            “rotX”: 10.8123074,
            “rotY”: 0.00238325051,
            “rotZ”: 198.000031,
            “scaleX”: 1.0,
            “scaleY”: 1.0,
            “scaleZ”: 1.0
        },
        “Nickname”: “Example D20,
        “Description”: “You can see how to tweak the physics properties of an object with this example.”,
        “ColorDiffuse”:
        {
            “r”: 0.7960843,
            “g”: 0.0,
            “b”: 0.0
        },
        “Grid”: false,
        “Locked”: false,
        “MaterialIndex”: 0,
        “PhysicsMaterial”:
        {
            “DynamicFriction”: 0.4,
            “StaticFriction”: 0.4,
            “Bounciness”: 0.0,
            “FrictionCombine”: 0,
            “BounceCombine”: 0
        },
        “Rigidbody”:
        {
            “Mass”: 1.0,
            “Drag”: 0.1,
            “AngularDrag”: 0.1,
            “UseGravity”: true
        }
    }
    ]
}

Serialized Classes

Here are the classes that are serialized:

public class SaveState //Holds a state of the game
{ 
    public string SaveName = "";
    public string GameMode = "";
    public float Gravity = 0.5f;
    public float PlayArea = 0.5f;
    public string Date = "";
    public string Table = "";
    [Tag(TagType.URL)]
    public string TableURL = null; //For custom tables
    public string Sky = "";
    [Tag(TagType.URL)]
    public string SkyURL = null; //For custom sky
    public string Note = "";
    public string Rules = "";
    public string XmlUI = ""; //Custom Xml UI
    public List<CustomAssetState> CustomUIAssets;
    public string LuaScript = "";
    public string LuaScriptState = ""; // Serialized running Lua code    
    public GridState Grid; //Grid menu settings    
    public LightingState Lighting; //Lighting menu settings
    public HandsState Hands; //Hand menu settings and hand positions
    public TurnsState Turns; //Turn menu settings    
    public List<VectorLineState> VectorLines; // Vector lines on canvas 0 (table + beyond)   
    public List<ObjectState> ObjectStates; //Objects on the table
    public List<SnapPointState> SnapPoints; //Snap points not attached to objects
    public List<CustomDecalState> DecalPallet; //Decals that can be placed in the world
    public List<DecalState> Decals; //Decals not attached to objects
    public Dictionary<int, TabState> TabStates = new Dictionary<int, TabState>(); //Notepad tabs
    public CameraState[] CameraStates; //Saved camera positions
    public string VersionNumber = "";
}

public class ObjectState //Moveable objects
{ 
    public string Name = ""; //Internal object name
    public TransformState Transform; //Position, Rotation, Scale
    public string Nickname = ""; //Name supplied in game
    public string Description = "";
    public ColourState ColorDiffuse; //Material color tint
    /*Toggles*/
    public bool Locked = false; //Freeze object in place
    public bool Grid = true; //Object will snap to grid
    public bool Snap = true; //Object will snap to snap points  
    public bool Autoraise = true; //Object will raise above others and avoid collision
    public bool Sticky = true; //When picked up objects above this one will be attached to it
    public bool Tooltip = true; //When hovering object will display tooltips
    public bool GridProjection = false; //Grid will project on this object
    /*Nullable to hide object specific properties and save space*/
    public bool? HideWhenFaceDown; //When face down object is question mark hidden
    public bool? Hands; //Object will enter player hands
    public bool? AltSound; //Some objects have 2 materials, with two sound sets
    public int? MaterialIndex; //Some objects can have multiple materials
    public int? MeshIndex; //Some objects can have multiple meshes
    public int? Layer; //Sound Layer
    public int? Number;
    public int? CardID;
    public bool? SidewaysCard;
    public bool? RPGmode;
    public bool? RPGdead;
    public string FogColor = null;
    public bool? FogHidePointers;
    public bool? FogReverseHiding;
    public bool? FogSeethrough;
    public List<int> DeckIDs;
    public Dictionary<int, CustomDeckState> CustomDeck; //Key matches the hundreth place of the id (ex. id = 354, index = 3)
    public CustomMeshState CustomMesh;
    public CustomImageState CustomImage;
    public CustomAssetbundleState CustomAssetbundle;
    public FogOfWarSaveState FogOfWar;
    public FogOfWarRevealerSaveState FogOfWarRevealer;
    public ClockSaveState Clock;
    public CounterState Counter;
    public TabletState Tablet;
    public Mp3PlayerState Mp3Player;
    public CalculatorState Calculator;
    public TextState Text;
    public string XmlUI = ""; //Custom Xml UI
    public List<CustomAssetState> CustomUIAssets;
    public string LuaScript = "";
    public string LuaScriptState = ""; // Serialized running Lua code
    public List<ObjectState> ContainedObjects; //Objects inside this one
    public PhysicsMaterialState PhysicsMaterial; //Use to modify the physics material (friction, bounce, etc.) http://docs.unity3d.com/Manual/class-PhysicMaterial.html
    public RigidbodyState Rigidbody; //Use to modify the physical properties (mass, drag, etc) http://docs.unity3d.com/Manual/class-Rigidbody.html
    public JointFixedState JointFixed; //Joints can be used to attached/link objects together check the classes below
    public JointHingeState JointHinge;
    public JointSpringState JointSpring;
    public string GUID = ""; //Used so objects can reference other objects, ex. joints or scripting
    public List<SnapPointState> AttachedSnapPoints; //Snap points that are stuck to this object, happens when placing a snap point on a locked object
    public List<VectorLineState> AttachedVectorLines; // Vector lines that are stuck to this object, happens when drawing a vector line on a locked object
    public List<DecalState> AttachedDecals; //Decals that are attached to this objects
    public Dictionary<int, ObjectState> States; //Objects can have multiple states which can be swapped between    
    public List<RotationValueState> RotationValues; //Rotation values are tooltip values tied to rotations

    public bool EqualsObject(object obj)
    {
        if (obj == null)
        {
            return false;
        }       

        ObjectState os = obj as ObjectState;
        if (os == null)
        {
            return false;
        }

        TransformState ThisTransform = this.Transform;
        TransformState OtherTransform = os.Transform;        

        ColourState ThisColor = this.ColorDiffuse;
        ColourState OtherColor = os.ColorDiffuse;
        if (ThisColor != null && OtherColor != null && ThisColor.ToColour() != OtherColor.ToColour())
        {
            return false;
        }               

        string ThisGUID = this.GUID;
        string OtherGUID = os.GUID;

        bool ThisLocked = this.Locked;
        bool ThisGrid = this.Grid;
        bool ThisSnap = this.Snap;
        bool ThisAutoraise = this.Autoraise;
        bool ThisSticky = this.Sticky;
        bool ThisTooltip = this.Tooltip;
        bool ThisGridProjection = this.GridProjection;
        bool? ThisHideWhenFaceDown = this.HideWhenFaceDown;
        bool? ThisHands = this.Hands;

        bool OtherLocked = os.Locked;
        bool OtherGrid = os.Grid;
        bool OtherSnap = os.Snap;
        bool OtherAutoraise = os.Autoraise;
        bool OtherSticky = os.Sticky;
        bool OtherTooltip = os.Tooltip;
        bool OtherGridProjection = os.GridProjection;
        bool? OtherHideWhenFaceDown = os.HideWhenFaceDown;
        bool? OtherHands = os.Hands;

        this.Transform = null;
        os.Transform = null;
        this.ColorDiffuse = null;
        os.ColorDiffuse = null;
        this.GUID = null;
        os.GUID = null;

        this.Locked = false;
        this.Grid = false;
        this.Snap = false;
        this.Autoraise = false;
        this.Sticky = false;
        this.Tooltip = false;
        this.GridProjection = false;
        this.HideWhenFaceDown = false;
        this.Hands = null;

        os.Locked = false;
        os.Grid = false;
        os.Snap = false;
        os.Autoraise = false;
        os.Sticky = false;
        os.Tooltip = false;
        os.GridProjection = false;
        os.HideWhenFaceDown = false;
        os.Hands = null;

        string ThisJson = Json.GetJson(this, false);
        string NewJson = Json.GetJson(os, false);        

        this.Transform = ThisTransform;
        os.Transform = OtherTransform;
        this.ColorDiffuse = ThisColor;
        os.ColorDiffuse = OtherColor;
        this.GUID = ThisGUID;
        os.GUID = OtherGUID;

        this.Locked = ThisLocked;
        this.Grid = ThisGrid;
        this.Snap = ThisSnap;
        this.Autoraise = ThisAutoraise;
        this.Sticky = ThisSticky;
        this.Tooltip = ThisTooltip;
        this.GridProjection = ThisGridProjection;
        this.HideWhenFaceDown = ThisHideWhenFaceDown;
        this.Hands = ThisHands;

        os.Locked = OtherLocked;
        os.Grid = OtherGrid;
        os.Snap = OtherSnap;
        os.Autoraise = OtherAutoraise;
        os.Sticky = OtherSticky;
        os.Tooltip = OtherTooltip;
        os.GridProjection = OtherGridProjection;
        os.HideWhenFaceDown = OtherHideWhenFaceDown;
        os.Hands = OtherHands;

        return ThisJson == NewJson;
    }

    public ObjectState Clone()
    {       
        return Json.Clone(this);
    }

    public string ToJson()
    {
        return Json.GetJson(this);
    }

    public static List<ObjectState> RemoveDuplicates(List<ObjectState> objectStates)
    {
        List<ObjectState> newObjectStates = new List<ObjectState>();

        for (int i = 0; i < objectStates.Count; i++)
        {
            ObjectState objectState = objectStates[i];

            if (objectState == null) continue;

            bool isDuplicate = false;

            for (int j = 0; j < newObjectStates.Count; j++)
            {
                ObjectState os = newObjectStates[j];

                if (objectState.EqualsObject(os))
                {
                    isDuplicate = true;
                    break;
                }
            }

            if (isDuplicate) continue;

            newObjectStates.Add(objectState);
        }

        return newObjectStates;
    }
}

public class GridState
{   
    public GridType Type = GridType.Box;
    public bool Lines = false;
    public ColourState Color = new ColourState(0,0,0);
    public float Opacity = 0.75f; //0-1 Alpha opacity
    public bool ThickLines = false;
    public bool Snapping = false; //Line snapping
    public bool Offset = false; //Center snapping
    public bool BothSnapping = false; //Both snapping
    public float xSize = 2f;
    public float ySize = 2f;
    public VectorState PosOffset = new VectorState(0,1,0);
}

public enum GridType
{
    Box, HexHorizontal, HexVertical
};

public class LightingState
{    
    public float LightIntensity = 0.54f; //0-8
    public ColourState LightColor = new ColourState(1f, 0.9804f, 0.8902f);    
    public float AmbientIntensity = 1.3f; //0-8
    public AmbientType AmbientType = AmbientType.Background;
    public ColourState AmbientSkyColor = new ColourState(0.5f, 0.5f, 0.5f);
    public ColourState AmbientEquatorColor = new ColourState(0.5f, 0.5f, 0.5f);
    public ColourState AmbientGroundColor = new ColourState(0.5f, 0.5f, 0.5f);
    public float ReflectionIntensity = 1f; //0-1
    public int LutIndex = 0;
    public float LutContribution = 1f; //0-1
    [Tag(TagType.URL)]
    public string LutURL; //LUT 256x16
}

public enum AmbientType
{
    Background, Gradient //Background = ambient light comes from the background, Gradient = ambient light comes from the three ambient colors
}

public class HandsState
{
    public bool Enable = true;
    public bool DisableUnused = false;
    public HidingType Hiding = HidingType.Default;
    public List<HandTransformState> HandTransforms;
}

public enum HidingType
{
    Default, Reverse, Disable //Default = only owner can see, Reverse = opposite of default, Disable = hiding is disabled
};

public class HandTransformState
{
    public string Color;
    public TransformState Transform;
}

public class TurnsState
{
    public bool Enable;
    public TurnType Type = TurnType.Auto;
    public List<string> TurnOrder = new List<string>();
    public bool Reverse;
    public bool SkipEmpty;
    public bool DisableInteractions;
    public bool PassTurns = true;
    public string TurnColor;
}

public enum TurnType
{
    Auto, Custom //Auto = turn order is based on positioning of hands on around table, Custom = turn order is based on an user color list
}

public class TextState
{
    public string Text;
    public ColourState colorstate;
    public int fontSize = 64;
}

public class TabState
{
    public string title;
    public string body;
    public string color;
    public ColourState visibleColor;
    public int id = -1;

    [JsonConstructor]
    public TabState() { }

    public TabState(UITab to)
    {
        title = to.title;
        body = to.body;
        visibleColor = new ColourState(to.VisibleColor);
        color = Colour.LabelFromColour(to.VisibleColor);
        id = to.id;
    }
}

public class SnapPointState
{
    public VectorState Position; //World position when not attached and local position when attached to an object
    public VectorState Rotation; //Rotate is only set for rotation snap points
}

public class DecalState
{
    public TransformState Transform;
    public CustomDecalState CustomDecal;
}

public class CustomDecalState
{
    public string Name;
    [Tag(TagType.URL)]
    public string ImageURL;
    public float Size; //Size in inches
}

public class RotationValueState
{
    public object Value;
    public VectorState Rotation;
}

public class CustomAssetState
{
    public string Name;
    [Tag(TagType.URL)]
    public string URL;
}

public class OrientationState
{
    public Vector3 position;
    public Quaternion rotation;
    public OrientationState(Vector3 position, Quaternion rotation)
    {
        this.position = position;
        this.rotation = rotation;
    }
    public OrientationState()
    {
        this.position = Vector3.zero;
        this.rotation = Quaternion.identity;
    }
}

public class TransformState
{   
    public float posX;
    public float posY;
    public float posZ;

    public float rotX;
    public float rotY;
    public float rotZ;

    public float scaleX;
    public float scaleY;
    public float scaleZ;

    [JsonConstructor]
    public TransformState() {}

    public TransformState(Transform T)
    {
        Vector3 pos = T.position;
        posX = pos.x;
        posY = pos.y;
        posZ = pos.z;

        Vector3 rot = T.eulerAngles;
        rotX = rot.x;
        rotY = rot.y;
        rotZ = rot.z;

        Vector3 scale = T.localScale;
        scaleX = scale.x;
        scaleY = scale.y;
        scaleZ = scale.z;
    }

    public TransformState(Vector3 pos, Vector3 rot, Vector3 scale)
    {        
        posX = pos.x;
        posY = pos.y;
        posZ = pos.z;

        rotX = rot.x;
        rotY = rot.y;
        rotZ = rot.z;

        scaleX = scale.x;
        scaleY = scale.y;
        scaleZ = scale.z;
    }

    public Vector3 ToPosition()
    {
        return new Vector3(posX, posY, posZ);
    }

    public Vector3 ToRotation()
    {
        return new Vector3(rotX, rotY, rotZ);
    }

    public Vector3 ToScale()
    {
        return new Vector3(scaleX, scaleY, scaleZ);
    }
}

public class ColourState
{
    public float r, g, b;

    public ColourState() { }

    [JsonConstructor]
    public ColourState(float r, float g, float b)
    {
        this.r = r;
        this.g = g;
        this.b = b;
    }

    public ColourState(Colour c)
    {
        this.r = c.r;
        this.g = c.g;
        this.b = c.b;
    }

    public Colour ToColour()
    {
        return new Colour(r, g, b);
    }
}

public class VectorState
{
    public float x, y, z;

    public VectorState() { }

    [JsonConstructor]
    public VectorState(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public VectorState(Vector3 vector)
    {
        this.x = vector.x;
        this.y = vector.y;
        this.z = vector.z;
    }

    public Vector3 ToVector()
    {
        return new Vector3(x, y, z);
    }
}

public class RigidbodyState
{
    public float Mass = 1f; //The mass of the object (arbitrary units). You should not make masses more or less than 100 times that of other Rigidbodies.
    public float Drag = 0.1f; //How much air resistance affects the object when moving from forces. 0 means no air resistance, and infinity makes the object stop moving immediately.
    public float AngularDrag = 0.1f; //How much air resistance affects the object when rotating from torque. 0 means no air resistance. Note that you cannot make the object stop rotating just by setting its Angular Drag to infinity.
    public bool UseGravity = true; //If enabled, the object is affected by gravity.
}

public class PhysicsMaterialState
{
    public float StaticFriction = 0.4f; //The friction used when an object is laying still on a surface. Usually a value from 0 to 1. A value of zero feels like ice, a value of 1 will make it very hard to get the object moving.
    public float DynamicFriction = 0.4f; //The friction used when already moving. Usually a value from 0 to 1. A value of zero feels like ice, a value of 1 will make it come to rest very quickly unless a lot of force or gravity pushes the object.
    public float Bounciness = 0f; //How bouncy is the surface? A value of 0 will not bounce. A value of 1 will bounce without any loss of energy.
    public PhysicMaterialCombine FrictionCombine = PhysicMaterialCombine.Average; //How the friction of two colliding objects is combined. 0 = Average, 1 = Minimum, 2 = Maximum, 3 = Multiply.
    public PhysicMaterialCombine BounceCombine = PhysicMaterialCombine.Average; //How the bounciness of two colliding objects is combined. 0 = Average, 1 = Minimum, 2 = Maximum, 3 = Multiply.
}

public class CustomDeckState
{
    [Tag(TagType.URL)]
    public string FaceURL = "";
    [Tag(TagType.URL)]
    public string BackURL = "";
    public int? NumWidth;
    public int? NumHeight;
    public bool BackIsHidden = false; //Back of cards becames the hidden card when in a hand
    public bool UniqueBack = false; //Each back is a unique card just like the front
}

public class CustomImageState
{
    [Tag(TagType.URL)]
    public string ImageURL = "";
    [Tag(TagType.URL)]
    public string ImageSecondaryURL = "";
    public float WidthScale; //Holds the scaled size of the object based on the image dimensions
    public CustomDiceState CustomDice;
    public CustomTokenState CustomToken;
    public CustomJigsawPuzzleState CustomJigsawPuzzle;
    public CustomTileState CustomTile;
}

public class CustomAssetbundleState
{
    [Tag(TagType.URL)]
    public string AssetbundleURL = "";
    [Tag(TagType.URL)]
    public string AssetbundleSecondaryURL = "";
    public int MaterialIndex = 0; //0 = Plastic, 1 = Wood, 2 = Metal, 3 = Cardboard   
    public int TypeIndex = 0; //0 = Generic, 1 = Figurine, 2 = Dice, 3 = Coin, 4 = Board, 5 = Chip, 6 = Bag, 7 = Infinite   
    public int LoopingEffectIndex = 0;     
}

public class CustomDiceState
{
    public DiceType Type;
}

public class CustomTokenState
{
    public float Thickness;
    public float MergeDistancePixels;
    public bool Stackable = false;
}

public class CustomTileState
{
    public TileType Type; //0 = Box, 1 = Hex, 2 = Circle, 3 = Rounded
    public float Thickness;    
    public bool Stackable = false;
    public bool Stretch = false;
}

public class CustomJigsawPuzzleState
{
    public int NumPuzzlePieces = 80;
    public bool ImageOnBoard = true;
}

public class CustomMeshState
{
    [Tag(TagType.URL)]
    public string MeshURL = "";
    [Tag(TagType.URL)]
    public string DiffuseURL = "";
    [Tag(TagType.URL)]
    public string NormalURL = "";
    [Tag(TagType.URL)]
    public string ColliderURL = "";
    public bool Convex = true;
    public int MaterialIndex = 0; //0 = Plastic, 1 = Wood, 2 = Metal, 3 = Cardboard
    public int TypeIndex = 0; //0 = Generic, 1 = Figurine, 2 = Dice, 3 = Coin, 4 = Board, 5 = Chip, 6 = Bag, 7 = Infinite
    public CustomShaderState CustomShader; //Used to override the shader
    public bool CastShadows = true;
}

public class CustomShaderState
{
    public ColourState SpecularColor = new ColourState(0.9f, 0.9f, 0.9f);
    public float SpecularIntensity = 0.1f; 
    public float SpecularSharpness = 3f; //Range: 2 - 8
    public float FresnelStrength = 0.1f; //Range: 0 - 1
}

public class FogOfWarSaveState
{
    public bool HideGmPointer;
    public bool HideObjects;
    public float Height;
    public Dictionary<string, HashSet<int>> RevealedLocations;
}

public class FogOfWarRevealerSaveState
{
    public bool Active;
    public float Range;
    public string Color;
}

public class TabletState
{
    [Tag(TagType.URL)]
    public string PageURL = "";
}

public class ClockSaveState
{
    public ClockScript.ClockState ClockState;
    public int SecondsPassed = 0;
    public bool Paused = false;
}

public class CounterState
{
    public int value = 0;
}

public class Mp3PlayerState
{
    public string songTitle = "";
    public string genre = "";
    public float volume = 0.5f;
    public bool isPlaying = false;
    public bool loopOne = false;
    public string menuTitle = "GENRES";
    public Menus menu = Menus.GENRES;
}

public class CalculatorState
{
    public string value = "";
    public float memory = 0;
}

public class VectorLineState
{    
    public List<VectorState> points3;
    public ColourState color;    
    public float thickness = 0.1f;
    public VectorState rotation;
    public bool? loop;
    public bool? square;
}

public class CameraState
{
    public VectorState Position;
    public VectorState Rotation;
    public float Distance;
    public bool Zoomed = false;
}

public class JointState //http://docs.unity3d.com/ScriptReference/Joint.html
{   
    public string ConnectedBodyGUID = ""; //A reference to another rigidbody this joint connects to.
    public bool EnableCollision; //Enable collision between bodies connected with the joint.
    public VectorState Axis = new VectorState(); //The Direction of the axis around which the body is constrained.
    public VectorState Anchor = new VectorState(); //The Position of the anchor around which the joints motion is constrained.
    public VectorState ConnectedAnchor = new VectorState(); //Position of the anchor relative to the connected Rigidbody.
    public float BreakForce; //The force that needs to be applied for this joint to break.
    public float BreakTorgue; //The torque that needs to be applied for this joint to break.

    public void Assign(JointState jointState)
    {
        this.ConnectedBodyGUID = jointState.ConnectedBodyGUID;
        this.EnableCollision = jointState.EnableCollision;
        this.Anchor = jointState.Anchor;
        this.Axis = jointState.Axis;
        this.ConnectedAnchor = jointState.ConnectedAnchor;
        this.BreakForce = jointState.BreakForce;
        this.BreakTorgue = jointState.BreakTorgue;
    }
}

public class JointFixedState : JointState //http://docs.unity3d.com/ScriptReference/FixedJoint.html
{ 
}

public class JointHingeState : JointState //http://docs.unity3d.com/ScriptReference/HingeJoint.html
{ 
    public bool UseLimits;
    public JointLimits Limits; //Limit of angular rotation on the hinge joint. http://docs.unity3d.com/ScriptReference/JointLimits.html
    public bool UseMotor;
    public JointMotor Motor; //The motor will apply a force up to a maximum force to achieve the target velocity in degrees per second. http://docs.unity3d.com/ScriptReference/JointMotor.html
    public bool UseSpring;
    public JointSpring Spring; //The spring attempts to reach a target angle by adding spring and damping forces. http://docs.unity3d.com/ScriptReference/JointSpring.html
}

public class JointSpringState : JointState //http://docs.unity3d.com/ScriptReference/SpringJoint.html
{ 
    public float Damper; //The damper force used to dampen the spring force.
    public float MaxDistance; //The maximum distance between the bodies relative to their initial distance.
    public float MinDistance; //The minimum distance between the bodies relative to their initial distance.
    public float Spring; //The spring force used to keep the two objects together.
}

Object Name List

backgammon_board
backgammon_piece_brown
backgammon_piece_white
Bag
BlockRectangle
BlockSquare
BlockTriangle
Card Facade
Card
CardBot_Board
CheckerFacade
CheckerStack
Checker_black
Checker_Board
Checker_red
Checker_white
Chess_Bishop
Chess_Board
Chess_King
Chess_Knight
Chess_Pawn
Chess_Queen
Chess_Rook
Chinese_Checkers_Board
Chinese_Checkers_Piece
ChipFacade
ChipStack
Chip_10
Chip_100
Chip_1000
Chip_50
Chip_500
Cup
Custom_Board
Custom_Model
Deck
DeckCustom
Deck_CardBot_Head
Deck_CardBot_Main
Die_10
Die_12
Die_20
Die_4
Die_6
Die_6_Rounded
Die_8
Die_Piecepack
Digital_Clock
Domino
Figurine_Card_Bot
Figurine_Custom
Figurine_Kimi_Kat
Figurine_Knil
Figurine_Mara
Figurine_Sir_Loin
Figurine_Zeke
Figurine_Zomblor
FogOfWarTrigger
Go_Board
go_game_bowl_black
go_game_bowl_white
go_game_piece_black
go_game_piece_white
LineObject
Mahjong_Coin
Mahjong_Stick
Mahjong_Tile
MarqueeTrigger
Metal Ball
Pachisi_board
PiecePack_Arms
PiecePack_Crowns
PiecePack_Moons
PiecePack_Suns
PlayerPawn
Quarter
reversi_board
reversi_chip
rpg_BEAR
rpg_CHIMERA
rpg_CYCLOP
rpg_DRAGONIDE
rpg_EVIL_WATCHER
rpg_GHOUL
rpg_GIANT_VIPER
rpg_GOBLIN
rpg_GOLEM
rpg_GRIFFON
rpg_HYDRA
rpg_KOBOLD
rpg_LIZARD_WARRIOR
rpg_MANTICORA
rpg_MUMMY
rpg_OGRE
rpg_ORC
rpg_RAT
rpg_SKELETON_KNIGHT
rpg_TREE_ENT
rpg_TROLL
rpg_VAMPIRE
rpg_WEREWOLF
rpg_WOLF
rpg_WYVERN
SearchSpaceHolder
SearchTriggerObject
Sky_Field
Sky_Forest
Sky_Museum
Sky_Tunnel
Table_Circular
Table_Custom
Table_Glass
Table_Hexagon
Table_Octagon
Table_Poker
Table_RPG
Table_Square
Tileset_Barrel
Tileset_Chair
Tileset_Chest
Tileset_Corner
Tileset_Floor
Tileset_Rock
Tileset_Table
Tileset_Tree
Tileset_Wall