HPawn
HPawn is a simpler Pawn implementation with a basic pawn-like implementation. Aimed for custom pawns not based on the Advanced functionality found in HPawn.
💡 HPawn uses a series of Classes from the Helix Framework to Unreal Engine that make up what we refer to as HPawn and it can constructed via Pawn().
HPawn is simple by design and therefore can support exotic characters like the marketplace asset seen above.
Simple Construction of HPawn
-- Spawns an base Pawn
local base_pawn = Pawn(Vector(100, 0, 100), Rotator(0, 0, 0), "helix::SK_None")
Advanced Construction of HPawn
- ⚠️ You need to specify your own
SK_PawnandAnimBP_Pawnif you want to use a custom Skeletal Mesh and AnimationBP. Otherwise use:helix::SK_None
--- Spawns a Green Man and updates construction properties
local green_man = Pawn(Vector(0, 0, 0), Rotator(0, 0, 0), "helix::SK_Pawn", "helix::AnimBP_Pawn")
green_man:SetMesh("helix::SK_Pawn", true)
green_man:SetAnimationBlueprint("helix::AnimBP_Pawn")
green_man:SetGravityScale(1)
green_man:SetJumpZVelocity(420)
green_man:SetCanCrouch(true)
green_man:SetCanJump(true)
green_man:SetCapsuleSize(48, 96)
green_man:SetBrakingSettings(8, 2, 2048, 0, 0, 0)
green_man:SetMaxAcceleration(2048)
green_man:SetSpringArmSettings(Vector(0, 0, 144), 300, Vector(0, 0, 0), true, 15)
green_man:SetRotationSettings(Rotator(0, 360, 0), false, true)
green_man:SetSpeedSettings(600, 300)
green_man:SetPawnSettings(false, false, false)

Simple Construction of HPawn with Posession
Spawns and Posesses HPawn with an active PlayerController with a SkeletalMesh: SK_BullMech and AnimationBP: ABP_BullMech.
-- Spawns an base Pawn
local base_pawn = Pawn(Vector(100, 0, 100), Rotator(0, 0, 0), "helix::SK_BullMech", "helix::ABP_BullMech")
player:Possess(base_pawn)
Code Snippet
Add the following code to Server/Index.lua file inside the package.
-- Function to spawn a Pawn to a player
function SpawnPawn(player)
-- Spawns a Pawn at position 1, 0, 100 with default's constructor parameters
local new_pawn = Pawn(Vector(1, 0, 100), Rotator(0, 0, 0), "helix::SK_HPawn", "helix::ABP_HPawn")
new_pawn:AddStaticMeshAttached("prop", "helix::SM_Cube")
new_pawn:SetCapsuleSize(32, 64)
new_pawn:SetCanCrouch(false)
-- Possess the new Pawn
player:Possess(new_pawn)
end
-- Subscribes to an Event which is triggered when Players join the server (i.e. Spawn)
Player.Subscribe("Spawn", SpawnPawn)
-- Iterates for all already connected players and give them a Pawn as well
-- This will make sure you also get a Pawn when you reload the package
Package.Subscribe("Load", function()
for k, player in pairs(Player.GetAll()) do
SpawnPawn(player)
end
end)
Constructors
local my_pawn = Pawn(location, rotation, mesh, custom_animation_blueprint?, collision_type?, gravity_enabled?)
Default Constructor
local my_hpawn = HPawn(location, rotation, mesh, custom_animation_blueprint?, collision_type?, gravity_enabled?)
| Type | Name | Default | Description |
|---|---|---|---|
| Vector | location | ||
| Rotator | rotation | ||
| SkeletalMesh Reference or StaticMesh Reference | mesh | ||
| Blueprint Reference | custom_animation_blueprint | | |
| CollisionType | collision_type | CollisionType.Normal | |
| boolean | gravity_enabled | true |
Static Functions
Inherited Entity Static Functions
| Returns | Name | Description | |
|---|---|---|---|
![]() | table of Base Entity | GetAll | Returns a table containing all Entities of the class this is called on |
![]() | Base Entity | GetByIndex | Returns a specific Entity of this class at an index |
![]() | integer | GetCount | Returns how many Entities of this class exist |
![]() | iterator | GetPairs | Returns an iterator with all Entities of this class to be used with pairs() |
![]() | table | Inherit | Inherits this class with the Inheriting System |
![]() | table of table | GetInheritedClasses | Gets a list of all directly inherited classes from this Class created with the Inheriting System |
![]() | table or nil | GetParentClass | Gets the parent class if this Class was created with the Inheriting System |
![]() | boolean | IsChildOf | Gets if this Class is child of another class if this Class was created with the Inheriting System |
![]() | function | Subscribe | Subscribes to an Event for all entities of this Class |
![]() | function | SubscribeRemote | Subscribes to a custom event called from server |
![]() | Unsubscribe | Unsubscribes all callbacks from this Event in this Class within this Package, or only the callback passed |
Functions
Inherited Entity Functions
| Returns | Name | Description | |
|---|---|---|---|
![]() | integer | GetID | Gets the universal network ID of this Entity (same on both client and server) |
![]() | table | GetClass | Gets the class of this entity |
![]() | boolean | IsA | Recursively checks if this entity is inherited from a Class |
![]() | function | Subscribe | Subscribes to an Event on this specific entity |
![]() | function | SubscribeRemote | Subscribes to a custom event called from server on this specific entity |
![]() | Unsubscribe | Unsubscribes all callbacks from this Event in this Entity within this Package, or only the callback passed | |
![]() | SetValue | Sets a Value in this Entity | |
![]() | any | GetValue | Gets a Value stored on this Entity at the given key |
Destroy | Destroys this Entity | ||
![]() | boolean | IsValid | Returns true if this Entity is valid (i.e. wasn't destroyed and points to a valid Entity) |
CallRemoteEvent | Calls a custom remote event directly on this entity to a specific Player | ||
CallRemoteEvent | Calls a custom remote event directly on this entity | ||
BroadcastRemoteEvent | Calls a custom remote event directly on this entity to all Players |
Inherited Actor Functions
| Returns | Name | Description | |
|---|---|---|---|
![]() | AddImpulse | Applies a force in world world to this Actor | |
AttachTo | Attaches this Actor to any other Actor, optionally at a specific bone | ||
Detach | Detaches this Actor from AttachedTo Actor | ||
SetCollision | Sets this Actor's collision type | ||
SetDimension | Sets this Actor's Dimension | ||
![]() | SetForce | Adds a permanent force to this Actor, set to Vector(0, 0, 0) to cancel | |
SetGravityEnabled | Sets whether gravity is enabled on this Actor | ||
![]() | SetVisibility | Sets whether the actor is visible or not | |
SetHighlightEnabled | Sets whether the highlight is enabled on this Actor, and which highlight index to use | ||
SetOutlineEnabled | Sets whether the outline is enabled on this Actor, and which outline index to use | ||
SetLifeSpan | Sets the time (in seconds) before this Actor is destroyed. After this time has passed, the actor will be automatically destroyed. | ||
SetLocation | Sets this Actor's location in the game world | ||
SetRotation | Sets this Actor's rotation in the game world | ||
SetRelativeLocation | Sets this Actor's relative location in local space (only if this actor is attached) | ||
SetRelativeRotation | Sets this Actor's relative rotation in local space (only if this actor is attached) | ||
SetScale | Sets this Actor's scale | ||
SetNetworkAuthority | Sets the Player to have network authority over this Actor | ||
SetNetworkAuthorityAutoDistributed | Sets if this Actor will auto distribute the network authority between players | ||
![]() | TranslateTo | Smoothly moves this actor to a location over a certain time | |
![]() | RotateTo | Smoothly rotates this actor to an angle over a certain time | |
![]() | boolean | IsBeingDestroyed | Returns true if this Actor is being destroyed |
![]() | boolean | IsVisible | Returns true if this Actor is visible |
![]() | boolean | IsGravityEnabled | Returns true if gravity is enabled on this Actor |
![]() | boolean | IsInWater | Returns true if this Actor is in water |
![]() | boolean | IsNetworkDistributed | Returns true if this Actor is currently network distributed |
![]() | table of Base Actor | GetAttachedEntities | Gets all Actors attached to this Actor |
![]() | Base Actor or nil | GetAttachedTo | Gets the Actor this Actor is attached to |
| table | GetBounds | Gets this Actor's bounds | |
![]() | CollisionType | GetCollision | Gets this Actor's collision type |
![]() | Vector | GetLocation | Gets this Actor's location in the game world |
![]() | Vector | GetRelativeLocation | Gets this Actor's Relative Location if it's attached |
| Player or nil | GetNetworkAuthority | Gets this Actor's Network Authority Player | |
![]() | Rotator | GetRotation | Gets this Actor's angle in the game world |
![]() | Rotator | GetRelativeRotation | Gets this Actor's Relative Rotation if it's attached |
![]() | Vector | GetForce | Gets this Actor's force (set by SetForce()) |
![]() | integer | GetDimension | Gets this Actor's dimension |
| boolean | HasNetworkAuthority | Returns true if the local Player is currently the Network Authority of this Actor | |
| boolean | HasAuthority | Gets if this Actor was spawned by the client side | |
![]() | Vector | GetScale | Gets this Actor's scale |
![]() | Vector | GetVelocity | Gets this Actor's current velocity |
AddActorTag | Adds an Unreal Actor Tag to this Actor | ||
RemoveActorTag | Removes an Unreal Actor Tag from this Actor | ||
| table of string | GetActorTags | Gets all Unreal Actor Tags on this Actor | |
| boolean | WasRecentlyRendered | Gets if this Actor was recently rendered on screen | |
| float | GetDistanceFromCamera | Gets the distance of this Actor from the Camera | |
| float | GetScreenPercentage | Gets the percentage of this Actor size in the screen |
Inherited Paintable Functions
| Returns | Name | Description | |
|---|---|---|---|
![]() | SetMaterial | Sets the material at the specified index of this Actor | |
SetMaterialFromCanvas | Sets the material at the specified index of this Actor to a Canvas object | ||
SetMaterialFromSceneCapture | Sets the material at the specified index of this Actor to a SceneCapture object | ||
SetMaterialFromWebUI | Sets the material at the specified index of this Actor to a WebUI object | ||
![]() | ResetMaterial | Resets the material from the specified index to the original one | |
![]() | SetMaterialColorParameter | Sets a Color parameter in this Actor's material | |
![]() | SetMaterialScalarParameter | Sets a Scalar parameter in this Actor's material | |
![]() | SetMaterialTextureParameter | Sets a texture parameter in this Actor's material to an image on disk | |
![]() | SetMaterialVectorParameter | Sets a Vector parameter in this Actor's material | |
![]() | SetPhysicalMaterial | Overrides this Actor's Physical Material with a new one |
Inherited Damageable Functions
| Returns | Name | Description | |
|---|---|---|---|
| integer | ApplyDamage | Do damage to this entity | |
![]() | integer | GetHealth | Gets the current health |
![]() | integer | GetMaxHealth | Gets the Max Health |
Respawn | Respawns the Entity, fullying it's Health and moving it to it's Initial Location | ||
SetHealth | Sets the Health of this Entity | ||
SetMaxHealth | Sets the MaxHealth of this Entity |
| Returns | Name | Description | |
|---|---|---|---|
PlayAnimation | Plays an Animation Montage on this Pawn | ||
StopAnimation | Stops an Animation Montage on this Pawn | ||
![]() | AddSkeletalMeshAttached | Spawns and Attaches a SkeletalMesh into this Pawn | |
![]() | AddStaticMeshAttached | Spawns and Attaches a StaticMesh into this Pawn | |
![]() | RemoveSkeletalMeshAttached | Removes, if existing, a SkeletalMesh from this Pawn given it's custom ID | |
![]() | RemoveStaticMeshAttached | Removes, if existing, a StaticMesh from this Pawn given it's custom ID | |
![]() | RemoveAllStaticMeshesAttached | Removes all StaticMeshes attached | |
![]() | RemoveAllSkeletalMeshesAttached | Removes all SkeletalMeshes attached | |
SetMesh | Changes the Pawn Mesh on the fly | ||
![]() | SkeletalMesh Reference or StaticMesh Reference | GetMesh | Gets the Skeletal Mesh Asset |
![]() | Vector | GetMovingTo | Gets the Moving To location |
MoveTo | AI: Makes this Pawn to walk to the Location | ||
Follow | AI: Makes this Pawn to follow another actor | ||
StopMovement | AI: Stops the movement | ||
![]() | Player or nil | GetPlayer | Gets the possessing Player |
![]() | Rotator | GetControlRotation | Gets the Control Rotation |
![]() | HideBone | Hides a bone of this Pawn | |
![]() | UnHideBone | UnHide a bone of this Pawn | |
![]() | boolean | IsBoneHidden | Gets if a bone is hidden |
Jump | Triggers this Pawn to jump | ||
SetJumpZVelocity | Sets the velocity of the jump | ||
SetMaxAcceleration | Sets the max acceleration | ||
SetCapsuleSize | Sets this Pawn's Capsule size | ||
SetCanJump | Sets if this Pawn is allowed to Jump | ||
SetCanCrouch | Sets if this Pawn is allowed to Crouch and to Prone | ||
SetBrakingSettings | Sets the Movement Braking Settings of this Pawn | ||
SetSpringArmSettings | Sets the Spring Arm Settings of this Pawn | ||
SetRotationSettings | Sets the Rotation Settings of this Pawn | ||
SetSpeedSettings | Sets the Speed Settings of this Pawn | ||
SetPawnSettings | Sets the Pawn Settings of this Pawn | ||
SetAnimationBlueprint | Sets the Animation Blueprint of this Pawn |

PlayAnimation
Plays an Animation Montage on this Pawn
my_hpawn:PlayAnimation(animation_path, slot_name?, loop_indefinitely?, blend_in_time?, blend_out_time?, play_rate?, stop_all_montages?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Animation Reference | animation_path | ||
| string | slot_name? | | |
| boolean | loop_indefinitely? | false | |
| float | blend_in_time? | 0.25 | |
| float | blend_out_time? | 0.25 | |
| float | play_rate? | 1.0 | |
| boolean | stop_all_montages? | false | Stops all running Montages from the same Group |

StopAnimation
Stops an Animation Montage on this Pawn
my_hpawn:StopAnimation(animation_asset)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Animation Reference | animation_asset |

AddSkeletalMeshAttached
Spawns and Attaches a SkeletalMesh into this Pawn, the SkeletalMesh must have the same Skeletal used by the Pawn Mesh, and will follow all animations from it. Uses a custom ID to be used for removing it further.
For customizing the Materials specific of a SkeletalMeshAttached, please use the following syntax in the Paintable methods:attachable///[ATTACHABLE_ID]/[PARAMETER_NAME], where [ATTACHABLE_ID] is the ID of the Attachable, and [PARAMETER_NAME] is the name of the parameter you want to change.
my_hpawn:AddSkeletalMeshAttached(id, skeletal_mesh_asset?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | id | Used further for removing or applying material settings on it | |
| SkeletalMesh Reference | skeletal_mesh_asset? | |

AddStaticMeshAttached
Spawns and Attaches a StaticMesh into this Pawn in a Socket with relative Location and Rotation. Uses a custom ID to be used for removing it further
For customizing the Materials specific of a StaticMeshAttached, please use the following syntax as theparameter_namein the Paintable methods:attachable///[ATTACHABLE_ID]/[PARAMETER_NAME], where [ATTACHABLE_ID] is the ID of the Attachable, and [PARAMETER_NAME] is the name of the parameter you want to change.
my_hpawn:AddStaticMeshAttached(id, static_mesh_asset?, socket?, relative_location?, relative_rotation?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | id | Used further for removing or applying material settings on it | |
| StaticMesh Reference | static_mesh_asset? | | |
| string | socket? | | |
| Vector | relative_location? | Vector(0, 0, 0) | |
| Rotator | relative_rotation? | Rotator(0, 0, 0) |

RemoveSkeletalMeshAttached
Removes, if existing, a SkeletalMesh from this Pawn given it's custom ID
my_hpawn:RemoveSkeletalMeshAttached(id)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | id |

RemoveStaticMeshAttached
Removes, if existing, a StaticMesh from this Pawn given it's custom ID
my_hpawn:RemoveStaticMeshAttached(id)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | id |

RemoveAllStaticMeshesAttached
Removes all StaticMeshes attached
my_hpawn:RemoveAllStaticMeshesAttached()

RemoveAllSkeletalMeshesAttached
Removes all SkeletalMeshes attached
my_hpawn:RemoveAllSkeletalMeshesAttached()

SetMesh
Changes the Pawn Mesh on the fly
my_hpawn:SetMesh(mesh_asset, adjust_capsule_size)
| Type | Parameter | Default | Description |
|---|---|---|---|
| SkeletalMesh Reference or StaticMesh Reference | mesh_asset | ||
| boolean | adjust_capsule_size | Auto adjust the capsule size based on the Mesh size |

GetMesh
Gets the Skeletal Mesh Asset
— Returns SkeletalMesh Reference or StaticMesh Reference.
local ret = my_hpawn:GetMesh()

GetMovingTo
Gets the Moving To location
— Returns Vector (the moving to location or Vector(0, 0, 0) if not moving).
local ret = my_hpawn:GetMovingTo()

MoveTo
AI: Makes this Pawn to walk to the Location
Triggers event MoveCompleted
my_hpawn:MoveTo(location, acceptance_radius?)

Follow
AI: Makes this Pawn to follow another actor
Triggers event MoveCompleted
my_hpawn:Follow(actor, acceptance_radius?, stop_on_succeed?, stop_on_fail?, update_rate?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Base Actor | actor | Actor to follow | |
| float | acceptance_radius? | 50 | Radius to consider success |
| boolean | stop_on_succeed? | false | Whether to stop when reaching the target |
| boolean | stop_on_fail? | false | Whether to stop when failed to reach the target |
| float | update_rate? | 0.25 | How often to recalculate the AI path |

StopMovement
AI: Stops the movement
Triggers event [MoveCompleted](Pawn#movecompleted)
my_hpawn:StopMovement()

GetPlayer
Gets the possessing Player
local ret = my_hpawn:GetPlayer()

GetControlRotation
Gets the Control Rotation
— Returns Rotator.
local ret = my_hpawn:GetControlRotation()

HideBone
Hides a bone of this Pawn.
Check Bone Names List
my_hpawn:HideBone(bone_name?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | bone_name? | | Bone to hide |

UnHideBone
UnHide a bone of this Pawn.
Check Bone Names List
my_hpawn:UnHideBone(bone_name)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | bone_name | Bone to unhide |

IsBoneHidden
Gets if a bone is hidden
— Returns boolean (if the bone is hidden).
local ret = my_hpawn:IsBoneHidden(bone_name)
| Type | Parameter | Default | Description |
|---|---|---|---|
| string | bone_name | Bone to check |

Jump
Triggers this Pawn to jump
my_hpawn:Jump()

SetJumpZVelocity
Sets the velocity of the jump
my_hpawn:SetJumpZVelocity(velocity)
| Type | Parameter | Default | Description |
|---|---|---|---|
| integer | velocity | Default is 450 |

SetMaxAcceleration
Sets the max acceleration
my_hpawn:SetMaxAcceleration(acceleration)
| Type | Parameter | Default | Description |
|---|---|---|---|
| integer | acceleration | Default is 2048 |

SetCapsuleSize
Sets this Pawn's Capsule size (will affect Camera location and Pawn's collision)
my_hpawn:SetCapsuleSize(radius, half_height)

SetCanJump
Sets if this Pawn is allowed to Jump
my_hpawn:SetCanJump(can_jump)
| Type | Parameter | Default | Description |
|---|---|---|---|
| boolean | can_jump |

SetCanCrouch
Sets if this Pawn is allowed to Crouch and to Prone
my_hpawn:SetCanCrouch(can_crouch)
| Type | Parameter | Default | Description |
|---|---|---|---|
| boolean | can_crouch |

SetBrakingSettings
Sets the Movement Braking Settings of this Pawn
my_hpawn:SetBrakingSettings(ground_friction?, braking_friction_factor?, braking_walking?, braking_flying?, braking_swimming?, braking_falling?)
| Type | Parameter | Default | Description |
|---|---|---|---|
| float | ground_friction? | 2 | |
| float | braking_friction_factor? | 2 | |
| integer | braking_walking? | 96 | |
| integer | braking_flying? | 3000 | |
| integer | braking_swimming? | 10 | |
| integer | braking_falling? | 0 |

SetSpringArmSettings
Sets the Spring Arm Settings of this Pawn
my_hpawn:SetSpringArmSettings(relative_location, target_arm_length, socket_offset, enable_camera_lag, camera_lag_speed)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Vector | relative_location | ||
| float | target_arm_length | ||
| Vector | socket_offset | ||
| boolean | enable_camera_lag | ||
| float | camera_lag_speed |

SetRotationSettings
Sets the Rotation Settings of this Pawn
my_hpawn:SetRotationSettings(rotation_rate, use_controller_desired_rotation, orient_rotation_to_movement)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Rotator | rotation_rate | ||
| boolean | use_controller_desired_rotation | ||
| boolean | orient_rotation_to_movement |

SetSpeedSettings
Sets the Speed Settings of this Pawn
my_hpawn:SetSpeedSettings(max_walk_speed, max_walk_speed_crouched)

SetPawnSettings
Sets the Pawn Settings of this Pawn
my_hpawn:SetPawnSettings(use_controller_rotation_pitch, use_controller_rotation_yaw, use_controller_rotation_roll)
| Type | Parameter | Default | Description |
|---|---|---|---|
| boolean | use_controller_rotation_pitch | ||
| boolean | use_controller_rotation_yaw | ||
| boolean | use_controller_rotation_roll |

SetAnimationBlueprint
Sets the Animation Blueprint of this Pawn
my_hpawn:SetAnimationBlueprint(custom_animation_blueprint)
| Type | Parameter | Default | Description |
|---|---|---|---|
| Blueprint Reference | custom_animation_blueprint |
Events
Inherited Entity Events
| Name | Description | |
|---|---|---|
![]() | Spawn | Triggered when an Entity is spawned/created |
![]() | Destroy | Triggered when an Entity is destroyed |
![]() | ValueChange | Triggered when an Entity has a value changed with :SetValue() |
![]() | ClassRegister | Triggered when a new Class is registered with the Inheriting System |
Inherited Actor Events
| Name | Description | |
|---|---|---|
![]() | Spawn | Triggered when an Entity is spawned/created |
![]() | Destroy | Triggered when an Entity is destroyed |
![]() | ValueChange | Triggered when an Entity has a value changed with :SetValue() |
![]() | ClassRegister | Triggered when a new Class is registered with the Inheriting System |
Inherited Damageable Events
| Name | Description | |
|---|---|---|
![]() | Spawn | Triggered when an Entity is spawned/created |
![]() | Destroy | Triggered when an Entity is destroyed |
![]() | ValueChange | Triggered when an Entity has a value changed with :SetValue() |
![]() | ClassRegister | Triggered when a new Class is registered with the Inheriting System |

Possess
When Pawn is possessed
HPawn.Subscribe("Possess", function(self, possesser)
-- Possess was called
end)

UnPossess
When Pawn is unpossessed
HPawn.Subscribe("UnPossess", function(self, old_possesser)
-- UnPossess was called
end)
