• Studio

  • Studio API

  • Bots

  • Web API

  • Designer Resources

  • Host Resources

  • Globals

    CollabEmoteController

    CollabEmoteController is a module script that manages collaborative emote sessions in Highrise Studio. It handles initiating collab emotes, joining sessions, position calculation, movement coordination, and provides events for session lifecycle. Supports friends-only sessions and custom position/movement handlers. This is a module script that can be required in your Lua code.

    Properties

    ArrivalDetected

    ClientAndServer

    Event that fires when the local player arrives at the join position. Client only. Passes the initiator Player as argument.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.ArrivalDetected:Connect(function(initiator)
        print("Arrived at join position")
    end)
    

    Public event fired when a movement destination is requested. Passes the target Vector3 position.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.MovementDestinationRequest:Connect(function(position)
        print("Moving to: " .. tostring(position))
    end)
    

    Event that fires when the local player's movement to join position is interrupted. Client only. Passes the initiator Player as argument.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.MovementInterrupted:Connect(function(initiator)
        print("Movement interrupted for session by: " .. tostring(initiator))
    end)
    

    Public event fired when a movement stop is requested.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.MovementStoppedRequest:Connect(function()
        print("Movement stopped")
    end)
    

    PlayerJoined

    ClientAndServer

    Event that fires when a player joins a collab emote session. Client only.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.PlayerJoined:Connect(function(session)
        print("Player joined session")
    end)
    

    SessionEnded

    ClientAndServer

    Event that fires when a collab emote session ends. Client only.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.SessionEnded:Connect(function(session)
        print("Session ended")
    end)
    

    SessionStarted

    ClientAndServer

    Event that fires when a collab emote session starts. Client only.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.SessionStarted:Connect(function(session)
        print("Session started by: " .. tostring(session.initiator))
    end)
    

    Methods

    CancelReason

    ClientAndServer
    NoSelfParameter

    Enumeration of reasons a collab emote session can be cancelled.

    • HostMoved (0): The host moved
    • JoinerMoved (1): The joiner moved
    • HostStopped (2): The host stopped the emote
    • HostLeft (3): The host left the session
    • EmoteEnded (4): The emote ended naturally
    local CollabEmoteController = require("CollabEmoteController")
    if reason == CollabEmoteController.CancelReason.HostMoved then
        print("Host moved, session cancelled")
    end
    

    Returns

    any[]

    ErrorType

    ClientAndServer
    NoSelfParameter

    Enumeration of error types that can occur during collab emote operations.

    • None (0): No error
    • SystemDisabled (1): Collab emotes system is disabled
    • PlayerAlreadyInSession (2): Player is already in a session
    • PlayerNotFound (3): Player not found
    • CannotJoinOwnEmote (4): Cannot join your own emote
    • SessionNotFound (5): Session not found
    • SessionFull (6): Session is full
    • NoValidPath (7): No valid path to join position
    • NotAllowedToEndSession (8): Not allowed to end this session
    • InitiatorNotFound (9): Initiator not found
    • JoinerNotFound (10): Joiner not found
    • JoinerBlocked (11): Player is blocked by the initiator
    • NoValidJoinPosition (12): Move to an area with more space
    local CollabEmoteController = require("CollabEmoteController")
    if errorType == CollabEmoteController.ErrorType.SessionFull then
        print("Session is full")
    end
    

    Returns

    any[]

    GetDistanceScaleForPlayer

    ClientAndServer
    NoSelfParameter

    Returns the distance scale multiplier for a player based on their humanoid-size item. Returns 1.0 if the player has no size item.

    local CollabEmoteController = require("CollabEmoteController")
    local scale = CollabEmoteController.GetDistanceScaleForPlayer(player)
    print("Distance scale: " .. tostring(scale))
    

    Parameters

    player

    Returns

    number

    GetErrorMessage

    ClientAndServer
    NoSelfParameter

    Returns a human-readable error message for the given error type.

    local CollabEmoteController = require("CollabEmoteController")
    local msg = CollabEmoteController.GetErrorMessage(CollabEmoteController.ErrorType.SessionFull)
    print(msg) -- "Session is full"
    

    Parameters

    errorType
    number

    Returns

    string

    GetNormalizedTime

    ClientAndServer
    NoSelfParameter

    Returns the normalized playback time (0-1) of an emote given its start time and duration. Returns nil if startTime is nil or duration is zero or negative.

    local CollabEmoteController = require("CollabEmoteController")
    local t = CollabEmoteController.GetNormalizedTime(startTime, duration)
    if t then
        print("Playback progress: " .. tostring(t))
    end
    

    Parameters

    startTime
    number
    duration
    number

    Returns

    number

    IsEnabled

    ClientAndServer
    NoSelfParameter

    Returns whether the collab emotes system is currently enabled.

    local CollabEmoteController = require("CollabEmoteController")
    if CollabEmoteController.IsEnabled() then
        print("Collab emotes are enabled")
    end
    

    Returns

    boolean

    PlayerMoveState

    ClientAndServer
    NoSelfParameter

    Enumeration of player movement states during a collab emote session.

    • Moving (0): Player is moving toward the join position
    • Arrived (1): Player has arrived at the join position
    • Emoting (2): Player is playing the emote
    local CollabEmoteController = require("CollabEmoteController")
    if state == CollabEmoteController.PlayerMoveState.Arrived then
        print("Player arrived")
    end
    

    Returns

    any[]

    RegisterMoveHandler

    ClientAndServer
    NoSelfParameter

    Registers a custom movement handler that overrides the default NavMeshAgent-based movement. The handler receives the player, target position, and optionally the initiator, and returns true if handled.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.RegisterMoveHandler(function(player, position, initiator)
        -- Custom movement logic
        return true
    end)
    

    Parameters

    handler
    (player: Player, position: Vector3, initiator: Player) -> (boolean)

    Returns

    void

    RegisterPositionHandler

    ClientAndServer
    NoSelfParameter

    Registers a custom position handler that overrides the default join position calculation. The handler receives the initiator, emote data, position index, and optionally the joiner.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.RegisterPositionHandler(function(initiator, emoteData, positionIndex, joiner)
        -- Custom position calculation
        return Vector3.new(0, 0, 0)
    end)
    

    Parameters

    handler
    (initiator: Player, emoteData: any, positionIndex: number, joiner: Player) -> (Vector3)

    Returns

    void

    RegisterServerFacingValidator

    ClientAndServer
    NoSelfParameter

    Registers a server-side facing validator that checks for valid join positions and rotates the character to face a direction with available space. The handler receives a Player and emote data, returns true if valid.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.RegisterServerFacingValidator(function(player, emoteData)
        return true
    end)
    

    Parameters

    handler
    (player: Player, emoteData: any) -> (boolean)

    Returns

    void

    RegisterServerPositionHandler

    ClientAndServer
    NoSelfParameter

    Registers a server-side position handler that calculates join positions using platform-specific logic (e.g., NavGrid).

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.RegisterServerPositionHandler(function(initiator, emoteData, positionIndex, joiner)
        return Vector3.new(0, 0, 0)
    end)
    

    Parameters

    handler
    (initiator: Player, emoteData: any, positionIndex: number, joiner: Player) -> (Vector3)

    Returns

    void

    RequestMove

    ClientAndServer
    NoSelfParameter

    Requests a player to move to a target position. Uses the custom move handler if registered, otherwise falls back to NavMeshAgent-based movement. Returns true if the move was successfully initiated.

    local CollabEmoteController = require("CollabEmoteController")
    local success = CollabEmoteController.RequestMove(player, targetPosition, initiator)
    if success then
        print("Moving to position")
    end
    

    Parameters

    player
    position
    initiator

    Returns

    boolean

    StopCollabEmoteOnLocalPlayer

    ClientAndServer
    NoSelfParameter

    Stops any active collab emote on the local player.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.StopCollabEmoteOnLocalPlayer()
    

    Returns

    void

    UnregisterMoveHandler

    ClientAndServer
    NoSelfParameter

    Unregisters the custom movement handler, reverting to default movement behavior.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.UnregisterMoveHandler()
    

    Returns

    void

    UnregisterPositionHandler

    ClientAndServer
    NoSelfParameter

    Unregisters the custom position handler, reverting to default position calculation.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.UnregisterPositionHandler()
    

    Returns

    void

    UnregisterServerFacingValidator

    ClientAndServer
    NoSelfParameter

    Unregisters the server-side facing validator.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.UnregisterServerFacingValidator()
    

    Returns

    void

    UnregisterServerPositionHandler

    ClientAndServer
    NoSelfParameter

    Unregisters the server-side position handler.

    local CollabEmoteController = require("CollabEmoteController")
    CollabEmoteController.UnregisterServerPositionHandler()
    

    Returns

    void
    PocketWorlds Icon

    © 2026 Pocket Worlds. All rights reserved.