Баги vs Тупизм

В начале субботний день не предвещал ничего плохого, решил я переписать код клиента чтобы разнести на различные уровни глубины различные объекты, чтобы преступить к отрисовки "пола".

Итак решено sm = w*h, значит
0...sm-1 - пол
sm..sm+100 - для эффектов (например для отрисовки пути)
2*sm+101 .. 3*sm+100 - объекты (стены и т.п.)
3*sm+101 - hero (и другие существа)
4*sm+101 5*sm+102 - фон закрытой территории.

Ну понятно что "пол" должен быть с самого низу, затем эффекты (т.к. объекты могут закрывать их), затем персонажи, а самый сверху - фон, т.к. он сделан чуть больше чем остальные спрайты (не 64x64), и может "наезжать" на объекты.

Сделал - запускаю - ничего, вообще - кое-как отрисовались объекты, героя и "дна" - нет. Нашел первую ошибку - я рисовал дно в функции drawMap, а там был большой if map[off] !=0 т.е. если объектов нет то дно не рисовалась, а если рисовалось то под объектами. Исправил.
Дно есть - игрока нет. Посмотрел код раз 10 и очевидно в попыхах что-то нажал, запускаю - вообще какая-то лажа нет ничего, причем даже из Flash запущено показывает окно игры, а не страничку ошибки (там переход если mazeid не определена) - открываю код и смотрю, что я каким-то макаром удалил объект engine на котором привязаны скрипты.
Ну и сохранил для верности пару раз. Бэкапов нет. Вешатся из-за двух месяцев потерянного времени не хотелось, поэтому пошел за пивом.

Пока ходил - проветрился, нашел в кэше IE (я там регулярно тестю, не только в Oper'е) SWF декомпилировал и стал подбирать названия к локальным переменным (глобальные сохранили имена, а локальные, стали называтся _locX.
Ну ничего за 20 минут восстановил, сделал автоматический съем с каталога бэкапа.

Вообще стартовая загрузка меня не устраивала (очень медленно было), но разбираться было лень, а тут такое потрясение (и пиво), я стал смотреть код. В функции playAction - которая проигрывает действия - нашел идиотскую ошибку, алгоритм функции - проиграть одно событие и установить таймер на запуск следующего (сделано например для будущей анимации хода). А после этого событие должно удалится из стэка. Оно и удалялось, но почему-то actions.pop();.
Ступил, не иначе. Заменил на actions.shift(); и поперло.