Skip to content

NPC TalkKitPlay conversations like you play animations

Add one node, write in the dedicated TalkKit workspace, call play(). Your player controller, quests and saves keep working exactly as before.

The whole integration ​

gdscript
$NPCTalkKit.play(&"greeting", {"player_name": "Alex"})

Opt into as much coupling as you want, and no more:

gdscript
$NPCTalkKit.request_player_lock.connect(set_player_locked)
$NPCTalkKit.event_triggered.connect(handle_talk_event)

No autoload. No base class. No change to the architecture you already have.

Player choice, in five lines ​

gdscript
func _on_blocked(event_id: StringName, payload: Variant) -> void:
    var accepted: bool = await choice_ui.ask(payload["options"])
    $NPCTalkKit.play(&"quest_accepted" if accepted else &"quest_declined")

There is no condition language here because your game already has one. How branching works →

GDScript-first. No telemetry, no network requests, no AI service dependency in the shipped addon.