The Machinery Beta — May 2020 (version 2020.5)

Welcome to the May 2020 release of The Machinery Beta (2020.5). Hope you all are staying healthy and sane. We have a number of new features and updates in this release that we hope you will like.

As always, registered beta users can download the build from our forum. If you want to join the beta, sign up! If you find bugs in this release or have requests for specific features, post them to our issue tracker. For more general discussions, hit us up on the forum or Discord.

Some of the key highlights in this release are:

  • Multi-edit — You can now change the properties of multiple objects simultaneously in the Properties view.

  • Vector fonts — Crisper fonts at any size using vector-based font rendering.

  • Discord collaboration — The collaboration system now supports Discord invites and UPnP NAT-punchthrough to make it easier to set up and play with collaboration if you are stuck at home.

As usual, we also have a number of smaller updates.


The Properties tab now supports editing more than one object simultaneously.

If you select more than one object, for example in the Asset Browser or the Entity Tree, the Properties tab will show you a Consensus View of all the selected objects:

Consensus view of two entities.

In a Consensus View — if all the selected objects have the same value for a property, that property is shown in a bright white text. If the objects have different values, the value of the first selected object is shown in gray color.

In the example above, you can see that the y-position is the same (0) for both objects whereas the x- and z- positions differ. The names of the objects differ, but the rotation and the scale are the same.

If you edit the values in the consensus view, you will change the values in all the selected objects. Note that this will always make the values bright white since you are changing all the objects to have the same value. Undo undoes the multi-edit operation.

Components of an entity can be edited in the consensus view as long as all the selected objects have the component. In the example above, the Link Component exists in all entities, so we can consensus edit that too. Child entities are matched on their names for consensus editing. E.g. if all the selected entities have a child name Door, that child will appear in the consensus editor and you can edit its properties too.

If you select two or more objects of different types, the consensus view will only show the properties that appear in all the objects. The same applies when you have subobjects with different types.

This shows consensus editing in action:

Consensus editing two entities.

Vector Fonts

Toggling between bitmap cached glyphs and vector glyphs.

Two things have been done to increase the readability of text in The Machinery. First, small glyph sizes are now cached in multiple resolutions to get higher quality sub-pixel anti-aliased glyphs. Second, as glyphs get bigger on the screen, we seamlessly fade into a vector-based representation that makes the glyphs remain sharp at any size.

Vector fonts can be enabled or disabled with the Vector Font feature flag (Tools > Feature Flags > Vector Font). Let us know if you run into any problems with the vector fonts. In a future version of The Machinery, we will probably remove the feature flag and only use the vector font.

Discord Collaboration

It is now possible to host Collaboration sessions over Discord. You will find the Host Discord Server option in the dropdown menu of the Collaboration Tab. To use it, you must have the Discord application running on your computer.

Hosting a discord server.

If the Use P2P & UPnP checkbox is checked, we will try to host a peer-to-peer session by opening a port for the server in your router using UPnP. If the checkbox is not checked, or if UPnP fails to open the port, we will use Discord’s built-in networking instead.

Note that using the P2P connection is significantly faster than relaying the data over Discord’s servers.

In the future we may add additional options for P2P connections (i.e., STUN/TURN/ICE) for network setups where UPnP is not available.

The project data received in a collaboration session is cached locally, so the next time you collaborate on the same project it doesn’t have to be sent over the network and the collaboration session will start up faster.

Smaller updates


  • The accelerator Ctrl+D is now mapped to Edit > Duplicate.
  • Duplicate now works in the Scene tab.
  • Cut/Copy/Paste now works in the Scene tab.
  • Added an option for clearing the Recent file menu: File > Open Recent > Clear.
  • Pressing restart in the Simulate tab now re-creates the entity context, ensuring a complete restart.
  • Panning in the Graph tab now closes any open context menu.
  • Fix for an issue where spawning nodes while connecting in the graph canceled the connection.
  • Fix for a bug when moving multiple objects using the gizmo.
  • Added a --layout command-line argument that lets you launch the engine with a specific window layout.
  • Undo now works better when editing assets in the Properties tab. (#215)
  • Freeflighting with the camera now moves the focus point for spin and zoom operations. (#177)
  • Simplified tooltip management: tm_ui_activation_t now contains tooltip — the ID of the control for which tooltips should be drawn. Compare it to the ID of the control for which a tooltip should be drawn and then call tm_ui_api->tooltip with the tooltip message.
  • In the Scene tab, there is now a play-button shortcut to the Simulate tab.
  • Running The Machinery in fullscreen using Window > Set Size no longer incorrectly offsets the mouse pointer.
  • Anti-aliasing of UI elements is now pixel perfect and operates in native resolution regardless of the display’s DPI scaling.

Data model

  • Deleting a prototype now detaches all the instances of that prototype.


  • tmbuild.exe now has support for building using Visual Studio Build Tools, as well as Professional and Enterprise.
  • The gameplay code in the sample-projects now supports hot-reloading.
  • Fix for a premake bug when building the samples — the {COPY} command was not used properly.
  • the-machinery.exe can now startup and run with most plugins stripped.
  • We now distribute foundation.lib for both VS2017 and VS2019 so that the beta samples can be built with either version of the compiler.


  • The inertia tensor can now be computed even if the physics body is not in the current scene.


  • We’ve added application usage tracking to get an idea of how much the beta is used. The tracking is anonymous and uses Google Analytics. Each time you change the active tab in the UI, this will be sent as a pageview hit to Google Analytics.
  • Removed subobjects now carry over properly when cloning between The Truth objects using tm_the_truth_api->interop_*() functions.
  • The default lighting environment now uses the light entity, with the Render component removed.


  • Data buffers received during collaboration are now cached locally, so they don’t have to be sent over the network next time.
  • The __type_index header is now cached instead of being sent with every changelog message, reducing the message size by about 70K.
  • Large messages are now LZ4 compressed for faster transmission.
  • UPnP port forwarding is now available when hosting an Internet session.


  • Prototypes can now be used for Animation State Machines.
  • The Blend State map is now resizable.
  • Pressing Esc aborts connections in the state machine graph.
  • Animations can now be blended even if their bones don’t match perfectly. Note that missing or extra bones will simply be ignored, which might not be what you want.


  • There are now only three shader output nodes: Lit, Unlit, and Billboards.
    • Lit — Any geometry that should be affected by light should be using this node.
    • Unlit — Any geometry that shouldn’t be affected by light should be using this node. This can also be used for creating fullscreen effects or rendering skydomes.
    • Billboards — This automatically renders each instance of a draw call as a quad formed by two triangles. The quad is automatically rotated to face the camera.

New structure of the core shader output nodes: Lit, Unlit and Billboards.

  • Removed old and deprecated output shader nodes. Samples have been migrated to use new nodes.
  • Hot-reloading of .shader files (F5) now behaves nicely without needing to close and reopen the graph tab.
  • New/improved function shader nodes:
    • View Vector — Returns the normalized vector from the shaded pixel to the eye.
    • Negative — Returns the negation of the input.
    • Construct Quad — Generates position, normal, tangent, and UV for a simple quad formed by two triangles.
    • Random — Now supports generating normalized random values (0-1) for float2 and float3.
  • It’s now possible to override render states both using node actions and for each pass defined in an output node.
  • Hot-reloading of rendering pipelines no longer requires closing and reopening Scene, Preview or Simulation tab to take effect.