I tied in the dragging functionality into events, and set it up so an npc will prevent you from passing a certain spot. Ended up fixing some bugs with the event system during the process, as well as creating an event that can be repeated (crossing the boundary will keep listening rather than ending like the events I've set up before).
I also am doing a lot of bad coding with assigning actions to the npcs. The boundary between code assigning actions, and the npc behavior logic itself is starting to feel a little wrong. Conversations have kind of their own way of interfacing with the behavior trees; and now events sort of work with it in a different way. I'm going to think of ways to unify that interface a little better; perhaps an action queue? Although relying on that too much can break down some of the decision making that can happen in the behavior tree itself.
Yep. I'm still messing with systems rather than building a game. What is wrong with me? I'm the furthest I've ever gotten in this process, which means I'm kind of in unexplored territory. Exciting. Uncomfortable.
Well, no more invincible enemies.
Only took an if(!_alive) return; call being added to every single function the AI uses.