Как вариант:
Каждый квест - что-то вроде интеллектуального агента, то есть отдельный объект какого-нибудь класса Quest, который подписывается на нужные ему события или обрабатывается с определенной периодичностью, и, реагируя на события, сам меняет "квест", квестовые предметы, ключевых персонажей, их диалоги и т.п. в зависимости от целей, которые есть у этого агента-квеста. В идеале хорошо бы реализовать и "общение" таких объектов-квестов, чтобы они друг с другом "договаривались")), делись персонажами, объектами, диалогами, складывались в более сложные последовательности и проч))