Wtf, т.е. у тебя два счётчика рекурсии?
У функции есть две с половиной тыщи способов, как она должна отработать (в огромном хеше лежат имена sub-ов, ага), но эти способы в трёх группах (полтыщи, тыща и ещё тыща; планируется добавление новых).
Если в «текущем» списке она не может найти действие – она переключается на следующий список действий (каждое из которых может рекурсивно её вызвать), и работает в нём.
До тех пор, пока не кончатся списки. Но когда она отработала все свои рекурсивные вызовы в момент переключения списка – она должна восстановить предыдущий список.