У меня есть одна идея. Построим несколько конечных автоматов. Для каждой реплики задаются:
— автомат (ноль или один);
— набор состояний, в которых реплика видна (одно или несколько; имеет смысл, если автомат задан);
— куда автомат переключить;
— какие-то дополнительные условия, зависящие от игры (например, уровень интеллекта или разговора);
— ссылка на функцию-спецусловие (таковых должны быть пара десятков на весь большой Fallout).
Например, для четвёрки «Мордино/Сальваторе/Бишоп/Райт» состояний будет пять: ни с кем и с какой-то из семей. Тогда достаточно увидеть, что из Мордино нельзя перейти ни в какое другое, вот тебе и доказательство: ты член банды Мордино на всю жизнь. А если какая-то линия диалога включает спецусловия или два автомата одновременно — проверялка выведет сообщение: тут будь настороже.
У некоторых автоматов может быть одно или несколько «конечных» состояний — можно наладить иерархию автоматов. Автоматы верхнего уровня могут требовать, чтобы нижестоящие были в конечном состоянии, но не наоборот.