Начал с ловушки нажатия клавиши огонь. Обнаружил, что зачем-то оно вызывается 2 раза, когда можно просто сохранить результат первого в стеке. Поправил, зачем лишнее время тратить.
Потом разбирал что делается при выстреле лазером, я-то наивный думал, что делается такая себе пуля, только длинная. Но нет, делается короткая пуля. Но эта короткая лазерная пуля помнит где она появилась, и 8 циклов делает в этом месте ещё по одной лазерной пуле, которые уже новых пуль не рождают.
Поэтому без разницы что будет с Рексом после выстрела, он может уйти, упасть и отвернуться, лазерный луч будет продолжать выходить из одной и той же точки. Но если лидирующая пуля попадёт во что нибудь, или покинет экран, то генерация луча тут-же прервётся. Поэтому стрелять лазером в упор не так эффективно. Если лазерная пуля лидер успеет создать побольше хвостовых пуль, то все они более массово вопьются в цель.
В общей куче, каждая пуля занимает 15 байт. Последний байтик, как раз, и хранит, сколько циклов осталось пуле лететь. А оно инициализируется из ячейки A068. А эта ячейка пишется.. в процедуре увеличения уровня оружия, которую я уже разбирал. И я вернулся туда, где уже был. Если бы я тогда потрудился узнать, где значение A068 используется, то уже бы наладил лазер, продолжая думать, что лазерный луч - одна длинная пуля. :)
Ячейка A068, конечно писалась, но только когда уровень оружия повышался. А когда уровень оружия понижался - нет, и когда оружие
полностью прокачивалось, и начиналось качаться следующее - тоже нет. Как будто не туда эту формулу влепили, или продублировать забыли.
Переставил так, чтобы ячейка A068 всегда соответствовала уровню оружия из которого стреляем.
[свернуть]