Professional Documents
Culture Documents
Grapple Component Documentation PDF
Grapple Component Documentation PDF
DOCUMENTATION
Ver. 1.0.1
1
Grapple Component Documentation Jonathan Van Damme
TABLE OF CONTENTS
1. OVERVIEW OF THE GRAPPLE COMPONENT ...................................................... 6
Grapple Component 1
Grapple Component Documentation Jonathan Van Damme
Grapple Component 2
Grapple Component Documentation Jonathan Van Damme
4.2.1. concept............................................................................................................................................................ 42
Grapple Component 3
Grapple Component Documentation Jonathan Van Damme
5.2.3. Usage............................................................................................................................................................... 50
Grapple Component 4
Grapple Component Documentation Jonathan Van Damme
6. TUTORIALS ............................................................................................ 75
Grapple Component 5
Grapple Component Documentation Jonathan Van Damme
Grapple Sequence
A Grapple Sequence is an event where different characters interact with one another in the game world, for example by
playing a synchronized sequence of animations together.
On a technical level, the Grapple Sequence is a state one or more Grapple Components can enter, where they each become
Participant and assume a specific role.
The Grapple Sequence can apply different effects to each of its Participants. Most notably, Participants will play animations
that are synchronized with one another. More generally, effects can be purely related to player feedback (e.g. synchronized
animation updates; changes to the camera and viewpoint), but they can also affect gameplay (e.g. repositioning; ability to
move; damage). Each Grapple Sequence is defined by a Grapple Object. The content included with the Grapple Component
exists as a toolset for creating these Grapple Sequences.
A few visual examples are shown below and can be tested out in the content examples
Grapple Component 6
Grapple Component Documentation Jonathan Van Damme
Grapple Object
1.3.1. Concept
Grapple Objects are Blueprint Objects that inherit from class GrappleObject. They contain most of the functionality that is
required to define and manage a Grapple Sequence. They are used to define a Grapple Sequence and manage its Participants.
On a technical level, Grapple Objects are added to the Grapple Component as Status Objects.
1.3.2. Functionality
Grapple Objects can be applied and reverted on Grapple Components, causing said Grapple Components to Enter or Exit the
Grapple Sequence respectively. Each Grapple Component that has entered a Grapple Sequence, becomes a Participants and
is assigned a unique Participant Index.
The Grapple Object applies the effects of a Grapple Sequence to other Objects in the game world. In some cases, this is done
through the Grapple Component.
- Effects are applied and reverted whenever Participants enter or exit the Grapple Sequence. This typically occurs at the very
beginning and the very end of the Grapple Sequence. To this end, the Grapple Object contains Grapple Data in the form of a
variable structure. This Grapple Data describes the state Grapple Component and its owning Actor are in during the Grapple
Sequence. 1
- The Grapple Object can be configured to apply effects based on external input, which is received through User Commands.
- The Grapple Component can also execute Queued Events at specifically planned times during the Grapple Sequence.
Getting Started
Most users will be able to get started with the Grapple Component doing the following:
– Consulting the first section (i.e. this section, pages 6 through 9) of the Documentation.
– Following the tutorial on Installation, which can be found at the end of this document.
– Following the tutorial on Implementation, which can be found at the end of this document.
– Following the tutorial on Setting up a Grapple Sequence, which can be found at the end of this document.
– Consulting Object GrappleSequenceTutorial2 for more information and for links to commonly used Blueprint nodes.
The tutorials in this document will link to other sections where necessary.
1 Grapple Data is included in the GrappleObject_StructBased Class, but not in the base GrappleObject base Class. While
GrappleObject_StructBased is probably most suitable for most users, GrappleObject can be used instead if you only want the functionality
of managing Participants an entering/exiting the Grapple Sequence. For both of these Classes, it is possible to add your own functionality
that is applied when entering/exiting the Grapple Sequence.
2This Object can be found in the content examples:
Plugins/GrappleComponent/Content/GrappleComponent/GrappleSequenceTutorial.uasset.
Grapple Object 7
Grapple Component Documentation Jonathan Van Damme
Master
Grapple Component
(Often the same
Grapple Component)
Is Master of Is Controlled by
f Get Controlled Grapple Object f Get Master Grapple Component
Grapple Sequence
Grapple Object
Is Participant of Is Applied to
f Get Applied Grapple Object f Get Participants
f Get Participant Index f Get Participant by Index
- To access the Master Grapple Component on a Grapple Object, use function Get Master Grapple Component.
- To access the controlled Grapple Object on a Grapple Component, is function Get Controlled Grapple Object. While
it is possible to access the Controlled Grapple Object in this way, it is suggested to use Input Functions instead.
- To access a specific Participant based on its Participant Index, use function Get Participant by Index.
- To access the applied Grapple Object from a Grapple Component, use function Get applied Grapple Object.
- To get the current Participant Index of a Grapple Component on its applied Grapple Object, use function
Get Participant Index.
The process of becoming a Participant in a Grapple Sequence and applying grapple Data is referred to as Entering the
Grapple Sequence. The process of reverting Grapple Data and being removed as a Participant, is referred to as Exiting the
Grapple Sequence.
Input Functions
1.6.1. Concept
Input Functions on the Grapple Component are functions that are specifically meant for user input. Most commonly, they
are used to control Grapple Sequences from their Master Grapple Component. They can also be used on any Grapple
Component for other functionality that is not tied to a Grapple Sequence.
Most input functions include parameters that determine their Replication Mode and Timestamp.
An overview of the Input Events on the Grapple Component can be found on the Input Events Graph on the Grapple
Component.
Input Functions 9
Grapple Component Documentation Jonathan Van Damme
Grapple Data
In the case if Grapple Objects inheriting from GrappleObject_StructBased, the effects of the Grapple Sequence are
determined by its Grapple Data. This Grapple Data is split up into Global Grapple Data and Local Grapple Data.
Global Grapple Data are defined using a variable structure of type Struct_GC_GrappleData_Global, which consists of the
following member variables.
Grapple Sequence Name The name used to identify the Grapple Sequence. This member variable is optional.
Duration Time after which the Grapple Sequence is Terminated. If a negative value is set, the Grapple Sequence will
not be terminated automatically. In that case, it can be terminated manually using Input Function
Terminate Grapple Sequence (Input) on the Grapple Component.
Defines the Global Reposition Data, i.e. how the Grapple Sequence as a whole should be placed in the
game world.
Ignore Collision between Whether to ignore collision between Participants during the Grapple Sequence. It is also possible to disable
Participants collision entirely for an individual Participant using Movement Settings.
Apply Timestamp to Increase the animation start time to compensate latency between different connections. This is done by
Animation Start Time calling function Apply Timestamp to Animation Data, which makes use of the timestamp stored when
Grapple Data were applied.
Apply Timestamp to Shorten the duration of the Reposition to compensate latency between different connections. This is done
Reposition Duration by calling function Apply Timestamp to Reposition Duration, which makes use of the timestamp stored
when Grapple Data were applied.
Grapple Data 10
Grapple Component Documentation Jonathan Van Damme
Update Revert Values Whether to update Revert Values right before applying the Grapple Settings. Revert Values are stored
before Applying based on their current values. Use this If you want a Character to exit the Grapple Sequence the same way
it has entered.
3 For the settings that are relevant to all Participants, see struct_GC_Data_Global.
4 The Scene Root is defined in the Global Grapple Data using a struct_SceneComponentDefinition.
Grapple Data 11
Grapple Component Documentation Jonathan Van Damme
Repositioning
The Grapple Sequence can influence the world transformation of Components on Pawns, as well as their parent/child
relations to other Components. This is done through repositioning.
Settings related to repositioning in a Grapple Sequence are split up between the Global Grapple Data and the Local Grapple
Data.
The Reposition Target is automatically set by the Grapple Component. The actual Scene Component assuming the function
of the Reposition Target depends on whether the Grapple Sequence is using a Scene Collision Actor.
– If there is no Scene Collision Actor, the Scene Root will be the Reposition Target.
– If there is a Scene Collision Actor, the scene component 'Scene Root Correction’ of the Scene Collision actor will be
the Reposition Target.
Repositioning 12
Grapple Component Documentation Jonathan Van Damme
2.2.3.1. Purpose
Using a Scene Collision Actor ensures that characters do not collide with the world during the Grapple Sequence.
Note that the Scene Collision will take the place of the Scene Root provided above, meaning that all Participants will be
repositioned based on the root of the Scene Collision Actor instead.
The Attempt Transform Correction event executes the Scene Collision Actor's main functionality, which is looking for a world
transform that acts as the root of a Grapple Sequence and that leaves enough space for all relevant animations to play out,
without having characters collide with the world.
To this end, the Scene Collision Actor contains one or more Primitive Components. These Primitive Components represent
the Participants in the current Grapple Sequence, as well as the space they need to be able to move within.
The Scene Collision actor will test if any of these Primitive Components are colliding with the world, and if so, will try applying
some 'corrections' to the original transform, in order to make the Grapple Sequence fit into the game world physically.
5 Blueprint'/Game/Shared/GrappleComponent/Blueprint/SceneCollision/SceneCollisionActor.SceneCollisionActor'
Repositioning 13
Grapple Component Documentation Jonathan Van Damme
To make use of a Scene Collision Actor, select a Scene Collision Actor Class when defining the Global Reposition Data of your
Grapple Sequence.
This Scene Collision Actor that automatically sets up collision based on the estimated proportions of the Grapple Sequence.
It ensures that the Grapple Sequence is placed in such a way that none of the participating Characters collide with the game
world.
To disable the Scene Collision Actor for a Grapple Sequence, set the
Scene Collision Actor Class to (None) in your Global Reposition Data.
Repositioning 14
Grapple Component Documentation Jonathan Van Damme
The Global Reposition Data defines the transformation of the Grapple Sequence in the game world.
These settings are defined as part of the Global Grapple Data, using a variable structure of type
Struct_CG_RepositionData_Global, which consists of the following member variables.
Scene Collision Actor Class The Class of the Scene Collision Actor, which will manage the repositioning of the Grapple
Sequence as a whole. This can be left blank if you do not wish to use a Scene Collision Actor.
The Scene Collision Actor is spawned at the location of the Scene Root, and takes its place as the
Reposition Target.
By default, class SC_Automatic is selected. This Scene Collision Actor Class will automatically ensure
that the Grapple Sequence is placed in such a way that none of the participating Characters collide
with the game world.
To disable the Scene Collision Actor, change the selected Class to (None).
The other settings in this variable structure only work if a Scene Collision Actor is spawned.
Spawn on Floor Whether to spawn the Scene Collision Actor on the floor instead of the actual position of the Scene
Root.
Use Look Target Optionally, you can define a target Scene Component the scene Component should be aligned
towards. If a relative transform is provided, its rotation will be applied after the look at function.
This member variable determines whether the Scene Collision Actor should be facing a Look Target
when it is spawned. If this is not the case, it will simply assume the world rotation of the Scene
Root.
This member variable determines the target the Scene Collision Actor should look at when it is
spawned.
Reposition Scene Collision Actor Whether to adjust the transformation of the Scene Collision Actor on all Clients, after it has found
based on Server Transform its transformation in the server. Enabling this setting ensures that the Grapple Sequence has the
same transformation on all connections.
Reposition Time The blend time when adjusting the transformation of the Scene Collision Actor based on the server.
Repositioning 15
Grapple Component Documentation Jonathan Van Damme
Local reposition data defines the relations to the Reposition Target for each Participant.
The Grapple Component will set up all other Participants relative to the Scene Root. This is done by extracting the relevant
Reposition Data for each Participant. This data is found withing the Local Grapple Data for that Participant.
Reposition Settings for a Single Participant are defined using a variable structure of type Struct_GC_RepositionData_Local,
which consists of the following member variables.
Repositioning Enabled Whether to adjust the transformation of the owning Actor of this Participant when applying the Grapple
Settings.
Target Transform The transformation relative to the Scene Root the Actor should assume.
Compensate Character Whether to compensate the height of characters, and calculate the target transformations from floor
Height height instead.
Affect Location Whether the transformation should affect the location of the Participant.
Affect Rotation Whether the transformation should affect the rotation of the Participant.
Blend Time The time during which the Actor is repositioned gradually to its target position.
Blend Curve The curve used when gradually blending between transformations.
Attach when repositioning Whether to attach the Actor to the Scene Root when the process of repositioning has completed.
is complete
Update Target Transform Whether to update the target transformation continually when repositioning is active. If this is disabled,
Continuously the transform is calculated once at the start.
Update Start Transform Whether to update the start transformation continually when repositioning is active. If this is disabled,
Continuously the transform is calculated once at the start.
Attach Scene Component Whether to attach the Actor to the Scene Root when the process of repositioning has completed.
Maintain transform Every Whether to keep applying the relative transformation every tick, until the Reposition Object is removed.
Tick This can be used as an alternative to attaching the Scene Component.
Repositioning 16
Grapple Component Documentation Jonathan Van Damme
Animation
2.3.1.1. struct_GC_AnimationData
The Grapple Component processes animation instructions when the Update Animation (Input) function is called. These
animation updates are processed in the Linked Anim Instances of the Grapple Component. By default, this is the Linked Anim
Graph that has been placed in the Character’s Animation Blueprint.
Specifies the type of animation to be used (Anim Sequence, Blendspace or Animation Montage).
Montage – Asset In case Montage is selected under Animation Type, the Animation Montage asset that will be
used is selected here.
AnimSequence – Asset In case Anim Sequence is selected under Animation Type, the Anim Sequence asset that will be
used is selected here.
Blendspace - Asset In case Blendspace is selected under Animation Type, the Blendspace asset that will be used is
selected here.
Loop Whether the animation should loop (start over when it is finished)
Force restart animation Whether to force the animation to restart if the same asset is already playing
Root Motion Enabled Whether to enable root motion during the animation.
Montage - Section - Jump To In case Montage is selected under Animation Type, the section to jump to. If this member
variable is set to ‘none’, the section will remain unchanged.
Montage - Section - Set Next - In case Montage is selected under Animation Type, the function Montage Set Next Section will
Updated Section be called on the Animation Blueprint. This member variable will be passed on to the parameters
of this function. It should contain the name of the section that needs to be changed.
Montage - Section - Set Next - In case Montage is selected under Animation Type, the function Montage Set Next Section will
Desired Section be called on the Animation Blueprint. This member variable will be passed on to the parameters
of this function. It should contain the name of the next section.
Animation 17
Grapple Component Documentation Jonathan Van Damme
2.3.1.2. Enum_GC_AnimationType
This enumeration is used to select the type of animation update we want to process when playing animation from the Grapple
Component. These modes act as ‘channels’ that the Animation Blueprint switches between. On a technical level, animation
is processed differently based on the type of asset being used (Animation Sequence, Animation Montage or Blendspace).
Stop All Stop all animation currently being played by the Grapple Component.
AnimSequence Use an Animation Sequence as the source for the animation. This can be user-friendly because external
animation assets are typically imported into the Engine as Animation Sequences.
Montage Use an Animation Montage as the source for the animation. Montages are the most suitable way to create
a Grapple sequence. They support the use of Montage Slots, Sections, and are more stable in multiplayer
projects They also enable users to combine and selectively play animations that are contained in a single
asset.
Blendspace Use a Blend Space as the source for the animation. Blend Spaces are assets that allow any number of
animations to be blended between based on the values of multiple inputs.
Animation Data can be generated using a Make struct_GC_AnimationData node. This node contains a lot of pins.
Alternatively, it is possible to use any of the following Macros:
Animation 18
Grapple Component Documentation Jonathan Van Damme
2.3.3. Blendspaces
The Grapple Component can play Blendspaces on its Animation Blueprint and can generate
coordinates for said Blendspaces. These coordinates can be synchronized between Participants.
To start playing a Blendspace, update animation using node Update Animation (Input) on the
Grapple Component, setting the animation mode to Blendspace.
Coordinate Input The basis from which Blendspace Coordinates are generated. For more information on these modes, see the
Mode section on enumeration Enum_GC_BlendspaceCoordinateInputMode.
Reference Grapple The Grapple Component we should evaluate when generating Blendspace Coordinates.
Component
Send to Animation Whether the generated coordinates should be used immediately by the Animation Blueprint.
Blueprint
Apply to All Whether to send the coordinates over to all other Participants in the Grapple Sequence.
Participants
Coordinates can also be set directly using node Set Pending Blendspace Coordinates. They can be accessed using function Get
Pending Blendspace Coordinates.
It is possible that you need a Grapple Sequence to generate Blendspace Coordinates while it
is active. This can be done by going through the following steps.
- In the Class Defaults tab of your Grapple Object, set variable Should Receive Tick
(found under the Status Object – Settings category) to true. This will cause the
Grapple Component to enable ticking, and to send over a tick event to the Grapple
Object, as long as this Grapple Object is active.
- Implement the On Tick Received event in your Grapple Object (this is done by
adding the Event On Tick Received node in the Grapple Object’s Event Graph. This
Event can then be connected to a
Generate Blendspace Coordinates node
that is executed on any Participant.
Animation 19
Grapple Component Documentation Jonathan Van Damme
2.3.3.4. Enum_GC_BlendspaceCoordinateInputMode
The enumeration Enum_GC_BlendspaceCoordinateInputMode describes how Blendspace coordinates are generated by the
Grapple Component.
These descriptions often mention a Reference Grapple Component. This is the participant specified under
struct_GC_AnimationData that will be the source used for calculating Blendspace coordinates.
None (set manually) The Grapple Component will not generate coordinates for the Blendspace. The event Update Blendspace
Coordinates can be used to set coordinates manually.
Local Movement Use the direction the Reference Grapple Component is moving in (relative to its world rotation).
Direction
Local Look Direction Use the direction the Reference Grapple Component is looking at (relative to its world rotation).
Controller Movement Use the current movement of the Reference Grapple Component’s controller .
Input
Controller Look Input Use the current look of the Reference Grapple Component’s controller .
Delta Rotation (current - The rotation of the Reference Grapple Component, compared to the rotation during the last update.
last)
Delta Rotation (target - Use the current control rotation on the Reference Grapple Component’s controller, compared to the
current) current rotation of the Reference Grapple Component.
Copy from other Copy the Blendspace coordinates currently used by the Reference Grapple Component.
participant
Speed and Direction X-axis represents the local direction the character is moving in; Y-axis represents the current velocity
relative to Max Walk Speed on the Character Movement Compoent.
The Grapple Component sends animation updates over to all of its Linked Anim Instances. These are Animation Blueprints
that are able to respond to animation related instructions from the Grapple Component. They are added automatically if the
Grapple Component has been implemented following the steps in the Implementation tutorial in the documentation.
Animation 20
Grapple Component Documentation Jonathan Van Damme
Some animations will no longer match each other if they are played on skeletal meshes with proportions that are different
from the one used for animating.
The Animation Matching feature attempts to remedy this mismatching by a certain extent. If Animation Matching is enabled,
the Grapple Component will move the location of certain bones in the owner's skeletal mesh to match the position of certain
other bones in the skeletal mesh associated with another Grapple Participant.
Grapple Sequence where all Participants Same Grapple Sequence where one Same Grapple Sequence where one
use the same skeletal mesh the animation participant has a scaled version of the participant has a scaled version of the
assets were created with. original mesh, without Animation original mesh, with Animation Matching
Matching. enabled.
Animations can appear mismatched when they are played on skeletal meshes that have different proportions than the
skeletal meshes the animations were originally created in. The Grapple Component can attempt to resolve this mismatching
by moving the relevant bones based the Skeletal Mesh on one Participant, based on the Skeletal Mesh of another Participant.
This is done by internally creating an ‘ideal scenario’, where all relevant animations are being played on their original skeletal
meshes. The Grapple Component then takes the relative bone locations from this ‘ideal scenario’, and applies them to the
non-ideal scenario that is taking place in the Grapple Sequence.
The original skeletal meshes mentioned above are added into the game world using a Virtual Mesh Actor. This Actor has the
following properties:
• It is a child of SkeletalMeshActor.
Animation 21
Grapple Component Documentation Jonathan Van Damme
o Skeletal Mesh - The Skeletal Mesh Component has its skeletal mesh set to the skeletal mesh that was used
to create the animation.
o Animation - The Skeletal Mesh Component has an Animation Blueprint that copies all animation sent from
the Grapple Component to the main Character Mesh. In consequence, it will always have the ‘raw’ pose of
the Character as intended by the Grapple Component. By default, its Anim Instance class is set to be the
same one that is used as a Linked Anim Graph on the Character’s own Animation Blueprint (in this case
used ‘standalone’ Animation Blueprint instead of a Linked Anim Graph).
o Visibility - The Skeletal Mesh Component has its visibility set to false by default. It is only made visible when
its bone locations are relevant for the Grapple Component.
o Material - Even when the visibility of the Skeletal Mesh Component is set to true, all materials are set to be
an invisible material by default. If debug info is enabled on the Grapple Component, the Skeletal Mesh
Component will use a white x-ray material instead (see image below: al Virtual Meshes are set to the
Mannequin in its original scale, and are assuming the reference pose because the Grapple Component does
not have any animation active).
Bones will be moved based on the Animation Matching Settings provided by the user. These settings can be set in the
following ways:
• Setting the Animation Matching Settings in the Global Grapple Data of your GrappleObject.
• Using Notify Notify_Grapple_UpdateAnimationMatchingSettings inyour animation asset.6
The variable structure struct_GC_AnimationMatching contains a set of instructions on how to adjust the animation on the
Owner Skeletal Mesh Component in order to match the animation on other Participants. Essentially, the member variables
specify the following:
6Blueprint'/Game/GrappleComponent/Blueprint/Notify/LocalFunctionality/Notify_Grapple_UpdateAnimationMatchingSettings.Notify_G
rapple_UpdateAnimationMatchingSettings'.
Animation 22
Grapple Component Documentation Jonathan Van Damme
2.3.4.4. Terminology
Retargeted Bone The bone that is actually being moved by the Grapple Component.
Reference Bone The bone that needs to be at a target position relative to the master bone.
If no Reference Bone is set, the Retargeted Bone will act as the Reference Bone.
The reference bone name can also refer to a socket.
Master Bone The name of the bone/socket that the reference bone should keep a ‘correct position’ to. This ‘correct position’ is
calculated by taking the relative locations of these bones on the respective character’s Virtual Meshes, and then
applying it to the actual Character meshes in the game world.
The master bone name can also refer to a socket.
Target Position The position of the reference bone relative to the master bone.
Hand_r Animation matching on the limbs is done by creating a two bone IK chain. The effector location will be the calculated so that
the reference bone will be in the target position relative to the master bone.
Hand_l
A location for the joint target (ie. the target location of the knee/elbow) will also be calculated based on the pose of the
Foot_r Virtual Mesh.
Foot_l Animation matching on the hands and feet will thus affect multiple bones on the limb (more specifically the thigh, calf and
foot bone for the legs and the upperarm, lowerarm and hand bones on the arms.
Pelvis Animation matching on the pelvis is applied moving the pelvis (=retargeted bone) in such a way that the reference bone will
be at the target position compared to the master bone.
Animation matching on the pelvis will eventually affect all deform bones on the Skeletal Mesh, as they are all below the
pelvis in the bone hierarchy.
The following visual example shows a Grapple Sequence where the pelvis bone on one of the Participants is being moved in
order to better match the animation on the other character.
Animation 23
Grapple Component Documentation Jonathan Van Damme
2.3.4.6. struct_GC_AnimationMatchingData
This struct contains a set of instructions on how to adjust the animation on the Owner Skeletal Mesh Component in order to
match the animation on other Participants (Animation Matching). Essentially, the member variables specify the following:
Blend Time Blend time between the pose with and without Animation Matching.
Reference Participant The Participant to adjust the animation to.
Index
Right Hand Master Bone Pelvis reference bone: The pelvis can be repositioned in such a way that another bone maintains
the ‘correct position’ relative to the other Character.
Retarget Left Hand
Animation 24
Grapple Component Documentation Jonathan Van Damme
A. The first way is to add a Selection Condition that filters Participants based on the Skeleton used by their Linked
Skeletal Mesh.
B. The second way is to use the same grapple data, but replace references to animation assets to those of their
respective counterparts for other skeletons. Store references for your Grapple animations to all of their counterparts
for different skeletons. This can be done using an Object Converter Blueprint using the following steps:
If this is done correctly, the Grapple Component will now replace the specified animation assets with their pre-defined
counterparts on other skeletons.
For a more detailed explanation of this workflow and of the internal functioning of the Object Converter Blueprint, see the
section on the Object Converter Blueprint.
Animation 25
Grapple Component Documentation Jonathan Van Damme
Movement
9Blueprint'/Game/Shared/GrappleComponent/Blueprint/MovementDataObject/MovementDataObject.
MovementDataObject'
Movement 26
Grapple Component Documentation Jonathan Van Damme
– Initiating a Grapple Sequence and providing Movement Data as a part of the Local Grapple Data for a Participant.
– Constructing an Object of Class MovementDataObject and providing it to the Grapple Component using the Update Movement
Data Objects Event. This will add the Movement Data Object to a list on the Grapple Component, and will apply its Movement
Settings in the right order. It is recommended to store the output Object as a Variable, so that you can remove the Object,
reverting its Movement Settings.
– Using the Manage Movement Data Object Macro. This allows users to input Movement Data directly, and apply/revert it to when
necessary. The Object is created within the Macro, and a Reference to the created Object is stored internally as well.
– Function Movement Data - Update Revert Values updates the Revert Values based on input Movement Data.
– Function Movement Data - Update Revert Values Based on Current State updates Revert Values based on the current state of the
actor.
- This function is automatically called on begin play. To disable this behaviour, set variable Update Revert Values on Begin
Play to false.
- This function is called when Entering a Grapple Sequence if member variable Update Revert Values before Applying is
set to true in the Local Grapple Data.
– Event Snap to Control Rotation From Server (Input) : Takes the Control Rotation for the Controller possessing the Pawn owning
this Grapple Component (based on its value on the Server), and sets it to be the actual Rotation of the Pawn on all Connection.
– Event Snap to Control Rotation From Client (Input) : Takes the Control Rotation for the Controller possessing the Pawn owning
this Grapple Component (based on its value on the Client), and sets it to be the actual Rotation of the Pawn on all Connection.
Movement 27
Grapple Component Documentation Jonathan Van Damme
Sequence Camera
If a Participant in a Grapple Sequence is controlled by a Player controlled Character, the Grapple Sequence can influence the
viewpoint of this Player. This can make the Grapple Sequence appear more dramatic, impactful and cinematic to human
players.
This is achieved by accessing the Player Camera Manager. 10 The View Target on this Player Camera Manager is then changed
to a Sequence Camera Actor. This is an actor that is created for each Grapple Sequence that requires a Sequence Camera.
The Sequence Camera Actor handles all logic required to animate/modify the Sequence Camera as needed, without affecting
the default View Target of the Player Controller.
The Grapple Component and the Sequence Camera Actor process instructions from the Sequence Camera Settings.
These instructions are provided in the from of a variable structure of type struct_GC_SequenceCameraData. This variable
structure consists of the following member variables.
General Settings
Sequence Camera Whether the Grapple Component should create and control a Sequence Camera Actor.
Enabled
Sequence Camera The Class of Sequence Camera Actor that will be spawned for this Grapple Sequence. This
Actor Class variable can be changed in case the user wants to create their own version (Child Object) of the
Sequence Camera Actor in order to implement specific behaviour.
Focus Point
The Sequence Camera Actor contains a Scene Component that represents its Focus Point (i.e.. a physical location in the Game World
where the center of the action in a Grapple Sequence should be).
The Focus Point of the Sequence Camera has two purposes:
- It is the location of the Spring Arm Component, which means that if the Camera Component needs to be moved in order to
avoid collision with the world, it will be moved towards the location of the Focus Point.
- If enabled in the Sequence Camera Settings, the Camera Component will be rotated to look at the location Focus Point. On
most Grapple Sequences, this creates the illusion of a handheld camera filming the action.
Focus Point - Relevant Member Variable Type: array of struct_AttachmentDefinition variable structures.
Sockets
The location of this Scene Component is updated for every tick that the Sequence Camera is
active. The location is based on the average location of the Scene Components or Sockets
provided in this Member Variable.
Focus Point - Correction to the Focus Point location, which is added after calculating the average position an
Correction Offset applied in world space.
Camera Transform
10 For more information on the Player Camera Manager and its View Target, please consult the following page of the Engine Documentation:
https://docs.unrealengine.com/en-US/API/Runtime/Engine/Camera/APlayerCameraManager/index.html.
Sequence Camera 28
Grapple Component Documentation Jonathan Van Damme
In most cases, the Sequence Camera’s transformation will be set based on other Scene Components (e.g. a camera bone on the
Skeletal Mesh Component of the Character).
Camera Transform - Whether to set the transformation on the Camera Component of the Sequence Camera Actor
Attach based on other Scene Components.
By default, the Sequence Camera will be attached to the Camera Component on the Character.
This means that Players will perceive the Grapple Sequence as if their viewpoint has not changed,
but the settings (tracking of the focus point, post process settings, field of view, …) have only been
changed on the existing camera.
In reality, the Sequence Camera simply copies the transformation of the original View Target, and
applies its own effects from there. This means that the original View Target (typically the
Character itself, driven by a Camera Component) remains unaffected by the Grapple Sequence.
Camera Transform - Whether to rotate the Sequence Camera towards the focus point after calculating the previous
Look at Focus Point transformations.
Camera Transform - Whether to set the Control Rotation (on the Controller that is possessing the Character) to the
Affect Control world rotation of the Sequence Camera. This can facilitate seamless blending between the
Rotation default View Target and the Sequence Camera, because View Targets on Character Blueprints
are often Camera Components that are directly affected by the Control Rotation.
Spring Arm - Probe The Probe Channel11 to be used by the Spring Arm Component on the Sequence Camera Actor.
Channel
Camera Settings
Camera Settings - The field of view when the Sequence Camera is fully blended in.
Target Field of View
Camera Settings - Post Post Process Settings12 that will be overridden when the Sequence Camera is active.
Process Settings to
Override
Blend Settings
Blend in time The time over which to blend in to the Sequence Camera.
Blend out time The time over which to blend back out of the Sequence Camera.
11For more information on Spring Arm Components and their Variables, please consult the following page of the Engine Documentation:
https://docs.unrealengine.com/en-US/Gameplay/HowTo/UsingCameras/SpringArmComponents/index.html.
12 For more information on Post Process Settings, please consult the following page of the Engine Documentation:
https://docs.unrealengine.com/en-US/Engine/Rendering/PostProcessEffects/index.html.
Sequence Camera 29
Grapple Component Documentation Jonathan Van Damme
More information on these events can be found in Graph ‘Implementable Events on the Grapple Object’ on Object
GrappleSequenceTutorial. A summary can also be found on the next page.
User Commands
On User Command Please consult the section on User Commands for more information.
Received
Queued Events
On Initialize Queued Please consult the section on Queued Events for more information.
Events
Grapple Attempt
Test Selection Conditions Please consult the section on Selection Criteria for more information.
on Candidate
Apply Selection Criteria Please consult the section on Selection Criteria for more information.
On Execute Called by the Grapple Component when the Grapple Object is Executed. This method can be used instead
of the 'Grapple Attempt' node on the Grapple Component, in case the user wishes give additional
instructions related to this Grapple Object, rather than just performing a Grapple Attempt.
By default, the 'On Executed' function simply performs a Grapple Attempt based on the Grapple Object.
To execute a Grapple Object on the Grapple Component, use function Execute Grapple Object (Input).
On Grapple Attempt Called by the Grapple Component when it has successfully performed a Grapple Attempt based on this
Success Object.
By default, this function clears all Pending Grapple Attempts and initiates a Grapple Sequence with all
found Participants, in addition to the Master Grapple component which is inserted as participant 0.
On Grapple Attempt Called by the Grapple Component when a Grapple Attempt fails based on this Object.
Failed It should be noted that Clients will only be notified when a Grapple Attempt fails on the server, if variable
Notify if Attempt Fails on Server is set to true.
On Initiate Called when the Grapple Sequence has been Initiated (i.e. when it has started, regardless of whether any
Participants are present). The time the Grapple Sequence was initiated is used to synchronize animation
and to calculate when the Grapple Sequence should end.
On Terminate (Before) Called right before the Grapple Sequence is terminated (i.e. when it has ended, regardless of whether
any Participants are present). This can be useful if you still need some references that were present
during the Grapple Sequence.
On Terminate (After) Called when the Grapple Sequence has been terminated (i.e. when it has ended, regardess of whether
any Participants are present). When a Grapple Sequence is Terminated, all Participants are ejected.
On Termination Called by the Grapple Component when Termination is authorized. This is done using function Authorize
Authorized Termination (Input).
On Construct Called by the Grapple Component when the Grapple Object is constructed.
A Grapple Object is constructed whenever it is needed by the Grapple Component. This can be the case
when initiating a Grapple Sequence, when performing a Grapple Attempt or when Executing a Grapple
Object. If variable Grapple Object is Persistent is set to true, the Grapple Object is only constructed once.
On Apply Called when any Grapple Component applies the Grapple Data based on this Object.
On Revert Called when any Grapple Component reverts the Grapple Data based on this Object.
On Perform Grapple Called when a Grapple Component executes a Grapple Attempt based on this Object.
Attempt
A Grapple Sequence is always Initiated from a Grapple Component, which will then become the Master of the Grapple
Sequence. Initiating a Grapple Sequence will terminate the Grapple Sequence that is currently controlled by the Master
Grapple Component.
Initiating a Grapple Sequence directly is useful in cases where you have determined
that a Grapple Sequence will initiate, regardless of circumstances in the game world. It
gives you direct control over a Grapple Sequence. When using this node, only the
Global Grapple Data on the Grapple Object will be taken into account. The Search
Method and the Selection Criteria of the Grapple Object are not relevant in this case.
What this function does exactly, depends entirely on the Grapple Object. Unless the On
Executed event is overridden, it simply performs a Grapple Attempt on the relevant
Grapple Component with the newly created Grapple Object as the input.
All Grapple Attempts are initiated on the basis of a Grapple Object Class. This can be done using Input Function Grapple
Attempt (Input) or Grapple Attempt Advanced (Input). Please consult the dedicated section on Grapple Attempts for more
information.
A Grapple Sequence is always Terminated from its Master Grapple Component. After termination, this Grapple Component
will no longer be Controlling the Grapple Object.
It is possible to set the Termination Timer directly using Event Set Termination Timer.
The Termination Timer is also set automatically if a duration for the Grapple Sequence is provided in the Global Grapple Data.
By default, a Grapple Sequence will automatically terminate after its Termination Timer has elapsed. However, it is possible
that a Grapple Sequence needs to stay active until there is confirmation from the Grapple Component that it is allowed
terminate.
For example, this could be the case for a Grapple Sequence where the Grapple Object could still receive input from a player
on a remote connection at the very end of the Grapple Sequence. In that case, we do not want the Grapple Sequence to
terminate on other connections, unless the server has definitively decided that the Grapple Sequence is about to end.
Please note that this behaviour is not enabled by default. A Grapple Object that is created from scratch does not wait until
termination is explicitly authorized by the Grapple Component.
To modify this behaviour, set variable Terminate Without Authorization to false. The
Grapple Component will then wait until function Authorize Termination (Input) is
called before actually Terminating the Grapple Sequence.
Please note that authorizing termination only has an effect if the Grapple Sequence is
Terminated using a timer. This functionality can still be overridden by Terminating the
Grapple Sequence instantly using Input Function Terminate Grapple Sequence (Input).
Grapple Attempt
A grapple attempt is a process where the Grapple Component searches for other Grapple Components that are eligible to
join a Grapple Sequence, filters those Candidates based on certain criteria and then initiates a Grapple Sequence with itself
and these Candidates as the Participants.
It will typically serve as the link between a Grapple Sequence and gameplay.
The most simple way to execute a Grapple Attempt is to use Input Function
Grapple Attempt (Input). This node takes the input of a Grapple Object Class,
and executes a Grapple Attempt based on it instantly.
3.3.1.2. Grapple Attempt Advanced (Input) For an example on how to enter different
Grapple Sequences based on gameplay
circumstances, one could look at the graph
It is also possible to execute a Grapple Attempt using Input Function Grapple
of GrappleCharacter_Green in the sample
Attempt Advanced (Input). This node has additional parameters, which are content. This Character can Initiate three
explained on the next page. different Grapple Sequences:
2. G_StealthTakedown: Typical
takedown move that can only be
performed from behind a target.
Grapple Attempt 34
Grapple Component Documentation Jonathan Van Damme
Input Function Grapple Attempt Advanced (Input) has the following Parameters.
All grapple attempts are performed based on a Grapple Object. This class of objects has several functions that are called by the
Grapple Component and that generate the data necessary for a Grapple Sequence.
Grapple Object Class The Grapple Object class to be used for the Grapple.
This parameter takes the input of an array instead of a single variable. All of these attempts will be
performed sequentially.
The Grapple Component constructs Grapple Objects for each of the classes specified above, and adds them to the Pending Grapple
Attempts. These Attempts are then executed at specific times based on the parameters below.
Attempt Instantly Execute pending Grapple Attempts immediately (at the time node is used). These parameters all
concern the timing of
Attempt Every Tick Execute pending Grapple Attempts every tick, until Event the Grapple Sequence.
Stop Executing Pending Grapple Attempts Every Tick is called. Modify They can be combined if
variable Grapple Attempt Cooldown when performing Every Tick to set a necessary.
cooldown for this functionality.
Some other data is also included that does not directly affect the Grapple Attempt.
Update Animation This parameter can be used to immediately do an Animation Update. If the Grapple Attempt was
successful, this animation will usually be interrupted by the animation of the Grapple Sequence. If the
Grapple Attempt fails, the animation will keep playing.
By default, no animation is played.
Forbidden State Tags The Grapple Component will ignore the input from this node if any of the State Tags provided here is
active.
The Blueprint logic used for Grapple Attempts can be consulted in the Input Functions Graph of the Grapple Component.
Grapple Attempt 35
Grapple Component Documentation Jonathan Van Damme
3.3.3.1. Candidates
In the context of a Grapple Attempt, Candidates are Grapple Components that are considered to become a Participant of the
Grapple Sequence that is initiated when the Grapple Attempt is successful. They can be seen as ‘potential Participants’.
When overriding function Search Candidates on the Grapple Object, it should be noted that the Grapple Component itself
has a few functions built in that might assist users when searching for Candidates:
- Rather than searching for Actors in the game world, this function accesses variable Pending Candidates on
the Grapple Component. This variable is publicly accessible by other Blueprints, and can be used to set the
Candidates that will be used before the attempt is executed.
These functions on the Grapple Component can be implemented as needed in function Search Candidates on the Grapple
Object.
Grapple Attempt 36
Grapple Component Documentation Jonathan Van Damme
This selection process is handled as a whole by function Apply Selection Criteria on the Grapple Object.
This function can be overridden if you wish to build your own logic that finds Grapple Components that are Candidates to join the
Grapple Sequence. Alternatively, it is possible to override any of the other functions on the Grapple Object that are called as a part
of it. Different aspects of the Selection Process are as follows.
Function Test Selection Conditions on Group tests Grapple Conditions on all Candidates (by executing function Test Selection
Conditions on Candidate for each of them), and removes Candidates that do not fit the conditions.
It is recommended not to override this function, but to override function Test Selection Conditions on Candidate instead.
Function Test Selection Conditions on Candidate checks if a single Candidate is eligible to become a Participant in the
Grapple Sequence. It returns true if this is the case. By default, it only checks if the Candidate is in a state where it can
enter a Grapple Sequence.
This function should be overridden in case you want to specify the conditions that a Candidate must meet in
order to become a Participant (e.g. attacker is standing behind the target; target is incapacitated; target is
below 50 % health; …). It is recommended to keep a call to the parent function included when overriding this
function, because the parent function checks if the Grapple Component is able to enter a Grapple Sequence
in its current state.
Function Arrange Candidates is then executed on the remaining group of Candidates. This function will put the Candidates in the
right order.
This function can be overridden in case you wish to build your own function that changes the order of Candidates.
However, it provides three basic ways to arrange candidates (Match actors with target transformsations; Closest actor;
Input Order), which can be selected using an input parameter of type Enum_GC_CandidateArrangement.
By default, function Arrange Candidates executes function Arrange Candidates Automatically. This function attempts
to occupy all slots in the Grapple Sequence by Candidate that intuitively makes the most sense to human players. The
function considers all Candidates and all target transformations that are available for each Participant (based on the
Local Reposition Data, which is in turn defined in the Local Grapple Data). It then looks for the optimal way to allocate
each available Participant Index to a Candidate, so that the Candidates have to travel as little distance as possible.
Function Enforce Maximal amount of Candidates is then executed on the remaining Candidates. This function removes the
Candidates at the end of the array that exceed the maximal amount of Participants.
This function can be overridden in case you wish to determine manually which Candidates are eliminated if there are
too many.
The output parameter Selection Criteria fulfilled is set to true if the following conditions are fulfilled:
enough Candidates were found (which is verified using function Enforce Minimal amount of Candidates); and
the Grapple Component that initiated the Grapple Sequence is in a state where it can enter a Grapple Sequence (which
is verified using function Test Condition – Can Enter Grapple Sequence on the Grapple Component itself.
Grapple Attempt 37
Grapple Component Documentation Jonathan Van Damme
The selection process of function Apply Selection Criteria consists of various steps. Depending on the needs of your project,
it is possible that only a few of these steps need to be overridden, without changing the general structure of the selection
process. In that case, it is recommended not to override function Apply Selection Criteria itself, but rather one of the other
functions (e.g. Test Selection Conditions on Candidate or Arrange Candidates).
It is also possible to override function Apply Selection Criteria which will re-define the selection process as a whole. If you
wish to override this function, but start out from a copy of the original Graph of the function (which includes all default
functionality), it is recommended to proceed as follows.
A copy of the parent function will then be available in the current Graph
(you might need to connect the execution pins manually).
Depending on the needs of your project, these tasks can be split up amongst the server and the owning connection. This is
why some of these functions have an input parameter called Phase (of type enum_GC_SelectionCriteriaTestPhase, which can be
aither initial or final) This parameter determines if we are applying selection criteria in an initial phase (which is done on the
owning client before sending the result over to the server) or in a final phase (which takes place on the server).
By default, all operations are executed during both phases (testing selection conditions for each Candidate, checking if there
are enough candidates). Other operations (arranging candidates and removing excessive candidates) are only executed
during the final phase on the server.
Grapple Attempt 38
Grapple Component Documentation Jonathan Van Damme
If the Grapple Attempt was successful, the Grapple Component will call event On Grapple Attempt Success on the Grapple
Object. By default, this will simply cause the Grapple Object to Initiate a Grapple Sequence through the Grapple Component
using input function Initiate Grapple Sequence (Input).
Update Participants
Update Participants 39
Grapple Component Documentation Jonathan Van Damme
4. OTHER FUNCTIONALITY
Queued Events
4.1.1. Concept
Queued Events occur at a fixed time during the Grapple Sequence, and
typically have an influence on gameplay (for example a character being
pushed away or taking damage).
To add a Queued Event, use function Add Queued Event. On this node you can
specify a delay (input parameter time), as well as the point in time from which
this delay should be calculated (input parameter timeframe). You should also
provide a name for the Queued Event (input parameter Function Name).
The timeframe is specified using an enumeration of type
enum_GC_GrappleSequenceTimeframe. To calculate the final delay, the Grapple
Object uses Timestamps.
If input parameter Is Cancelable is set to true, the Queued Event will be cancelled
when the Grapple Sequence is Terminated or when function Cancel Queued
Events is called.
Queued Events 40
Grapple Component Documentation Jonathan Van Damme
Proceed by adding an event or function to the Grapple Object that has the same
name that has been provided to function Add Queued Event.
Optionally, you can add a "Macro - Queued Event Utility" node from Macro
Library "ML_GrappleMacros_GrappleObject". It contains pins with references to
the Master Grapple Component (which by default is always the one linked to the
Grapple Object), and also allows to re-route the event to different Participants.
By default, this Node also makes sure that no input goes through when the
Grapple is no longer active.
The Queued Event Utility node should then be connected to the actual logic you
want to add into the Grapple Sequence. These Events can be called on the
Grapple Component or on any Blueprint in your project.
Your final setup should look something like this (this Graph can be found on Object GrappleSequenceTutorial).
Queued Events 41
Grapple Component Documentation Jonathan Van Damme
User Commands
4.2.1. concept
User Commands are instructions that are handled by the Grapple Component. They are usually sent over by other Objects,
like Character Blueprints or Controllers. The Grapple Component sends these User Commands over to its User Command
Targets (by default, the Applied Grapple Object and the Controlled Grapple Object).
The Objects added as User Command Targets can add functionality on their end by implementing Blueprint Interface
BI_GrappleComponentInterface, more specifically its Event Process Incoming User Command.
Grapple Objects implement this Interface natively. They are automatically added as User Command Targets on all Grapple
Components that are Participants, as well as their Master Grapple Component. This can be disabled by modifying the
following variables on the Grapple Object:
- Auto Receive User Commands from Participants during Grapple Sequence ; and
User Commands 42
Grapple Component Documentation Jonathan Van Damme
User Commands are sent to the Grapple Component using Input Function Process User Command (Input).
The User Command will be processed according to the selected input mode. The input mode is selected using an variable of
type enum_GC_UserCommandInputMode. This enumeration describes the way in which a User Command should be
processed.
Execute The User Command is Executed (i.e. sent over to all User Command Targets) immediately.
Queue Add the User Command to a Queue, where each User Command is executed in whenever Input Function
Consume Next Queued User Command (Input) is called.
Store Provisionally Store the User Command on the Grapple Component. If a Grapple Sequence is initiated, all stored User
Commands that were input after the input that lead to the successful Attempt will be queued (meaning that
they will only be executed when Input Function Consume Next Queued User Command (Input) is called.
This input mode is designed for specific situations in network environments.
When performing a Grapple Attempt in a multiplayer project, there is usually a small delay between the input
on the Client and the moment the Grapple Sequence is initiated. This is the case because all Grapple Attempts
need to be verified on the server before the Grapple Sequence is initiated. However, it is possible that you still
need the inputs during this small delay to be registered, in case they need to be used in the Grapple Sequence
(for example, in a situation where a character does a variation of an attack when the input is pressed twice).
User Commands can be accessed on Grapple Objects by implementing Event on User Command Received. Incoming User
Commands can be filtered by using the Filter User Command macro.
User Commands 43
Grapple Component Documentation Jonathan Van Damme
Apply Damage
Damage can be dealt through the Grapple Component. This can de done using function Apply Damage from Grapple
Component, which should be used on the Grapple Component that is inflicting the damage.
Apply Damage 44
Grapple Component Documentation Jonathan Van Damme
Push Character
The Grapple Component can push characters around in the game world by launching them, applying an impulse or directly
affecting their movement input. This can be done in the following ways.
The input parameters on these nodes correspond to the names of variables on Object Classes CharacterPushObject and
CharacterPushObject_DirectionBased. For more information, please consult the section on Character Push Objects, which
contains an explanation of these variables (marked as settings).
Push Character 45
Grapple Component Documentation Jonathan Van Damme
Class CharacterPushObject
Parent FadeObject
Description Character Push Objects are used to affect the movement of characters in the game world, typically in cases
where this movement is not directly controlled by the player.
Get Managing Object The Managing Object is always the Grapple Component on the Pushed Actor.
Apply Fade Output Generate Push Velocity and Apply Push Velocity based on the Push Method (On Tick)
Value
On Fade Started - Remove all other Character Push Objects and Reposition Objects on the Affected Object
- Revert Movement Data from Grapple Sequence
- Add State Tag ST_CharacterPushActive
- Update Movement Data on the Affected Object
- Update Animation (on Start)
- Apply Push Velocity based on the selected Push Method (on Start)
Implementable functions
Generate Push Velocity Calculates the target velocity of the Push, based on gameplay circumstances.
Settings
Input Speed The base speed (velocity) of the Push. Will be multiplied by the Fade Output value.
Affect Z Velocity Whether the character should also be pushed in the Z direction. If not, only X and Y are influenced.
Push Method (On Start) The Application Method used to push the character. Different options are:
-Add Movement Input (using Character Movement Component)
Push Method (On Tick)
-Add Impulse
Push Method (On End) -Launch Character
-Do Nothing
Movement Settings The Movement Data that should be applied during the Push.
during Push
Animation (on Start) The animation that should be played when the Push starts.
Animation (on End) The animation that should be played when the Push ends.
Push Character 46
Grapple Component Documentation Jonathan Van Damme
Incompatible Status Status objects of these Classes will be removed once this Object is added.
Object Classes
Hit Tester The Hit Tester used by this Character Push Object. When the Hit Tester detects a relevant hit, the Push will
be interrupted.
Class CharacterPushObject_DirectionBased
Parent CharacterPushObject
Description Direction Based Character Push Objects generate their Push Velocity based on an input direction and a
reference scene component.
Generate Push Velocity Generates Push Velocity by taking the base direction (provided in variable Push Velocity – Direction) and
rotating it by the rotation of the Scene Component provided using variable Push Velocity - Reference Scene
Component. This vector is then normalized and multiplied by the input speed and the current fade output
value.
Settings
Push Velocity - The direction we should push the Character in. the vector length does not matter, because the input vector
Direction will be normalized and multiplied by the fade output value and the input speed.
Push Velocity - The input direction will be rotated by the rotation of this Scene Component. This variable can be seen as the
Reference Scene space in which we should calculate the input direction. If this is left blank, the input direction will be
Component interpreted in world space.
The way a Character is Pushed can be set using an enumeration of type enum_GC_CharacterPushApplicationMethod.
Add Movement Input Add Movement Input to the Pushed Actor. This is optimal for multiplayer, but only possible
(Character) for Character Blueprints.
Add Impulse (Character Use the Add Impulse function on the Character Movement Component of the Pushed Actor.
Movement Component)
Launch Character Use the Launch Character function on the Pushed Actor. Only possible for Character
Blueprints.
Do nothing Does not perform any action.
Push Character 47
Grapple Component Documentation Jonathan Van Damme
5. INTERNAL MECHANISMS
Replication
Do not replicate Execute the event on the current connection. It will not be sent over to the server or to clients.
Execute on all (if Server) If we are on the server, send the event over to all clients. If we are on a client, ignore the event.
Execute on All (if Owning If we are on the server, send the event over to all clients. If we are on a client, send the event to
Connection) the server, which will in turn send it to all clients.
Execute on server (if Owning If we are on the client, execute the event on the server.
Client)
If the criteria are also successful on the Server, it will have the Grapple Attempt Success (Input) Event executed on all other
connections.
Replication 48
Grapple Component Documentation Jonathan Van Damme
Timestamps
On Grapple Component
These timestamps are mainly meant for internal use on the Grapple Component
Timestamp - Grapple Settings Applied/Reverted The time function Apply/ Revert - All Pending Grapple Data was used.
Timestamp - Last Grapple Attempt Tick The last time a Grapple Attempt was performed in ‘every tick’ mode.
On Grapple Object
These timestamps can be accessed using function Get Timestamp on the Grapple Object.
Timestamp - Last User Command Received Refers to the time the last User Command was received by this Grapple Object.
Timestamp - Grapple Sequence Initiated Refers to the time the Grapple Sequence based on this Object was initiated.
Timestamp - Custom A custom timestamp that can be set using function Set Custom Timestamp based
on Current Time or by directly accessing variable Timestamp – Custom.
Timestamp - Last Participant Update Refers to the time function Update Participants was last used on this Grapple
Object.
On Grapple component
Calculate Delay Since Calculates the delay since the input time. Returns 0 if an invalid timestamp (i.e. one with a value smaller
than 0) negative value is provided.
Make Timestamp from Get the current server world time from the Game State
Current Time
Generate Timestamp if Invalid Generates a timestamp if the input timestamp is not valid (ie. smaller than 0).
On Grapple Object
Get Delay Since Timestamp Refers to the time function Update Participants was last used on this Grapple Object.
Set Custom Timestamp based Set Timestamp – Custom based on the current time.
on Current Time
Timestamps 49
Grapple Component Documentation Jonathan Van Damme
5.2.3. Usage
Many Input Functions provide the option to specify a timestamp. This can be useful in case the Input Function is replicated.
If an invalid timestamp (i.e. a negative value) is provided, the Grapple Component will generate a timestamp on the server
and replicate it to all Clients. This is the optimal way to manage timestamps, so it is recommended to leave the timestamp
parameter on input functions at its default value (-1).
- Increase the animation start time to compensate latency between different connections. This is done by calling
function Apply Timestamp to Animation Data, which makes use of the timestamp stored when Grapple Data were
applied.
- Shorten the duration of the Reposition to compensate latency between different connections. This is done by calling
function Apply Timestamp to Reposition Duration, which makes use of the timestamp stored when Grapple Data
were applied.
Both of this methods for compensating latency can be disabled in the Global Grapple Data.
Users can make use of timestamps when adding Queued Events. When using function Add Queued Event, set input parameter
Timeframe to the timestamp you wish to use. To use a custom timestamp, call function Set Custom Timestamp based on Current
Time or modify variable Timestamp – Custom before adding the Queued Event.
If you want to add a Queued Event without any compensation based on timestamps, set the Timeframe to ‘current time’.
Timestamps 50
Grapple Component Documentation Jonathan Van Damme
Grapple Object
Grapple Object
(Struct Based)
Reposition Object
Fade Object
Character Push Object
Character Push Object
(Direction Based)
Object Converter
Object Converter
(Stored Data)
State Tag
Status Objects
5.4.1.1. Concept
Status Objects are Objects that can be added to and removed from an Affected Object. They can apply effects to this Affected
Object. They are managed by a Managing Object.
An Affected Objects is an Object the Status Object is added to or Removed from. Every Affected Object contains a list of
Status Objects applied to is. Every Object can be an Affected Object, provided that it implements Blueprint Interface
BI_StatusObjectInterface.
- To add or remove a Status Object, use Interface Call Add / Remove Status Object on the Affected Object.
- To access all Status Objects added to an Affected Object, use Interface Call Get added Status Objects.
All of the functions from Blueprint Interface BI_StatusObjectInterface should be implemented on the Managing Object. The
Grapple Component is meant to be the Managing Object for all Status Objects that come with the project, and implements
all of these functions by default.
Every Status Object stores one reference to a Managing Object. This is Object does not necessarily need to be an Affected
Object of the Status Object. By default, the Managing Object is the Outer Object of the Status Object. This can be Changed
by overriding function Get Managing Object on the Status Object. Every Object can be a Managing Object, provided that it
implements Blueprint Interface BI_StatusObjectInterface.
- Status Objects can use Interface Call Enable / Disable Tick Updates for Status Object on the Managing Object. The Managing
Object should then call Function On Tick on that Status Object every tick.
The Status Object contains the following functions that can be overridden.
Implementable Functions
On Added Called when the Status Object is added to any Affected Object.
On Removed Called when the Status Object is removed from any Affected Object.
On Tick Can be called by the Managing Object every Tick. To enable or disable, use function Enable / Disable Tick Updates on
the Status Object.
Get Managing This function is used whenever the Object needs to access its Managing Object. By default, it returns the Outer Object
Object of the Status Object.
Status Objects 52
Grapple Component Documentation Jonathan Van Damme
Class GrappleObject
Parent StatusObject
Description Grapple Objects are used to manage Grapple Sequences on Grapple Components.
On Added The Grapple Object adds itself to a Grapple - Start receiving User Commands from Participant.
Component whenever this Grapple Component - Call Function Apply Grapple Sequence Effects
becomes a Participant on the Grapple Object.
On Removed The Grapple Object removes itself from a Grapple - Stop receiving User Commands from Participant.
Component whenever this Grapple Component is - Call Function Revert Grapple Sequence Effects
no longer a Participant on the Grapple Object.
On Tick Ticking will only be enabled if variable Enable Tick This function is implementable and should be used for
(found in category Grapple Object – Settings) is set logic that needs to run continuously. For example, it
to true. In that case, the Grapple Object will start could be used to generate Blendspace Coordinates
receiving tick updates from its Managing Object (i.e. during a Grapple Sequence.
Master Grapple Component) when the Grapple
Sequence is initiated. It will stop receiving tick
updates when the Grapple Sequence is Terminated.
Get Managing Object This function is used whenever the Object needs to For Grapple Objects, the Managing Object is always the
access its Managing Object. By default, it returns Master Grapple Component.
the Outer Object of the Status Object.
Apply Grapple Applies the influence from the Grapple Sequence. When overriding this function, it is recommended to keep a
Sequence Effects call to the parent function, as it provides some base functionality.
Revert Grapple Reverts the influence from the Grapple Sequence. When overriding this function, it is recommended to keep
Sequence Effects a call to the parent function, as it provides some base functionality.
On Construct; On Execute; On Initiate; On Terminate These functions are called automatically by the Grapple Component or the
(Before); On Terminate (After); On Termination Grapple Object, and can be overridden to create Grapple Sequences. They are
Authorized; On Apply; On Revert; On Initialize easily accessible by right-clicking in any Graph and searching for "Grapple
Queued Events; On User Command Received Object Implementation" (either with a Grapple Object selected as the target,
or with 'context sensitive' disabled). They are laid out in detail on the Graph of
Object GrappleSequenceTutorial.
Settings
Grapple Object Is Persistent Grapple Objects stay stored on the Grapple Component that constructed them and can be re-used
Persistent in different phases of gameplay (eg. Executing the Grapple Object, performing a Grapple Attempt and initiating
the Grapple Sequence).
Remove Persistent Whether to remove the Persistent version of this Grapple Object when the Grapple Sequence is Terminated,
Object on Terminate so that it is reconstructed the next time it is used.
Cancel all Queued Whether to Cancel all Queued Events when the Grapple Sequence is Terminated
Events on Terminate
Status Objects 53
Grapple Component Documentation Jonathan Van Damme
Terminate Grapple If set to false, the Grapple Sequence can only be Terminated after function Authorize Termination (input) is
Sequence without used on the Grapple Component.
Authorisation
Insert self as Master If a Grapple Attempt based on this Object is successful, add the Master Grapple Component to the list of
on Successful Grapple Participants before initiating initiating the Grapple Sequence.
Attempt
Auto Receive User User Commands processed by the Grapple Component are sent over (using a Blueprint Interface) to all Objects
Commands from that are stored as 'User Command Targets' for that Grapple Component. Any Grapple Sequence that is applied
Participants during to the Grapple Component wil automatically be added and removed when it is applied and reverted
Grapple Sequence respectively, if this setting is enabled.
Auto Receive User User Commands processed by the Grapple Component are sent over (using a Blueprint Interface) to all Objects
Commands from that are stored as 'User Command Targets' for that Grapple Component. Any Grapple Sequence that is applied
Master during to the Grapple Component wil automatically be added and removed when it is applied and reverted
Grapple Sequence respectively, if this setting is enabled.
Authorize The delay after which Termination is Authorized automatically. This will not happen if this variable
Termination after has a negative value.
Delay
Terminate Grapple The delay after which the Grapple Sequence is Terminated automatically. This will not happen if
Sequence after Delay this variable has a negative value. For Struct Based Grapple Objects, the value of this variable is set
automatically based on the duration specified in the Global Grapple Data.
Branching - Preset This variable consists of Grapple Object Classes, each mapped to a name. When a User Command
Branches with this name is received by the Grapple Object, it calls Input Function Initiate Grapple Sequence With
Current Participants on the Master Grapple Component.
Branching - Use If true, the Grapple Component will use the timestamp from the User Command that lead to the
Timestamp from User branch to initiate the new Grapple Sequence. If not, the current time will be used instead.
Command
Branching - The replication mode to use when initiating the new Grapple Sequence.
Replication Mode
Status Objects 54
Grapple Component Documentation Jonathan Van Damme
Class GrappleObject_StructBased
Parent GrappleObject
Description Struct Based Grapple Objects are Grapple Objects that use a variable structure of type
struct_CG_GrappleData_Global (i.e. Global Grapple Data) to specify the effects of the Grapple Sequence.
Apply Grapple On Struct Based Grapple Objects, Function Apply Grapple Sequence Effects (from parent Class GrappleObject)
Sequence Effects will use the Grapple Data on the Object to apply the influence from the Grapple Sequence to Participants. This
is done using Function Apply/ Revert - All Pending Grapple Data on the Grapple Component.
The Grapple Component will use function Generate Global Grapple Data on the Grapple Object to determine
the effects of the Grapple Sequence.
Revert Grapple On Struct Based Grapple Objects, Function Revert Grapple Sequence Effects (from parent Class GrappleObject)
Sequence Effects will use the Grapple Data on the Object to revert the influence from the Grapple Sequence from Participants.
This is done using Function Apply/ Revert - All Pending Grapple Data on the Grapple Component.
Overridable functions
Generate Global Defines the Global Grapple Data for this Grapple
Grapple Data Object in the form of a variable structure. For
more information on the composition of Global
Grapple Data, please consult the Graph of this
function on Object GrappleSequenceTutorial.
Settings
Stored Global Grapple The default Global Grapple Data, which is stored by the Grapple Object and will be output by function
Data Generate Global Grapple Data. This value is ignored if function Generate Global Grapple Data Is overridden.
Status Objects 55
Grapple Component Documentation Jonathan Van Damme
Class FadeObject
Parent StatusObject
Description Fade Objects are Status Objects that apply an effect over a certain duration.
Implementable functions
On Fade Started The Fade starts when function Start Fade is used on the Fade Object. This happens automatically (when the
Fade Object is added to an Affected Object) if variable Auto Activate Pending is set to true.
On Fade Ended The fade ends when it is interrupted, when function End Fade is called manually or when its progress has
completed (depending on the Fade completed handling method).
Apply Fade Output This function is called automatically during every tick of the fade and will output a float value based on
Value current progress and progress curve.
Test Fade Interrupt This function is called automatically during every tick of the fade, and will interrupt the fade if it returns true.
Conditions
On Fade Interrupted Called when the fade is interrupted. Interrupting the fade will immediately end the fade. A fade is interrupted
when function Test Fade Interrupt Conditions returns true or when function Interrupt Fade is called manually.
Status Objects 56
Grapple Component Documentation Jonathan Van Damme
Class HitTester
Parent FadeObject
Description Hit Tester Objects are used to check and evaluate hits that occur on one or more Primitive Components.
Implementable functions
On Any Hit The Object calls this Event whenever one of the tested primitive components is hit by another component
On Relevant Hit The Object calls this Event when a 'relevant hit' occurs on one of the tested primitive components. This is a hit
that meets certain conditions regarding hit type, collision object type and velocity.
Test Hit Relevance This function determines if there is a relevant hit. I fit is overridden, variables Accepted Hit types, Accepted
Collision Object Types and Minimal Velocity are ignored.
Determine Hit Type This function determines the hit type (default, bounce or landing). If the function is not overridden, this
happens automatically based on the impact normal.
Settings
Tested Primitive The Primitive Components that should be observed by the Hit Tester Object.
Components
Accepted Hit types The hit types that will be considered to determine if there is a relevant hit. The hit type is determined by calling
function 'Determine Hit Type' on the Hit Tester Object.
Accepted Collision The external components (i.e. the ones that are hitting the tested primitive components) with these collision
Object Types object types will be considered for a relevant hit.
Relevant Hit The minimal delay between relevant hits. Any relevant hits will be ignored while the colldown is active.
Cooldown
Status Objects 57
Grapple Component Documentation Jonathan Van Damme
Class BounceObject
Parent HitTester
Description Bounce Objects are Hit Testers that push or launch a Character when they detect a relevant hit.
Test Hit Relevance Uses the parent functionality to test if the hit is relevant, but also calls function Test hit for Bounce Relevance.
Implementable functions
Test hit for Bounce Checks if the current movement mode on the Linked Character is accepted based on the Accepted Movement
Relevance Modes.
Settings
Accepted Movement The movement modes that the Linked Character is allowed to be in, in order for the hit to be considered
Modes relevant.
Bounce Velocity The velocity that will be applied by function Apply Bounce Velocity.
Status Objects 58
Grapple Component Documentation Jonathan Van Damme
Class GradualTransformationObject
Parent FadeObject
Description Gradual Transformation Objects are used to modify the Transformation of a Scene Component over a
certain duration.
Apply Fade Output This function is called automatically during - Calculate Target Transform
Value every tick of the fade and will output a float - Set Target Transform variable
value based on current progress and progress - Apply Gradual Transformation
curve.
Implementable functions
Calculate Target Generates he target Transformation of the Transformed Scene Component. This transformation is applied
Transform every tick (during the Fade) using function Apply Gradual Transformation.
Settings
Affect Location Whether to affect the location of the Transformed Scene Component.
Affect Rotation Whether to affect the rotation of the Transformed Scene Component.
Affect Scale Whether to affect the scale of the Transformed Scene Component.
Sweep Whether to use the Sweep flag when transforming the Transformed Scene Component.
Teleport Whether to use the Teleport flag when transforming the Transformed Scene Component.
Rotation Multiplier A factor that is applied to each axis of the Rotation in the Target Transform . This variable can be used to lock
certain axes. The most common usage is to set it to (0, 0, 1) to keep Pawns upright.
Status Objects 59
Grapple Component Documentation Jonathan Van Damme
Class RepositionObject
Parent GradualTransformationObject
Description Reposition Objects are Gradual Transformation Objects that will gradually set the transformation of a
Scene Component based on interpolation between two target transformations
On Added Reposition Objects can be added to Grapple - Remove other Reposition Objects with same
Components when they apply effects from a Transformed Scene Component
Grapple Sequence. This is done using function - Store variables based on current state
Reposition Participant on the Grapple
Component or by setting the Local Reposition
Data for a Participant.
On Removed Reposition Objects are removed from the - Revert attach parent if variable On Removal - Revert
Grapple Component when the effects from the Parent Binding is set to true.
Grapple Sequence are reverted. - Revert relative transform if variable On Removal -
Revert Relative Transform is set to true.
On Fade Started Detach from initial attach parent if variable Attach When Complete is set to true.
Calculate Target The target transformation is calculated by interpolating between state 0 and state 1.
Transform
Settings
Attach When Complete Whether to attach the Scene Component after repositioning.
State 0 - Parent Scene Component Describes the initial state of the Transformed Scene component. These variables are set
State 0 - Attach Socket automatically by the Reposition Object.
State 0 - Relative Transform
State 0 - Update Continuously Whether to keep updating the initial state over the duration of the Fade.
State 1 - Parent Scene Component Describes the target State of the Transformed Scene component. These variables should be
State 1 - Attach Socket provided when constructing the Reposition Object.
State 1 - Relative Transform
State 1 - Update Continuously Whether to keep updating the target state over the duration of the Fade.
On Removal - Revert Parent Binding Whether to revert the attach parent of the Transformed Scene component to its value in state 0.
On Removal - Revert Relative Whether to revert relative transformation of the Transformed Scene component to its value in
Transform state 0.
Height Correction - Enable for Whether to reposition the Transformed Scene component based on lowest point on this Scene
Transformed Scene Component Component (where it would typically touch the ground). This only works if the Transformed Scene
component is a CapsuleComponent, SphereComponent or BoxComponent. Height Correction is
mainly intended for repositioning character with different capsule heights relative to one
another.
Height Correction - Enable for State Whether to interpret transformations relative to the Parent Scene Component in the target state
1 parent based on lowest point on this Scene Component (where it would typically touch the ground). This
only works if the Transformed Scene component is a CapsuleComponent, SphereComponent or
Height Correction - Enable for State
BoxComponent. Height Correction is mainly intended for repositioning character with different
0 parent
capsule heights relative to one another.
Status Objects 60
Grapple Component Documentation Jonathan Van Damme
Class LookTargetObject
Parent GradualTransformationObject
Description Look Target Objects are Gradual Transformation Objects that will gradually set the transformation of a
Scene Component based on interpolation between two target transformations
Calculate Target The target transformation is calculated by interpolating the initial rotation and the rotation and the one
Transform when applying the Look Target and the Rotation Offset.
Settings
Look Target The Scene Component the Transformed Scene Component should be aligned towards.
Rotation Offset A correction that is applied after calculating the look at transformation for the Transformed Scene
Component.
Update Look At Start Location Whether to keep updating the initial state over the duration of the Fade.
every Tick
Update Look At Target Location Whether to keep updating the target state over the duration of the Fade.
every Tick
Status Objects 61
Grapple Component Documentation Jonathan Van Damme
Class MovementDataObject
Parent StatusObject
Description The Grapple Component can affect the way Characters move in the game world. This is done using
Movement Data. Movement Data Objects are stored in layers on the Grapple Component, and are applied
from low to high.
The Movement Data Object’s function is to store movement settings, in the form of a variable structure of
type struct_GC_MovementSettings.
On Added If the Affected Object is a Grapple Component, the Movement Data Object adds itself on the target layer
using function Movement Data - Add / Remove Layer. The rest of the functionality is handled by the Grapple
Component.
On Removed If the Affected Object is a Grapple Component, the Movement Data Object removes itself using function
Movement Data - Add / Remove Layer. The rest of the functionality is handled by the Grapple Component.
Settings
Layer Movements object on lower layers are applied first. Higher ones are applied afterwards, overriding the
values of the lower layers.
Status Objects 62
Grapple Component Documentation Jonathan Van Damme
State Tags
5.5.1. Concept
State Tags are Objects that are added to and removed from a State Tag Manager. They each hold an array of 'Reasons' that
keep them active. If they run out of Reasons, they are removed from the State Tag Manager. State Tags are used to define
certain circumstances the Grapple Component needs to take into account, that are an exception rather than the rule. As
such, you might only need the Grapple Component to do certain things if there are any (one or more) reasons to do so.
Examples of such things are:
- Refuse Input from the user - Input should be accepted if there are no reasons to refuse it. However, it may be ignored in certain
situation eg. the character being a Participant in a Grapple Sequence of performing another action.
- Prohobit the Grapple Component from entering a Grapple Sequence – This could be done while the Grapple Component is
already a Participant in another Grapple Sequence.
- Have Ticking Enabled – By default, ticking is disabled on the Grapple Component. However, certain functionalities (like
Repositioning and Push Character) do require some logic to be executed every tick. This is why these graphs will add a state tag
with consequence should tick enabled when they activate. When they are no longer active, the state tag is removed.
To access the State Tag Manager on a Grapple Component, use function Get State Tag Manager. Other Objects can
implement the State Tag Manager as well (although this is not done in any of the
assets relevant to the Grapple Component). To access the State Tag Manager for
any Object, use Interface Call Get State Tag Manager for Object (from Blueprint
Interface BI_StateTagInterface).
State Tags 63
Grapple Component Documentation Jonathan Van Damme
5.5.2. Consequences
State tags are linked to one another in the sense that each State Tag class has a set of other State Tag classes that are the
consequences of that State Tag. What this means, is that activating some State Tags will lead to the activation of other State
Tags. The relation between State Tags is based on consequence, rather than being a strict hierarchy.
State Tags 64
Grapple Component Documentation Jonathan Van Damme
On update Consequences
Description
State Tag Name (Functions On State Tag Added and (When this State Tag is added, the
(This state tag is added while … )
On State Tag Removed do the following) following ones are added as well)
ST_CannotEnterGrappleSequence This Grapple Component cannot become a Participant in a (no action on update) (no consequences)
new Grapple Sequence. Usually checked when evaluating
the Grapple Criteria during a Grapple Attempt.
ST_CharacterPushActive Any Character Push Object is active on the Linked Actor of (no action on update) ST_ShouldTick
this Grapple Component.
ST_GrappleAttempt_EveryTick This Grapple Component is performing a Grapple Attempt (no action on update) ST_ShouldTick
every tick.
ST_GrappleAttempt_Pending The Grapple Component has any pending Grapple (no action on update) (no consequences)
Attempts.
ST_GrappleAttempt_Verifying A Grapple Attempt is successful on the Client (and variable (no action on update) (no consequences)
Notify If Attempt Fails on Server is set to true for its Class).
Deactivated when the Server tells the Client that the
Grapple attempt has failed, or when a Grapple Sequence is
entered (usually on success).
ST_GrappleSequenceActive The Grapple Component is a Participant in a Grapple (no action on update) ST_RefuseInput
Sequence.
ST_CannotEnterGrappleSequence
ST_RefuseInput The Grapple Component is ignoring from the player. Usually (no action on update) (no consequences)
checked when performing a Grapple Attempt.
ST_ShouldTick Active when the Linked Object (in this case, the Grapple Update ComponentTickEnabled if the Linked (no consequences)
Component) should have tick enabled. Object is an Actor Component.
State Tags 65
Grapple Component Documentation Jonathan Van Damme
Object Converter
- The Object Converter Blueprint contains a function Convert Object. This function converts an Input Object to an
Output Object based on a Modifier Object.
- Variable Object Conversion Mappings on the Object Converter Blueprint contains all possible input objects, all
posisble Modifiers for that input object, and the output objects they should be converted to based on each Modifier.
- Each key in variable Object Conversion Mappings (i.e. each object that can be converted) is mapped to a value of
type Struct_ObjectConversion.
- An object will be converted based on a certain Modifier, if that Modifier is found in the Struct_ObjectConversion
mapped to the input object. The value the command is mapped to, will be the output object (i.e. the object the input
object is converted to).
Modifier Output
Object A Object A
Modifier Output
Object C Object C
This is done by using the original assets from the Animation Data as Input Objects, and the name of the Skeleton asset on the
targeted Character as the Modifier. The Grapple Component then uses an Object Conversion Blueprint defined by the user,
where all relevant animation assets are mapped to their counterparts on different Skeletons. In the Sample Content, this
Object Converter Blueprint is AnimationRemappingData. For a practical explanation on how to apply this functionality in your
own project, see the section on adapting animation assets based on the target Skeleton.
The sample content contains one Grapple Sequence that has been set up to be played on Skeletal Meshes using
UE4_Mannequin_Skeleton as well as TutorialTPP_Skeleton. To this end, Animation Montages
a_grapple_spinningkick_00_Montage and a_grapple_spinningkick_01_Montage were retargeted to another Skeleton. Object
Conversion Blueprint AnimationRemappingData was set up to convert the relevant Animation Montages to their
counterparts on the other Skeleton. A visual explanation of this system is provided on the next page.
13It should be noted that this ObjectConversion_StoredData Class inherits from the ObjectConversion parent Class, which does not contain
any stored date, but does contain a Convert Object function.
Object Converter 66
Grapple Component Documentation Jonathan Van Damme
Output Object
RTG_a_grapple_spinningkick_00_
Modifier Object Montage
TutorialTPP_Skeleton
(=montage using the same
animation sequence retargeted
to the other Skeleton)
Input Object
Montage
a_grapple_spinningkick_00_Monta
ge
Output Object
Montage
Modifier Object
a_grapple_spinningkick_00_Mont
UE4_Mannequin_Skeleton
age
(=same asset as the input object)
Output Object
RTG_a_grapple_spinningkick_01_
Modifier Object Montage
TutorialTPP_Skeleton (=montage using the same
animation sequence retargeted
to the other Skeleton)
Input Object
Montage
a_grapple_spinningkick_01_Monta
ge
Output Object
Montage
Modifier Object
a_grapple_spinningkick_01_Mont
UE4_Mannequin_Skeleton
age
(=same asset as the input object)
Internal Mechanisms 67
Grapple Component Documentation Jonathan Van Damme
Enumerations
Enumerations used by the Grapple Component that are not discussed elsewhere, are explained in this section.
5.7.1.1. Enum_GC_GrappleSequenceOperation
5.7.1.2. Enum_GC_ResetSwitch
Defines whether the Grapple Component should be setting new settings, or revert settings to their Revert Values.
Set Custom Values Apply Settings, usually based on the member variables of a variable structure.
5.7.1.3. enum_GC_GrappleSequenceTimeframe
Refers to a specific moment in the Grapple Sequence, ussuallt stored in a timestamp on the Grapple Object.
Current time Refers to the current server time, taken from the Game State
Grapple Sequence Refers to the time the Grapple Sequence was initiated on this Grapple Object
Initiation
Last User Command Refers to the time where the currently/last processed User Command that was received by the
Received Grapple Object
Last Participant Refers to the time a Perticipant was last added to or removed from the Grapple Object
Update
Custom Timestamp Refers to the value of variable 'Timestamp - Custom' on the Grapple Object
5.7.1.4. Enum_GC_RoleType
Defines the current state the Grapple Component currently occupies, in the context of a Grapple Sequence.
Follower The Grapple Component is currently a Follower ( Participant other than the Master) in a Grapple
Sequence.
Internal Mechanisms 68
Grapple Component Documentation Jonathan Van Damme
5.7.1.5. Enum_GC_RotationSpaceSelection
This enumeration contains options on how to interpret a rotation. It usually accompanies a variable of type rotator.
Actor Indicates that the rotator should be interpreted the space of the Actor linked to this Grapple
Component.
Control Rotation Indicates that the rotator should be interpreted relative to the control rotation of the Pawn
linked to this Grapple Component.
5.7.1.6. enum_GC_SearchMethod
For more information about this enumeration, please navigate to the relevant passage in the section on
Search Targets.
5.7.1.7. enum_GS_ConnectionType
5.7.1.8. enum_GS_ModifyBoolean
5.7.1.9. enum_GS_ReplicationMode
For more information about this enumeration, please navigate to the relevant passage in the section on Replication.
5.7.1.10. enum_GS_SceneComponentSelectionType
Defines how to find a scene component to base the target transform on, if the camera transform is affected by the Sequence
Camera.
Base Mesh The main skeletal mesh animated by the Grapple Component.
Internal Mechanisms 69
Grapple Component Documentation Jonathan Van Damme
Virtual Mesh The Virtual Mesh that is used for animation retargeting.
Search Command Calls function ‘Search Scene Component’ (from Blueprint Interface
‘BI_GrappleComponentInterface’ on the owning actor. This Interface function can be
implemented if you want to look up a specific Scene Component based on an input command.
This selection method requires the additional input of a Search Command (variable of type
name).
5.7.1.11. Enum_GS_UI_Colors
This enumeration contains a list of names for preset colors used in the debug user interface. It is not relevant for users.
Internal Mechanisms 70
Grapple Component Documentation Jonathan Van Damme
This Search Command functions as a sort of ‘tag’, which is used to uniquely identify a Scene
Component when interfacing with a specific Object.
- Search Command ‘CharacterMesh’ could return the main Skeletal Mesh used
by the Character; and
- Search Command ‘DefaultGrappleHitbox’ could return the Primitive Component that is used to search for
Participants when performing a Grapple Attempt.
A way of calling this Function with some extra functionality from the Grapple Component, is by using function
SearchSceneComponentOnObject. This function attempts to perform the Interface call on the target object. The parameters
of this function add the following functionality.
- Only Accept Primitive Components: this parameter provides the option to filter the output so that only Primitive
Components are accepted.
- Search By Tag If Not Found: this parameter allows users to find a Scene Component based on its component tags,
if the Input Object is an Actor. This means that you can also use the function by changing the component tags on the
Input Object, without needing to implement the Interface.
Internal Mechanisms 71
Grapple Component Documentation Jonathan Van Damme
This is done using a variable structure of type struct_GC_AttachmentDefinition. This variable structure contains instructions
for finding a Transform in the context of a Grapple Sequence.
Reference Participant Index The Participant based on which we should look for the Scene Component mentioned above. 14
Search Command Input In case Search Command is selected under selection type, the Grapple Component calls
function ‘Search Scene Component’ (from Blueprint Interface ‘BI_GrappleComponentInterface’
on the owning actor. This Interface function can be implemented if you want to look up a
specific Scene Component based on an input command.
This member variable contains the Search Command that will be used.
Custom Scene Component Input In case ‘Custom’ is specified under Selection Type, a Scene Component Object reference can
be input here.
Socket Name The Socket on the Scene Component specified above that we should base out Transform on.
Relative Transform The relative transformation (either to the Socket or the Scene Component itself)
14For example, if ‘Actor Root Component’ is specified under Selection Type and the Reference Participant Index is 0, this Attachment
Definition is referring to the Root Component of the Master Grapple Component ( = the Participant with index 0).
Internal Mechanisms 72
Grapple Component Documentation Jonathan Van Damme
Debug Tools
Disable Debug Info on Clients Whether to only display debug information on the server (and not on all clients). Only has effect if
'show debug info' has been set to true. Note that this Variable will only have an effect during setup.
Debug - Global Switch Whether to allow any of the debug information (normally controlled by the other settings) to be
visible.
Debug - Show Virtual Mesh Whether to show a visible material on the Virtual Mesh.
Debug Color The color used to refer to this Grapple Component in the Debug UI.
– In the Grapple Component Blueprint itself, by setting the relevant variables in category ‘Debug’
– At runtime, Using event ApplyDebugSettings will apply the settings on a single Grapple Component
– At runtime Using event ApplyDebugSettings_AllGrappleComponents will apply the settings on all Grapple
Components
Internal Mechanisms 73
Grapple Component Documentation Jonathan Van Damme
5.9.3. Debug UI
If variable Debug - Show UI is set to true, the Grapple Component will add
a widget of Class UI_GC_DebugHUD to the player screen.
Internal Mechanisms 74
Grapple Component Documentation Jonathan Van Damme
6. TUTORIALS
This Section contains some tutorials that should get you started with the Grapple Component.
Installation
To add the Grapple Component to your project, place all contents of the Content folder in the Content folder of your own project. The ContentExamples folder can be left out.
This can also be done by opening the project file, right clicking on the GrappleComponent folder and selecting Migrate.
To access the Demonstration Game Mode, open Content/GrappleComponent/ContentExamples/GrappleComponent_ExampleMap.umap and play this level in the editor.
Tutorials 75
Grapple Component Documentation Jonathan Van Damme
Implementation
Follow these steps to implement the Grapple Component into a Character Blueprint.
1. Gather necessary assets 4. Set up Animation Blueprint – Method 1 – Linked Anim Graph (Recommended)
Make sure the content in the Grapple Navigate to the template for the Grapple Component Animation Blueprint (Object GrappleComponent_AnimBP, found in
Component Content is included in your project. the AnimBP folder of the Grapple Component folder). If you use the Grapple Component as an addon, you need to show
enable ‘show engine content’ in your content browser in order to find this object. Create a Child Blueprint Class of this
This can be done by following the previous
object.
tutorial.
On this newly created Blueprint, navigate to the Class Settings and set the Target
Skeleton to be the same one your Character’s Skeletal Mesh is using.
Note that the target skeleton flag is marked as advanced under the class settings.
This means that you might need to expand the section to see the option.
In the Anim Graph of this Blueprint, add a Linked Anim Graph node before your
output pose.
3. Create Default Grapple Hitbox (optional)
With the newly created node selected, navigate to the details panel and set the
Instance Class to be the Animation Blueprint we have just created.
Optionally, you can add a Primitive Component that will be
used to search for targets. The Linked Anim Graph should be placed so that its output influences the output
pose of the Animation Blueprint.
If you want the Grapple Component to use this Primitive
Component by default, it should have a tag named
defaultgrapplehitbox .
Tutorials 76
Grapple Component Documentation Jonathan Van Damme
4. Set up Animation Blueprint – Method 2 (Montages Only) Regardless of the method used, all nodes should be placed in between the character’s default animation graph nodes, including relevant
animation slots and the output pose.
It is possible to work without a Linked Anim Graph by simply connecting the
Montage Slots you are using to the output pose.
If you already have montage slots set up, this method requires no
implementation at all.
It should be noted that this method is only viable if Grapple Sequences use
Animation Montages only. This method does not support the Animation
Matching feature.
For instructions on how to create your own Grapple Sequence, please proceed to the next tutorial.
Tutorials 77
Grapple Component Documentation Jonathan
Follow these steps to implement the Grapple Component Van Damme
into a Character Blueprint.
Setting up a Grapple Sequence Follow these steps to create a custom Grapple Sequence and initiate it from gameplay.
For many users, it might be easier to follow along on the 2. Make Grapple Data
GrappleSequenceTutorial Object, which contains a Graph with the same
instructions as this document. The Graph also provides references to the relevant Method 1
functions and other nodes.
On your newly created Grapple Object, override function Generate Global Grapple Data. In the Graph of this function, use a Make
Struct_GC_GrappleData_Global node to generate the Global Grapple Data.
Method 2 Method 3
1. Create Grapple Object
An alternative to using this Blueprint layout to generate Global Modify the default value of variable Stored_GlobalGrappleData on the
Right-click an empty space in the Content Browser and create a new Blueprint Grapple Data, is to use the macro called '(Simplified) Generate Grapple Object. This can be done in the Class Defaults tab.
Class that inherits from Class GrappleObject_StructBased Global Grapple Data', which will only expose the essential
parameters to create a 'typical' third person Grapple Sequence
with an attacker and a target,
Tutorials 78
Grapple Component Documentation Jonathan Van Damme
3. Define Search Method (Optional) 4. Define Selection Criteria (Optional) Functions can be overridden on any Blueprint by navigating to
the My Blueprint tab, opening the Functions section and
This step is only relevant in case you are This step is only relevant in case you are initiating this Grapple Sequence from a Grapple Attempt. opening the override menu. From there, you can select the
initiating this Grapple Sequence from a
function you wish to override.
Grapple Attempt. On your newly created Grapple Object, you can implement your own logic for applying
Selection Criteria by overriding functions 'Apply Selection Criteria' and/or 'Test Selection
On your newly created Grapple Object, Conditions’.
override function 'Search Candidates’. This
function finds Grapple Components in the Function Apply Selection Critetia can be overridden if you wish to build your own logic that
game world that will become Candidates to checks if a group of Candidates is fit for the Grapple Sequence based on this Object, and
enter a Grapple Sequence. determines the Participant Index for each Candidate.
Please consult the Graph of this function in Function Test Selection Conditions on Candidate can be overridden if you wish to build your own logic
GrappleSequenceTutorial for more that checks if a single Candidate is fit for the Grapple Sequence based on this Object.
information
Please consult the Graph of these functions in GrappleSequenceTutorial for more information
5. Override Events (Optional) 6. Initiate Grapple Sequence from other Blueprint Option B: Execute Grapple Object Option C: Initiate Grapple Sequence
Tutorials 79
Grapple Component Documentation Jonathan Van Damme
7. OTHER INFORMATION
Credits
The Grapple Component was created by Jonathan Van Damme. For more information, please contact jon@jonvandam.com.
– Mr Mannequins Tools by Jim Kroovy – Mr Mannequins Tools is a Blender add-on that exports animations and
weighted meshes that are directly compatible with the third person mannequin that is available in Unreal Engine's
Third Person Template, without re-targeting anything in Unreal Engine.
Support
In case you have any further questions, feedback or suggestions regarding the Grapple Component, please contact
support@jonvandam.com.
Other Information 80