I guess there are a few benefits from your code - for instance dynamic action-strings. That is "strings-of-actions", so say you may or may not have a 'follower'. At one point that 'follower' executes an action only if he's with you in that spot. Then subsequent objects may also action off (right now I have a vision of a nuclear fusion/explosion). Alot easier to code (if you get the interface right) than trying to code in an exhaustive amount it if/then/else's
The only thing is it may make it a little less-clear when it comes to understanding bigger storylines. You may have an obscure object-action which is declaired in the first object of the game - which might not be used until halfway through. This is all well and good if you remember - but try a few months down the line concentrating on another project and little commenting - you'll need to scour your code for sequences-off-sequences.
Only problem then becomes that instead of an external object detecting that a 'follower' object has entered the room - and acting accordingly - you need to somehow have the follower detect an external object.
The only thing is when it comes to looking back over your code trying to debug it etc, when you have about 4 different streams/chains all at once. You find yourself dodging from code-window to code-window, trying to understand what is calling what.
So those ten puppies emitted a total of twenty actions in one move.
for each object in <#EmitQueueLocale[1]#> {
if action <#quest.thing#; Responses> then {
if property <#quest.thing#; Responsive> then {
if ( #quest.thing# <> PC ) then {
do <Call(#EmitQueueOrigin[1]#;#EmitQueueAction[1]#;#quest.thing#;Responses)>
}
}
}
}