We are excited to announce the next development snapshot build, Orchestrator 2.1.dev3.
We aim for a development snapshot every 2-3 weeks; however, it has been nearly twice that since our last build. This is mainly due to the team actively looking at the code base and making changes in preparation for a combination of features scheduled for the next development build, including Godot 4.3 support and re-usable macro libraries for creating custom nodes.
Despite spending a fair amount of time focusing on the internals of Orchestrator, we have also made some progress in terms of behavior, features, and improvements. Let's dive into these highlights and discuss what you can expect in future builds.
Jump to the Downloads section and give it a try now, or continue reading to learn about the highlights and other improvements in this release.
Migrations
When opening an existing Orchestration, you will likely notice some yellow warnings printed to the editor's output panel, similar to the following:
By default, these warnings only change the in-memory representation of the Orchestration. If you want to avoid these messages in the future when opening the project or when running the exported game, please open and re-save your Orchestration files so that these bookkeeping changes are saved to disk.
New Features
New abort output pin on for loops
When adding a For Loop With Break node to an orchestration, a new Abort output pin has been added. This pin will be set to false if the loop did not break early and is set to true if it did. This can be useful for orchestration logic, which needs to know if the loop exited early.
Input action names rendered as a list of values
Around a dozen function call nodes take an input action name as an argument. These nodes previously required the action name to be added manually in a text entry box. This process requires unnecessary typing and can easily introduce errors.
In Orchestrator 2.1, we've improved the rendering of these nodes, and any node that takes an input action will now render the input argument as a list of values. When adding a node that takes an input action and if the action does not yet exist, you will need to create the input action in Project > Project Settings > InputMap first before being able to select the input action name from the list of values. Here's an example of the change:
Disconnect control flow on drag
Users found that dragging a connection from an already connected execution flow pin, which rendered two connection wires, was illogical since the first connection was only removed when a new connection was made. We agree; however, we wanted to retain the old behavior for those who preferred the old style.
In the Orchestrator > UI > Graph settings, a new option has been added to control this type of behavior:
Autowire selection dialog
We have reworked how the auto-wire process works when dragging a connection from a pin and selecting a new node with eligible pins that can be automatically connected based on the originating pin.
For example, dragging from a Get Scene Node output pin and selecting the Add Child function call, you will be shown a selection dialog since the Add Child node accepts two input arguments that are both Node types, the target and the node pin, shown below:
By selecting one of the options, the auto-wire process will connect the Get Scene Node output pin to that specific input pin on the Add Child node. By pressing the Skip button, no auto-wire will be performed.
No dialog is shown if the newly added node only has a single pin eligible for auto-wire.
Unfortunately, due to limitations, Godot's GDExtension does not provide a way to share a description for the pins in the selection dialog and may not be helpful for certain new users. If you find the selection dialog unhelpful, you can disable this feature in the Orchestrator > UI > Graph configuration settings, shown here:
Internal code changes
We have also made some significant code changes to Orchestrator's internal workings. We have separated the notion of an Orchestration from the Godot Script contract. We have also split the idea of the runtime virtual machine and the Godot ScriptInstance representing the runtime contracts.
These changes are not visible to users and are only internal organization changes of the code; however, these changes may have introduced some regressions and bugs. We ask that users please test this new build and report any potential regression you may have if we introduce a change in behavior with this change.
Improvements
Orchestrator crash on start-up
There were multiple reports about Orchestrator's stability. We initially saw most of these from Steam users, and later, they were shared by non-Steam users, too. The various backtraces we received from crashes always seemed to stem from our Logger API; however, to our surprise, we eventually uncovered that it was related to the use of custom themes.
If you want to use custom themes, such as the godot-minimal-theme or godot-beautifier, you will want to update to this latest snapshot build, which will work with those custom themes. We've improved our theme styling logic to be more flexible so that custom themes may change the style box types for specific controls from what the standard Godot UI uses.
Remove redundant text/words from node titles/pins
We have updated several node types and user interface components to remove redundant usage of certain words and align titles and labels to be more specific in other circumstances.
For example, the use of Call has been removed from the function-call node title bars and is no longer added as part of the actions menu choices to reduce noise. This should help users visually find actions faster in the pop-up dialog window and should reduce the length of node names.
Another example is the use of Return Value. From now on, function-call nodes that return specific object types such as a Viewport or FileAccess will show the output pin with those names to give more context. If a function-call node returns basic types such as Vector2, bool, or String, these will have an icon and no name.
Here's an example screenshot of some nodes that were changed:
These are purely visual changes; functionality remains unchanged.
Component panel now honors editor themes
A relatively small but annoying rendering bug with the component panel did not honor the preset themes in the Godot Editor when using any theme besides the default. This has been fixed, and the component panel will now render its colors and appearance consistently with all other Godot UI widgets when using non-default editor themes.
Knot rendering now consistent
In previous versions of Orchestrator, we introduced the ability to add Knot nodes to connection wires, allowing users to control how connection wires are rendered on the graph canvas. While this functionality worked, there were several rendering bugs, including how the lines were curved in some situations and problems rendering the knots at zoom levels other than 100%.
Knot rendering has been improved and is now consistent across zoom levels; see below:
This is at 121% zoom level.
Avoid duplicates in Variable Type recent history
We introduced a new variable subsystem in a prior version, where users can set variable types based on object types, basic types, and enumerations or bitflags. This new dialog window shows a list of recent selections you have made; however, it did not prevent adding duplicates to the history list.
In Orchestrator 2.1, this logic has been improved and will no longer add duplicates to the recent history, instead simply moving the duplicate entry to the top of the list based on most recent usage, as shown here:
Instantiate scene respect input pin values
The Instantiate Scene node can be powerful for creating dynamic user interfaces or scenes. This node worked well when selecting a scene using the input argument's default value button; however, it failed to honor passing a file name from another node as an input pin connection. This has been fixed in Orchestrator 2.1, and you can safely set the scene file name statically or dynamically, depending on your needs.
Component panel collapse/expand duplicated entries
A bug when collapsing or expanding component panel tree items resulted in adding duplicate elements. This was specific to the Graph and Variable panels, where tree hierarchies are used. While this did not cause any issues with the Orchestration data, performing certain operations like saving would refresh the component panel and correct the rendering issue. This has been fixed and duplicate elements are no longer added.
Allow reselection in component panels
Another usability improvement we made in this release was to allow the reselection of tree items in the various component panel views. We found it unfriendly in specific selection sequences. When working with the Inspector and the component panels, selecting an already selected signal, variable, or function did not work as expected. This is no longer the case, as selections work even if the tree row has already been selected.
Allow deletion of event nodes from graph canvas
We improved node deletion while working within the graph canvas. Previously, it was necessary to interact with the component panel to remove event nodes, which felt unnecessary. Although event nodes cannot be duplicated, users can now select an event node and use the Delete context-menu choice or the DEL key to remove them like any other node type.
Bulk node deletion using context-menu
In previous versions, using the node context-menu Delete option only removed the context-menu was shown for. This behavior has now changed, and the Delete context menu option will delete any selected node in the graph for consistency.
What's next?
This release builds on what we've already added for Orchestrator 2.1. Future updates will include the following new features and improvements:
- Prefab support using Macro/Function libraries for code reuse across projects.
- Text-based storage formats for improved version control support
- Godot 4.3 Editor Script Debugger support
- Support for class_name, @icon, and other script annotations
- Improved in-editor documentation integration
- Support for @onready variables
- Undo/Redo support
We're also actively backporting many new features from this development build to Orchestrator 2.0, which we plan to release in the coming week for those who prefer to rely on stable builds rather than preview builds.