View of Scope Control's conditions.

Scope Control's development within Visual Studio.

Scope Control is an extension/object for the game engine Clickteam Fusion 2.5, a visual scripting/WYSIWYG game engine.
While it is a visual scripting engine, advanced users can develop extensions with public extension SDKs using C++. 
There have only been a few extension developers who have created new functionality around "Object selection", an important aspect within Clickteam Fusion 2.5 development.
Highlights:
C++
Linked Lists
Sorting
Templates
Standard C++ Library (Vectors, Maps, Sets, Iterators)
Modifying a Game Engine's object selection system
Implementing "Actions, Conditions and Expressions" for other game developers to use within Fusion
Software:
Visual Studio
Clickteam Fusion 2.5
Clickteam Fusion 2.5's Extension SDK (EDIF)
Read below if you would like to know about the Fusion systems/environment and how I dealt with them with the Scope Control extension.
What is Fusion's object selection?
Fusion game developers create games by adding "events" which is indicated with a numbered row. Those events consist of "conditions" and "actions" tied to objects.
By default, all object instances are selected in an event and will execute all actions related to them. However, if there are any conditions present, object instances are filtered by whether they pass the conditions. E.g. if their A value equals 0.
Only the filtered object instances then execute their actions.
That is object selection, a very powerful tool that unfortunately has only been expanded upon by one or two third-party extensions. I've made Scope Control to experiment on and expand the possibilities of object selection within Fusion.
Here are a few new functionalities that this extension brings to Fusion developers:
Comparing the number of selected objects,
Modifying selection (select all, inverse selection),
Store object selection within a set, which can later be used to restore selection or looped through,
Sort and select objects by their properties like position or values,
Retrieve properties from any object by fixed value.
Internally, Fusion keeps 2 linked lists for each object type and a linked list of object types within a qualifier.
Users can insert either a regular object type or a qualifier into a condition or action, in regular object's case iterating over the one type is trivial. However, as qualifiers are essentially linked lists for object types, this has to be iterated over to retrieve each object type within.
Inside object types, there is a selected objects linked list marked as blue in the diagram, and there is an object linked list marked as grey. The former can be changed to modify the current selection but must be kept in order whereas the latter must never be modified. 
This intricate design of the selection system made development of the Scope Control extension very challenging, on top of scarce documentation and lack of other extension developers to be supported by.

By far the most difficult thing I have done for this project is sorting each object instance within a type or qualifier by a given property in a vector, removing all but the first n objects, and recreating selection linked lists for each type that was marked to be acted upon, leaving only the objects that remained in the final sorted vector in selection.
There are many more factors that come into play that I haven't described here that makes problems like these skyrocket in complexity.
The extension is only in its alpha version. Since it is so large it is time consuming to test each function with the hundreds of possible test cases. Additionally, there are areas to optimise.
As the extension will be used by other game developers to create their own games, I first want to ensure that the extension has no errors, runs smoothly and predictably. 
Back to Top