Newsflash: 4.9.1 support and vastly improved Blueprint integration coming up

Hey just wanted to make sure nobody missed that we posted an updated version of the 3.0.1528 release supporting the latest release of Unreal Engine - 4.9.1.

What we have currently in the works is a major upgrade to our Blueprint integration. We hope to have it ready for you guys in about a week from now. It will include:

  • Automagic support of Blueprint classes. All blueprints in your project will be automatically available as classes in SkookumScript. You create a new blueprint in the UE4 Editor and it immediately shows up in the SkookumScript IDE.
  • Automagic support of Blueprint variables. All blueprint variables in your project will be automatically available as data member variables in the SkookumScript class. You create a new blueprint variable in the UE4 Editor and it immediately shows up in the SkookumScript IDE.
  • Blueprint variables will be used in SkookumScript just like a regular instance data member, e.g. @forward_speed := 2000.0.
  • These variables will access the live Blueprint variable so you can run SkookumScript and your event graph concurrently seeing and affecting each other’s data.
  • Member variables of all other reflected UE4 classes will also be switched over to this new syntax, so you will write my_actor.@sprite_scale := 2.0 instead of my_actor.sprite_scale_set(2.0). This is not only more elegant but will also under the hood save memory and result in yet faster runtime execution.

We’re also working on more documentation and tutorials to get you up to speed faster!

So stay tuned - skookum things are happening!

3 Likes

Excited, the changes to blueprints are pretty much exactly what I need.

Nice, Is this working with all blueprint types(UUserWidget) or only blueprints that extend an actor?

Yes this should work with WidgetBlueprints as well, but I’d have to test it to make sure. Also, any custom UObject you declare in your C++ code will also be able to use this system if you expose your C++ class to the SkookumScriptGenerator (via Engine\Programs\UnrealHeaderTool\Config\DefaultEngine.ini).

1 Like

Quick update: We are working on this! Here are some screen shots of the work in progress:

Auto-exposed blueprint classes and blueprint variables! Use them just like you would any other SkookumScript class or data member. Also all engine-class properties (e.g. for class Actor are now data member variables). As you can see there are now less methods (no more setter/getter methods for properties) but instead 4800 data members.

Coroutines can now be placed in your Blueprint graph and kicked off from within your network!

We hope to have this ready for you guys this week!

2 Likes

Also note that @GreatGuru is converting the butterflies from the UE4 Blueprint demo to SkookumScript for a comparison. :grin:

1 Like

We are psyked can’t wait for this update…

1 Like

Hey sorry to keep you guys waiting! All the features mentioned above are working now (yay!) but we decided to hold this off till next week, do some more testing and add additional cool stuff, e.g. a tool bar button that will bring up the Skookum IDE and focus on your currently selected actor/blueprint/node/function if an equivalent exists in SkookumScript:

So stay tuned - the wait will be worthwhile!

1 Like

Eagerly awaiting, I feel like the BP integration changes are the really big step to making it feasible to write games mostly in SK as opposed to a weird mix. Which us ultimately what users like me were interested to begin with, something we can use to avoid C++ without much compromise.

2 Likes

Hey quick update - all the promised features are done however I have been discovering a number of bugs in the plugin while converting the butterfly in the ‘Blueprints’ demo project over to SkookumScript, so I am holding back the release until they are all squished and the butterfly will flutter by in skookum ways. Sorry again but it’s all coming along!!

No worries, we guessed ALL this new support for BP would open up a can of issues.

1 Like

Hey everybody - we really want to release the latest and greatest badly but there are still some glitches left that we want to address before we post the next update.

So in the meantime, the good news: The SkookumScript driven butterfly is happily fluttering about!

The main loop controlling the butterfly in SkookumScript looks like this:

//---------------------------------------------------------------------------------------
// Simulates the butterfly's flight
//---------------------------------------------------------------------------------------

&blueprint
() 
  [
  // Variable storing location to land at
  !landing_spot : HitResult!   
  loop
    [
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    // 1) Takeoff phase
    @trail.activate(false)             // Turn on trail effect    
    @flight_curve.play                 // Start flying timeline    
    @flight_curve.play_rate_set(2.6)   // Speed up wingbeats    
    @time_in_flight := 0               // Reset flight time    
    @audio_flight.fade_in(0.0 1.0 0.0) // AUDIO: Fade in Flying Soundcue
    
    race
      [
      loop
        [
        move_flight(45 35) // Move and rotate        
        animate_flight     // Animate wing/body components        
        _wait              // Wait one frame
        ]
        
      _wait(1.8)  
      ]
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    // 2) Flight phase
    @flight_curve.play_rate_set(1.5)
    
    race
      [         
      // Pick a new flight target once in a while
      loop
        [
        pick_new_flight_target
        _wait(@@random.uniform_range(1 2.5))
        ]
        
      // Flight movement
      loop
        [        
        move_flight(100 0) // Move and rotate        
        animate_flight     // Animate wing/body components        
        _wait              // Wait one frame
        ]
        
      // Collision detection
      loop
        [
        if check_for_landing_spot(landing_spot) [exit]   // Move on to landing phase if landing spot found
        _wait(0.4)                                       // Space out executions so they're not every frame
        ]      
      ]
      
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    // 3) landing phase
    !landing_start     : @base.component_location
    !landing_start_rot : @base.component_rotation
    !landing_end       : landing_spot.@location + [landing_spot.@normal * 1.5] // Offset slightly above impact point
    !landing_end_rot   : MathLib.find_look_at_rotation(landing_start landing_spot.@location + [landing_spot.@normal * -5]) // Rotate towards location slightly below the surface of the impact point
    landing_end_rot.pitch_set(landing_end_rot.pitch + 90) // Offset pitch to face forward
    @flight_curve.play_rate_set(2.5)                      // Speed up wingbeats
    @landing_curve.play_from_start                        // Simple curve from 0 to 1
    
    loop
      [
      move_landing(landing_start landing_start_rot landing_end landing_end_rot)     // Move and rotate butterfly towards landing spot        
      if not @landing_curve.is_playing? [exit]  // When done playing, end landing phase and move on to resting phase        
      animate_flight                            // Animate wing/body components      
      _wait
      ]
      
    @flight_curve.stop                 // Stop flapping
    @trail.deactivate                  // Turn off trail effect
    @audio_flight.fade_out(0.5 0.0)    // AUDIO: Fade out Flying Soundcue          
    
    // 4) Resting phase
    @resting_curve.play                // Play flapping motion for rest
    @audio_ground.fade_in(1.0 1.0 0.0) // AUDIO: Fade in Resting Soundcue    
    
    race
      [
        // Animate the wing components for butterfly resting
        loop
          [
          animate_resting
          _wait  
          ] 
     
        // Timeout after a while - rest longer depending on length of flight
        _wait(@@random.uniform_range(@time_in_flight.clamp(1 7) [@time_in_flight + 6]))
      ]
      
    @resting_curve.stop                // Stop flapping motion for rest
    @audio_ground.fade_out(1.0 0.0)    // AUDIO: Fade out Resting Soundcue
    @flight_target.world_location_set(landing_start false HitResult! false) // Take off by flying back towards "Landing start" location
    ]      
  ]

All member variables are Blueprint variables, including timeline nodes controlled by SkookumScript.

Please hang in there - we’ll have the release ready very very soon! And yes, of course we’ll also support 4.10.

1 Like

Here is the original butterfly Blueprint for comparison:

The update is now up and includes 4.8, 4.9 and 4.10.

Enjoy!