3.0.3991 Beta is out - SkookumScript Standard now officially Apache 2.0 licensed, new Object ID language feature!

Here is another quick update of our latest greatest plugin! (this update is GitHub only, as we’ll release the next full update in just a week)

In order to make our licensing terms for the free standard version of SkookumScript crystal clear, we have decided to release it under the Apache 2.0 license going forward. Enjoy!

Also, we added a new syntax for Object IDs which quickly allow a lookup of an object based on a class and an identifier name:

object-id = [class-name] '@' ['?' | '#'] symbol-literal

So Enemy@'Robochar1' is the same as Enemy.named("Robochar1">>Name)

You can also use these alternatives:

SomeClass@'SomeGuy'  // specified class
SomeClass@?'SomeGuy' // Allows nil as result
SomeClass@#'SomeGuy' // Returns validated identifier "SomeGuy">>Name
@'SomeGuy'           // Infers desired type or Actor default

So why a shorthand for looking up actors? The upcoming SkookumIDE Professional will validate these Object IDs at compile time (or even at edit-time) by communicating with the Unreal Engine Editor, so you’ll know if a specified actor actually exists, get an error message when it was deleted, and the autocomplete will suggest available actors, all before the game even runs. Stay tuned!

Object IDs have been automatically enabled for the Actor class and all its sub-classes.

Otherwise, there’s a number of small improvements and bug fixes that you might enjoy:

What’s new?

Skookum UE4 Plugin

  • small tweak in Blueprint exposed function deletion
  • re-expose all blueprint exposed routines right after hot-reload
  • set default setting for Engine-Generated overlay from “A” to “1” to not confuse Win IDE


  • added Standard pass of Object IDs: parsing, runtime lookup (no compile time validation from UE4)
  • enabled Object IDs for Actor and all its subclasses
  • fix in callstack computation
  • added override keyword to a bunch of virtual methods to fix Clang warnings in Android builds
  • SkCallStack::Entry now derived from SkMemberExpression to allow locating its code
  • added flag m_is_closure to SkMemberInfo, indicating that it really refers to a closure defined within that member
  • closures store information about the member that they are defined in (in SkQualifier and repurposed vtable index)
  • added virtual SkInvokableBase::get_closure_info() to allow identification of a closure invokable
  • removed version of SkDebug::breakpoint_get_all_by_member() that allocated an array in a static local variable which caused deallocation issues
  • SkCallStack now stores locals for each level using new data structure SkWatch
  • call stack is now passed along with break point and stepped expressions
  • SkInstance has new accessor as_watch_value(), for now just returns as_code()
  • all locals now supported by callstack
  • SkCallstack now passed through callback processing pipeline as ref counted pointer, so it can be stored for later use
  • callstack now supports children (data member and/or list item) of variables
  • data members of this are added by default to the callstack returned on a break point
  • SkWatch now contains m_type_name and m_scope_name
  • added virtual method SkExpressionBase::as_callstack_label() for those expression types that can be used for invoked expressions, for display on callstack
  • SkCallStack::Level now has new boolean m_is_context to clearly identify a context om the stack
  • member m_invoke_string in SkCallStack::Level renamed to m_label
  • label shows invoked expression label for invoked expressions
  • fixed callstack computation for lowest entry to point to correct member info & source index
  • excluded blueprint annotated methods in SkClass::find_unregistered_atomics
  • fixed bug where callstack code attempted to use metaclass as this object
  • fixed crash bug in live update
  • added SkClass::remove_instance_method and SkClass::remove_class_method
  • fixed bug in comparison expression
  • minor tweaks


  • changed ARefPtr constructor to take const argument so it can be used with both const and non-const pointers
  • fixed bug where AIdPtrBase could not access AIdPtr<_PtrType>::ms_ptr_id_prev

Sk Core Overlay

  • updated class meta files with better descriptions

Sk Engine Overlay

  • added Actor@object_id_find() as main lookup routine for all Actor based Object IDs
  • modified named() and find_named() to use <Name|String> instead of just String

Get the new plugin from our GitHub repository.

For this update, we decided to support the full range of UE 4.12 - 4.15.

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