Pull to refresh

Comments 5

Интересно, исправление этих моментов повлечет за собой исправление каких-либо техник спидранов на этом движке? :)

Смотря какой баг, и смотря изменится ли логика работы формулы после исправления или нет. Если изменится, значит, придётся сделать очередной флаг в compat.ini и добавить на отключение в режим совместимости, чтобы логика была такая же, какая и была.

Ух ты! Интересная статья!

Как-то раз я брал PVS Studio для работы над своими проектами, но так и не смог его нормально использовать (другие дела, а также трудности с интеграцией анализатора в среду Qt Creator при CMake-проекте), но очень хочется взять его на вооружение. Помню давным давно я брал Trial-версию на две недели (тогда ещё не было лицензии для OpenSource, и тогда мой проект был ещё на QMake), и я смог исправить несколько багов и выучить урок, который я дальше стал использовать уже в новом коде.

Что по ошибкам:

  • Фрагмент 1, 2, 4: в жизни бы не заметил, либо глаз и так замылился от стольких условий в ветках, и да, очередное подтверждение байки (которая давно уже ходит в сообществе SMBX), что Эндрю знатно выпивал, пока писал код игры.

  • Фрагмент 3: Если бы не мусор в старых уровнях, фикс бы выжил. Однако, я решил сделать альтернативый метод управления автопрокрутки, более совершенный и более удобный. У старого метода есть огромный недостаток - (при корректной работе кода) любое другое событие моментально собьёт автопрокрутку, потому что здесь нет различия того, включать или выключать автопрокрутку, и куда её вести. С новым методом есть чёткая галка, "назначить автопрокрутку", и по умолчанию галка снята, значит, на автопрокрутку влиять никак не нужно.

  • Фрагмент 5: Это уже мой косяк (удаление сохранений реализовал уже я в своём порте, в оригинале SMBX-игры не было такой возможности). При этом, очень серьёзный баг: из-за него, если попытаться удалить сохранение, зайдя в режиме двух игроков, пользователь будет заблокирован в меню, потому что логика его не выпустит из него никак.

  • Фрагмент 6, 7, 8: И снова Эндрю в своём репертуаре.

  • Фрагмент 9: Это суровые и грязные костыли, применяемые Эндрю в VB6, таким образом он решил "закомментировать" часть кода, просто выставив условие в ложь. По хорошему, здесь нужно выставить `#if 0 / #endif` на весь блок и не повторять сию дурь в новом коде. Там был код, который позволял в ранних версиях SMBX возродить второго игрока, пнув любой блок. Однако, потом Эндрю сделал так, что второй игрок просто спускается с небес и всё, этот код больше не нужен стал.

  • Фрагмент 10: уже и не помню, скопировал ли я код с VB6, или сам так по ошибке написал, оно верно.

  • Фрагмент 11: Эта логика отвечает за то, как часто будут повторно открываться блоки с монетками, если играть за Кинопио (за Тоада). Проверка whatPlayer безполезна, потому что whatPlayer всегда идёт от 1 до maxPlayers, и если выходит за пределы диапазона - срабатывает ловушка выхода за пределы диапазона Player (хотя Player[0] есть, по факту, не используется, либо как буфер). Поэтому, тут лучше поставить `IF_INRANGE(whatPlayer, 1, maxPlayers)`, чтобы проверка диапазодна была чёткой.

  • Фрагмент 12: И этот код тоже из оригинала:

  • Фрагмент 13: Это мой косяк, там я выуживаю размер изображения из JPEG-картинки, не декодируя её.

  • Фрагмент 14: Неисправленный косяк при переносе с VB6, всё потому что в VB6 любая логика всегда работает через побитовые операции.

  • Фрагмент 15: Очень давний баг, в этом модуле, мой.

  • Фрагмент 16: Эндрю таким убогим способом рассчитывал коллизии мышки со строчками меню, рассчитывая длину надписей. Я уже давно чищу код здесь, и в ближайшем будущем вообще собираюсь заменить код меню на новый, более практичный и универсальный, ибо с этим невозможно нормально работать, чтобы добавлять новые разделы и т.п...

Большую часть всего упомянутого исправил, благодарю за рецензию!

Спасибо и вам за такой интересный проект и развернутый ответ!
Sign up to leave a comment.