3.0.4462 is here! Lots of stability improvements and easier C++ project setup

It is time again for the next cutting edge of SkookumScript!

What’s new?

In a nutshell

  • lots of convenience and stability improvements for the new SkookumIDE
  • simplified C++ project setup - now all you need to add in your game module cpp file is one #include statement
  • stability improvements in Blueprint node exposure system (caveat: it now no longer permissible to pass Blueprint-generated classes as types to methods & coroutines exposed to Blueprints via the &blueprint annotation - doing this will now generate a compile time error - we have disallowed it for the time being as this feature was causing instability for a lot of users - if this change affects your code please use a C++ superclass as the parameter type instead)

Detailed release notes


  • Save/Save All now works for Workbench editor window
  • Prefix the Workbench tab name with a * if it’s dirty
  • fixed bug where editor tab expands to whole window, IDE becomes unusable
  • refresh editor tabs when project is reloaded
  • now properly detects deleted classes when syncing from disk
  • class tree widget now properly picks up classes marked as deleted
  • force compile now syncs from disk before compiling, picking up any changes that were applied outside of the IDE
  • after a project reloads, content of any open editor tabs is refreshed
  • IDE now auto-reparses declarations after an auto-sync from disk to reflect changes in data members/routine signatures
  • fixed bug where unsaved chunks were forgotten during a sync from disk
  • fixed race condition due to non-atomic flag testing between threads
  • external moving/renaming of classes now properly handled and picked up by auto-reload
  • when reparenting is detected, class is cleared to allow fresh population with new content
  • fixed bug where deleting a member would cause a crash
  • error widget is now Invoked when an Error occurs on compile
  • clicking on errors now brings up the member at the error position specified
  • caret locations are no longer reset when selecting a member that is already open in an editor window
  • focus is now given to the editor window after setting the position
  • fixed bug where auto-sync from disk would reset error messages
  • in Members widget added operator name next to method name if method name is an alias for an operator (for example equal? [=])
  • fixed REPL auto-parse heuristic
  • fixed bug where IDE incorrectly allowed you to open multiple editor tabs for the same data member chunk
  • error text ranges are now intelligently expanded to one character if they are empty, so there’s always at least one character of squiggles
  • added Icons for Open in Explorer and Copy Path to Clipboard
  • fixed bug where syncing text from disk would not properly detect and handle deleted data member and meta info files
  • deleting a class now also removes any errors associated with that class
  • fixed bug where autocomplete would sometimes suggest the same identifier multiple times
  • enhanced syntax highlighting for groups [] {} () so that each successive level of nesting alternates from three different colors to make it easier to match the beginning and ending group characters
  • added “Open in external app” command for edit/REPL windows
  • updated some icons
  • auto-save the workspace file (only, no other editors have auto_save set)
  • added a 120 second timer that saves the workspace file when it’s reached
  • when hitting F4 to run a snippet, save the workspace file if dirty
  • when leaving focus of the editor, save the workspace file if dirty
  • fixed a bug where the window position state wouldn’t be remembered when minimized.
  • fix for high CPU usage when idling minimized
  • deleting a routine that was just added will now properly revert it from P4 and delete the file
  • deleting a routine that is currently checked out will first revert it then mark it for delete
  • fixed bug where deleting a member routine would not properly clear associated errors
  • fixed bug where member list items weren’t properly updated when only their signature changed
  • now properly detecting classes being deleted from just one overlay, and properly removing its members and associated errors
  • fixed bug where CTRL-S would delete the current selection
  • created SkClass::clear_meta_info() to reset meta info before meta info parse
  • fixed bug where detection of a deleted data member file would lead to a crash under certain circumstances
  • fix in processing of externally deleted classes/members
  • fixed bug in routine deletion

Skookum UE4 Plugin

  • &blueprint annotated Sk functions now exposed to Blueprints right after script loading
  • IMPORTANT: that means, no game module classes or Blueprint generated classes can be used as function parameters!
  • fixed glitch where Blueprint assets were incorrectly marked “dirty” (edited) and suggested to save on shutdown
  • new C++ project binding method - no custom code in game module required any more, all binding is handled in generated C++ code
  • Blueprint exposed functions and events now support C++ types defined in the game module
  • Blueprint bindings are now exposed immediately after the game module classes, enums and structs are registered to make sure this happens before any Blueprints are compiled
  • refactor of blueprint interface - decoupled gathering of bindings from exposing of bindings for more efficient processing, and in preparation of proper C++ project support
  • refactor of raw data member initialization sequence
  • due to unreliable delegate callbacks, raw data member access now uses JIT initialization
  • raw data member initialization now consistently guarded by a dirty flag
  • fixed 4.14 precompiled header issue caused by ping-pong merging
  • adjusted initialization sequence so that it works in both editor and game builds and in commandlet mode
  • updated raw data var name matching algorithm to deal with FName case insensitivity woes
  • fixed bug where, upon deletion of a class, bindings of that class would continue lingering in the Blueprint interface binding array and eventually cause a crash
  • fixed bug in SkookumScriptMindComponent where specifying a non-Mind class would create a non-Mind instance and eventually lead to a crash
  • added new method on_function_updated() to editor module interface to allow more fine grain control over what exactly is updated
  • added new method on_function_removed_from_class() to editor module interface to allow more precise action when a function was removed
  • disabled the LaunchDemonMessages module for 4.14, 4.15 and master as apparently it causes build issues sometimes
  • generator plugin generates new annotations reflected_cpp and reflected_data for generated classes in generated meta info
  • text program parser now parses all overlays of meta information from bottom up, accumulating meta info


  • added compile time check that Blueprint-Generated classes are not used as types for &blueprint annotated routines
  • ensured that Object ID flags are set properly with !Class.meta-sk files
  • grouped Object ID flags together
  • added recovery code to raw data access
  • suppress assert during raw data access when assert message is already being produced
  • fixed bug where signature change was not detected in coroutines during preparse
  • added $UE4-specific marker into comments and _ue4_ character sequence into identifier names to clearly point out UE4 specific code in SkookumScript
  • removed some default arguments for type checking robustness
  • fixed bug in SkBrain binary length calculation due to new code allowing SkClasses to be unlinked from the class hierarchy
  • added SkClass::unlink_instance_method, SkClass::unlink_class_method and SkClass::unlink_coroutine which allow removal of a routine from the class without deleting it
  • now properly handles deleted routines during incremental update

:sk: Core overlay

  • added List methods !fill() and !appends() for list item creation via closure


  • added AFunctionArgBase2 and AMethodArg2 which allow two arguments to be passed to a callback
  • created new container class AVSorted

Get the new plugin from our GitHub repository or as a good old precompiled zip file for Epic Games Launcher users.

We also submitted this update to the Unreal Marketplace so expect it to show up there soon!

As usual, don’t hesitate to ask us for help if you encounter any issues!



Thank you for this, lots of nice stuff, particularly improving the ide robustness. All working well here so far