Если у вас есть конкретное действие, которое можно предпринять из всех возможных состояний, поступайте так же, как в математике: делайте это!
т.е.: 4 * 10 + 5 * 10 + 6 * 10 + 4 * 20 + 5 * 20 + 6 * 20 = (4 + 5 + 6) * (10 + 20)
То есть: ваш (забвение) NPC может спать, или на работе, или есть. Во всех трех случаях он должен реагировать на некоторые события (с ним можно поговорить, быть атакованным, ...). Постройте два FSM: Ежедневная активность = [спать, работать, есть]. Состояние реакции: {нетронутый, разговаривал, атакован, ...}. Затем переслать события только на второй FSM
И вы можете продолжать заниматься факторингом FSM, пока вы учитываете независимые вещи. Например, настроение NPC (счастливый, нейтральный, злой, ...) не зависит от его повседневной активности и состояния реакции. Я имею в виду «независимый» в том смысле, что «NPC может быть на работе, разговаривать и злиться, и нет никакого противоречия». Конечно, ФСМ влияют друг на друга, атакуемые NPC, как правило, злятся.
Таким образом, вы можете добавить третий FSM для состояния настроения вместо того, чтобы включать его в каждый узел