SkookumScript 3.0.4885 is out! 4.16 support, user defined enums and more!

We have been busy in our mad science lab creating yet again the best SkookumScript ever!

What’s new?

In a nutshell

  • support for Unreal Engine 4.16
  • support for user defined enums: Blueprint enums are now available in SkookumScript
  • lots of stability improvements!

Detailed release notes


  • fixed crash after creating new routine under certain circumstances when that routine changes vtable indices of other routines
  • when loading a file into an editor tab which has null characters present in it, trim the file at the first such character
  • caret now shows up in Log window.
  • dock tab icon differentiation for read-only files. Added icons for the different types of editors.
  • split read-only up between the editor and the file - if the editor is read-only, we apply the colouring to the dock tab and editor background, if the file is read-only, we disallow edits and change the icon.
  • added log messages when attempting to type in a read-only window (except for the log window).
  • read-only status is now updated via an Attribute.
  • read-only files are tested to see if they can be checked (when using source control) before giving a warning about not being able to edit them.
  • fixed bug where the member list filter would not properly find constructors & destructors
  • new remembers previous selections
  • save and restore in the project .ini file the following data:
  • selected class/member info (name, kind, is class member and scope).
  • all open tabs info that are not preview (name, kind, is class member, scope, caret index, foreground status).
  • removed colouring of the tab’s background colour
  • added Syntax (online), Syntax (PDF), Syntax Propopsed (PDF) to Help menu
  • updated Help and About text
  • removed Toolbar and User Preferences from Windows menu
  • removed newlines in Parser error messages since Error widget can word wrap
  • changed read-only workspace backgound color to match Log
  • SkookumIDE-project-user.ini is derived from the project file, but is stored in the relative folder …\Saved\Config\
  • remove breakpoints from routines when the routine is being deleted
  • focus the error list when a compile error occurs
  • when a tab goes into the background, dismiss the auto-complete box
  • fix for tooltips staying active when a modal dialog is created
  • added recovery code when incremental update happens in the wrong moment
  • ensure initial is saved on first run of SkookumIDE
  • ensured that editor saves any changes before accessing file externally
  • renamed “Tools” to “Toolbar”
  • changed link to license to load pricing page for now
  • fixed crash bug when restoring saved tab layout
  • fixed a number of autocomplete bugs
  • clicking on the autocomplete list now closes it and inserts the entry that was clicked on
  • whitespace is now trimmed from the license key when pasted into the go pro box
  • disabled thread switching during background pre-parse as this will leave global SkParser flags in non-default state and cause trouble in the main thread

Skookum UE4 Plugin

  • UserDefinedEnums are now reflected from UE4 to Sk
  • faster and simpler lookup of UE4 classes from Sk classes via user data stored in SkClass
  • reflection manager keeps track of runtime module package (for later use)
  • [4.16] plugin build process now properly detects changes in SkookumScript.ini and SkookumScriptGenerator source files and triggers rebuild and re-run of UHT
  • [4.16] plugin build process now properly detects changes in SkookumScript.ini and triggers rebuild of UBT makefile
  • added null check in USkookumScriptListener::coro_wait_event
  • refactor of SkUEBlueprintInterface in preparation of new class reflection system
  • reflected classes now kept in separate data structure
  • lots of renaming to describe new system as reflection system not just for Blueprint graphs
  • renamed SKUEBlueprintInterface to SkUEReflectionManager in preparation of expanding its tasks
  • fixed bug where updating a function signature in the IDE would update only one Blueprint node even if several nodes exist
  • SkookumScriptListenermanager now uses the SkookumScriptRuntime module package as the outer package for allocated listener objects
  • new Sk->UE4 class binding system:
    • SkInstance pointer directly embedded into generated classes via a custom property SkookumScriptInstanceProperty that gets attached to the generated class after compilation if the class has either a ctor, dtor or data members
    • The custom property listens to objects being constructed and destructed, invokes Sk constructors and destructors appropriately and allocates an SkInstance to be stored embedded in the UObject
    • SkookumScriptClassDataComponent no longer needed for most uses
  • constructor calls on actors are now controlled via an internal component that is automatically added to actors when needed, to ensure constructors are called at (about) the same time in the initialization sequence as Blueprint construction scripts
  • properly map Blueprint generated classes prefixed with REINST_
  • added extra integer field of user data to SkClass to cache offset in object data where SkInstance is stored inside UObject
  • fixed bug where the destructor was called on temporary instances generated from raw data members
  • new faster lookup of Sk Classes from UE4 Classes by storing Sk class index inside UClass
  • extended new, fast class lookup to structs and enums
  • added recovery code when a component instance is requested but null
  • fixed bug “Blueprint Nodes w/ ‘String’ Params Cause Crash!”
  • fixed bug in 32-bit builds where SkDataInstance sanity checking code overclobbered pointer data
  • removed some obsolete code
  • fixed issue with uninitialized instance property
  • added recovery code in case the class pointer of an object property is null
  • added recovery code when incremental update happens out of sequence
  • added null checks for this object in _wait... and _on_do... event handling coroutines
  • fixed bug in reflection manager that did not properly construct and destruct ReflectedPropertys
  • fixed bug that would cause a crash when saving a map in C++ projects
  • fixed stack overflow when debug printing on non-desktop platforms
  • changed debug print statements during remote connection from generic print routing to ADebug local to prevent crash due to accidental recusrion and stack overflow on mobile platforms
  • fixed bug where widget Blueprints were prevented from getting reflected from UE4 to Sk
  • fixed bug where SkClass lookup caused crash when number of classes shrinks between Sk binary hot reloads
  • fixed issue in SkookumScriptGenerator where UStructs used only in project classes would end up without any meta chunks
  • made destructors virtual to silence warning
  • split new class SkookumScriptGeneratorHelper off FSkookumScriptGeneratorBase to include functionality needed even in shipping builds
  • FSkookumScriptGeneratorBase now excluded from build in shipping builds
  • added recovery null checks to SkookumScriptConstructionComponent
  • added recovery code to prevent crash in cooked builds when the instance offset has not been computed yet for spawned actors
  • prevent delegate signatures from being exported as Blueprint functions
  • plugin now deletes obsolete Sk copies of Blueprint functions when Blueprint function is deleted or renamed
  • added Actor@world which returns the world a given actor is in
  • fixed crash during Blueprint compilation caused by improper SkookumScriptConstructionComponent uninitialization
  • Blueprint function parameter names starting with a number are now prefixed with p for Sk
  • Blueprint function parameter default values for user defined enums are now properly generated
  • UUserDefinedStruct support WIP (disabled for now)
  • Blueprint function/custom event support also disabled for now to prevent unforeseen issues
  • stability fixes in SkookumScriptBehaviorComponent


  • fix for deletion of partial structure when parse error encountered
  • added valid?() to combine usage of nil?() and null?()
  • fixed SkInstance leak
  • misc low level optimizations
  • pools for AStringRef, SkInstance, SkDataInstance, SkInvokedExpression and SkInvokedCoroutine now explicitely allocated instead of JIT allocation to simplify the get_pool() call to the pure minimum
  • moved test for empty return arguments out of SkInvokedContextBase::data_bind_return_args into its callers to prevent an unnecessary call in 99% of all invocations
  • inlined SkInvokedContextBase::data_empty() as it is called in the destructor of SkInvokedMethod


  • AList: replaced runtime assert with delete semantics
  • added remove_fast to AVSizedArrayBase (and deleted from AVSorted)
  • added remove_fast to APSizedArrayBase (and deleted from APSorted)
  • fixed Clang compile error
  • updated CMakeLists.txt
  • turned warnings into errors in Mac build project to keep Mac build warning free
  • reduced memory footprint of all array types from 24 bytes to 16 bytes on 64-bit architectures (no change on 32-bit architectures)
  • this also saves an allocation whenever a List instance is created on 64-bit architectures as now the underlying array structure fits into the user data of an SkInstance
  • disabled A_SYMBOL_REF_COUNT for all platforms for now, plan is to re-enable later based on actual need
  • AObjReusePool allows more control over construction time

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

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


See previous updates here.