Перейти к содержимому

vladikcomper

Пользователи
  • Публикации

    947
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    8

Последний раз vladikcomper выиграл 3 января 2020

Публикации vladikcomper были самыми популярными!

Репутация

388 Любимец форума

О vladikcomper

  • Звание
    Повелитель Дизасемблов
  • День рождения 11.10.1994

Контакты

О себе

  • Пол
    Мужской
  • Из
    Россия, Тульская область

Посетители профиля

44 439 просмотров профиля
  1. Дамы и господа! А давайте сыграем в вечно актуальную игру, Найди 10 отличий! Как давно нам не доводилось играть в эту игру, не правда ли? Но случай просто обязывает. Я даже не поленился и убил полчаса на создание этой наглядной сравнительной таблички, чтобы вам было проще искать отличия. Это было не так уж сложно.
  2. Дополнительный слой заднего плана -- лишь небольшой графический трюк; слой имитируется отрисовкой в нужных местах тайлов, которые анимируется вместе с движением камеры, создавая эффект "окна" в различных местах заднего плана, через которое можно увидеть якобы более удаленные его участки. Анимация тайлов сделана так, чтобы создавать эффект скроллинга вместе с движением камеры -- графика внутри тайлов "прокручивается", тайлы переходят друг в друга, создавая эффект цельного, непрерывного плана. Этот эффект довольно несложно запрограммировать, есть даже несправедливо забытый гид на эту тему: https://forums.sonicretro.org/index.php?showtopic=24664 (к сожалению, картинки в нем не пощадило время)
  3. Вах, какой красивый тайтл скрин!

    1. TheBlad768

      TheBlad768

      Спасибо :)

  4. Должен сказать, я сильно разочарован и недоволен. И даже не качеством финального продукта, уровень которого стал для меня вполне очевидно вырисовываться в последние месяцы перед релизом, за тоннами пустых обещаний со стороны автора хака; теперь он очевиден и всем здесь собравшимся, -- впрочем, все это досканально описано здесь и до меня. Нет, я хотел бы рассказать не об этом. А о том, что стояло за разработкой этого хака, некоторых неприятных событий и манипуляций, невольным свидетелем которых я стал. Я хочу восстановить справедливость и развеять всю пыль, что автор пускал в глаза не только публике, но и самим членам команды. Дело в том, что автор хака как в процессе разработки, так и после релиза пытался выставлять некоторые детали в ложном свете, либо аккуратно умалчивать или искажать их. Создается ощущение, что автор хака преднамеренно пытается выставить чужие достижения за свои, а если точнее, создать соотвествующее впечатление у публики, показывая ей чужую работу в сосбтвенном хаке от своего имени, притом не указывая реальных людей, которые эту работу проделали. И что вы, он ни в коем случае не украл и не присвоил их работу себе! Он просто аккуратно не уточнил главные детали, не указал имена. К сожалению, возникает чувство, что автора хака интересует не самореализация и стремление создать качественный продукт, а тщеславие и признание за чужой счет -- типичная черта людей, готовых пойти на любые ухищрения, лишь бы казаться лучше и умнее, чем они есть на самом деле. Более того, на мой взгляд, автор тем самым проявляет полное неуважение к работе других людей, которые альтруистично согласились тратить собственное свободное время на помощь его хаку, чтобы потом автор фактически отрицал их причастность, либо как минимум наплевательски не упоминал тот большой объем работ, который они проделали. Поэтому я считаю нужным восстановить справедливость и отметить имена тех замечательных ребят, которые действительно внесли немалый вклад: Экран SEGA -- запрограммировал VladislavSavvateev Экран LadegoTeam -- запрограммировал VladislavSavvateev Sound Test -- запрограммировал VladislavSavvateev Level Select -- основную работу по программированию, скорее всего, проделал 7kub (этого я не смог точно установить, т.к. автор хака скрывает этот факт, а поговорить с предполагаемым программистом возможности нет) Экраны при переходах между актами и зонами -- запрограммировал VladislavSavvateev Босс SYZ (падающие блоки) -- запрограммировал TheBlad768 Босс SLZ (лазер) -- основную работу, скорее всего, проделал VladislavSavvateev Босс FZ -- запрограммировал я Расширенная звуковая система (драйвер SMPS/SWA последней версии) -- я А теперь попробуйте среди 4 тем, созданных автором хака, найти хоть одно малейшее упоминание соотвествующего человека, либо хоть одно мимолетное "спасибо" по пунктам, что я перечислил выше. Не пришлось ли вам до этого догадываться, кто и как был причастен к различным составляющим хака? А теперь мысленно вычтите все эти пунктики из хака и попробуйте оценить объем и качество работ, проделанных автором хака самолично. Сделайте соотвествующие выводы. Должен также добавить, что во всех небольших программных изменениях, что автор хака пытался сделать самостоятельно (больших за ним, увы, не числится), насколько мне известно, его постоянно консультировал, а иногда буквально направлял VladislavSavvateev. Также некоторую мелкую помощь оказывал я, и возможно, TheBlad768. Более того, представленный выше список даже не претендует на полноту. Вы не поверите, но мне пришлось буквально распрашивать некоторых из этих скромных и самоотверженных ребят, собирать информацию по частям, потому что автор хака постоянно недоговаривал, скрывал детали даже от собственных членов команды, и фактически обманывал их. * * * К своему стыду должен признать, что автор на первых порах обманул и меня, предоставив некоторые из вышеуказанных работ как свои собственные достижения, зарекоммендовав себя как перспективного и развивающегося программиста. Знай я некоторые детали раньше, ни за что бы не согласился помогать этому проекту. Впрочем, моя помощь была не очень велика: когда, скрипя сердцем, дописал и отдал хаку финального босса, сдержав данное давно обещание, я практически не оказывал хаку поддержки. Позже до меня дошли слухи, что автор даже финального босса, что я написал, пытался в одной приватной беседе выставить как свою собственную работу, когда тот еще был в разработке и его видели только члены команды. * * * Должен сказать, я жалею о том, что изначально согласился создать одного босса для данного хака. Я могу закрыть глаза на то, что автор хака нигде явным образом не уточнил, какую именно работу я проделал, но то, что он сделал в этом, самом последнем релизе, я счел непростительным. В последнем релизе автор нарушил функциональность моего финального босса и отказался от попыток исправить проблему. Ему удалось сломать то, что всегда верно работало во всех моих хаках и в некоторых других, для которых я писал подобных боссов. Он нарушил нормальную работу прокручивающейся камеры, в результате Соник теперь постоянно прилипает к левой границе экрана, а правая граница камеры неприятно сместилась, из-за прижаться к другому краю экрана невозможно. Как результат, вся битва с боссом из-за такого назойливого бага стала выглядеть неполноценной, забагованной и криво реализованной. Я был крайне недоволен положением вещей и потребовал исправить баг. И я думаю, вы поймете мой справедливый гнев, ведь на кону стоит качество моей работы. А я всегда стараюсь придерживаться высокой планки качества, не важно, для кого я выполняю эту работу -- я несу отвественность за качество конечного результата и внимательно слежу за тем, чтобы люди не испытывали проблем любыми составляющими хака или проекта, над которыми я работал. А здесь мою работу фактически заляпали, испортили, вероятно, внося правки, не имея на то достаточной компетенции. Все это стало известно за несколько дней до релиза и ситуацию можно было исправить. Несмотря на то, что это не было моей виной, я готов был полностью взять исправление бага на себя. Я даже уже примерно знал, какую именно процедуру хака автор мог испортить и как все это исправить. Дело на 15 минут. Но автор хакап после недолгих обсуждений отказался от попыток выяснить проблему и не оказывал нужного содействия. Как выяснилось, ему стало лень лень искать причину и следовать моим указаниям. И то, что он мне в итоге ответил, можно свести к трем простым словам: "И так сойдет" "И так сойдет!" -- вот девиз этого хака.
  5. Coming soon!~
  6. Огромное спасибо всем за поздравления :3 Влад, а твой подарок просто шикарен. Великолепная работа! Такого необычного подарка я и представить не мог! Спасибо тебе, S_T_D и Ivan_YO. Да, я учавствую, и немного удачи мне не помешает ;)
  7. Решил ненадолго вернуться в это прекрасное дело хакинга, чтобы вскоре порадовать вас своим небольшим проектом. О НЕТ! КОЕ-КТО СДЕЛАЕТ КОЕ-ТО ОЧЕНЬ НЕХОРОШЕЕ ЧЕРЕЗ МИНУТУ!
  8. Почистил "О себе"?

    1. vladikcomper

      vladikcomper

      Лучше хуже, чем точно так же.

    2. VladislavSavvateev
  9. Все дело в тайлах. Ты значительно увеличил размер арт-файла после добавления большого количества новых тайлов. Когда этот арт будет загружен в видеопамять, он, естественно, займет значительно больше места, чем задумано, и начнет занимать те участки памяти, где он быть не обязан, а именно, маппинги плана А. Поэтому в начале уровня портится сам логотип: его тайлы, вышедшие за дозволенные им рамки, перепишет план А, а в конце уровня -- сам План А, т.к. его в этот раз перепишут тайлы логотипа, поскольку они в этом случае загружаются позднее. За подробностями почитай этот пост. У тебя такая же проблема. http://sonic-world.ru/forum/topic/16333-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-%D0%BF%D0%BE-%D1%80%D0%BE%D0%BC%D1%85%D0%B0%D0%BA%D0%B8%D0%BD%D0%B3%D1%83/page-49?do=findComment&comment=252896132
  10. Одна из самых распространенных проблем с самым простым решением. За все время она поднималась огромное количество раз. Только в этой теме как минимум десяток. http://sonic-world.ru/forum/topic/16333-помощь-по-ромхакингу/?p=252358280
  11. В Соник 1 кадр спрайтовых маппингов (sprite mappings frame) имеет следующий формат: Первый байт указывает количество кусочков, из которых состоит целый спрайт (pieces в терминологии SonMapEd), считая с $01. Значение $00 указывает, что кадр пустой и не содержит в себе никаких кусочков. Далее расположены данные самих кусочков -- структуры из 5 байт, имеющие следующий формат: dc.b $YY, %WWHH, $TT, $TT, $XX Для удобства я представил уже готовую запись с указанием форматов полей. Символ $ указывает, что значение имеет шестнадцатеричное представление (hex, hexadecimal). Символ % указывает, что значение имеет двоичное представление (bin, binary). В таком преставлении удобнее задавать битовые поля, которые используются в некоторых байтах структуры. В действительности, не имеет значения, в каком представлении записаны данные, программист сам выбирает наиболее удобное ему представление для конкретного случая. Поля $XX и $YY представляют собой смещение кусочка относительно центра спрайта (центральной точки) в пикселях. Все спрайты в игре обычно центрируются, т.е. X и Y координаты объекта обычно привязаны к центру спрайта. Получается это благодаря тому, что кусочкам задают такие смещения, чтобы они располагались строго вокруг центральной точки (точки отсчета, координат объекта). Поле %WWHH кодирует ширину и высоту кусочка согласно внутреннему формату спрайтов VDP. Биты WW и HH могут принимать следующие значения: 00 -- 8 пикселей 01 -- 16 пикселей 10 -- 24 пикселя 11 -- 32 пикселя Например, чтобы если необходимо задать кусочек размером 16х24 пикселя, то WW=01, HH=10. Получаем: %0110 Поле $TT TT как видно, занимает 2 байта. В этом поле указывается индекс стартового тайла для кусочка относительно арт-поинтера (слова $02 структуры объекта, которое задает начало тайлов объекта в видеопамяти). Замечу, что в этом поле еще есть дополнительные биты, которые часто не используются и остаются нулевыми. Чтобы рассмотреть формат этого поля более подробно, представлю его побитовую запись: %PCCXYTTT TTTTTTTT Бит X -- флаг отражения по оси X (0 -- нет, 1 -- отражение по горизонтали). Бит Y -- флаг отражения по оси Y (0 -- нет, 1 -- отражение по вертикали). Биты CC -- строка палитры, которую использует спрайт (00 -- первая, 01 -- вторая, 10 -- третья, 11 -- четвертая). Строку палитры обычно задают через арт-поинтер. Бит P -- флаг приоритета. Если задан, спрайт будет отображен поверх всех (подобно HUD). Пример прямоугольника 24х40: dc.b $02 dc.b $EC, %1011, $00, $00, $F4 dc.b $0C, %1000, $00, $0C, $F4 Простой и весьма очевидный ответ -- нужно отображать дополнительные спрайты, которые копируют спрайты Соника в тех местах, где объект Соника находился мгновения назад. Движок игры спроектирован так, что определенный спрайт отображается определенным объектом. Понятия спрайт и объект неразрывно связаны в Соник 1 и сиквелах, включая даже Соник 3, в котором движок был значительно переделан. Поэтому в дизасембле Sonic & Knuckles объекты во многих местах названы спрайтами. Можно сказать, объект представляет собой спрайт, его координаты, состояние, анимацию и так далее. Из этого следует продолжение ответа на твой вопрос -- чтобы отображать дополнительные спрайты, нужно загружать дополнительные объекты -- ровно столько, сколько спрайтов еще нужно отобразить. Самым разумным решением будет создать новый объект для отображения предыдущих положений Соника. Узнать сами положения Соника не представляется большой проблемой -- игра все время ведет специальный массив предыдущих положений Соника, который используется объектом Invincibility stars. Массив хранится в области памяти $CB00-$CBFF. Переменная типа word по адресу памяти $F7A8 указывает на текущий элемент массива. Для загрузки предыдущих положений достаточно узнать текущий элемент массива и загрузить выборочно элементы, предст шествующие текущему. За примерами реализаций этих задач можно обратиться к тому самому объекту Invincibility stars.
  12. Помню мой старый мини-гид прямиком из одного поста в теме "Ваши хаки" пятилетней давности. Реализация максимально проста, оттого и чувствительна к разного рода ошибкам. Палитра третьего акта может сбиться после неудачного обновления палитры второго акта, потому что ее местоположение напрямую зависит от прошлых палитр. После следования гиду для GHZ у тебя должно получиться: Pal_GHZ: incbin pallet\ghz1.bin incbin pallet\ghz2.bin incbin pallet\ghz3.bin Важно, чтобы все файлы присутствовали и были корректного размера. Палитра уровня должна состоять из 48 цветов (3 строки палитры по 16 цветов, первая строка, содержащая палитру Соника, общая для всех уровней), т.е. размер каждого из файлов (ghz1.bin, ghz2.bin, ...) должен быть ровно 96 байт. В противном случае, данные окажутся смещены и палитра для нужного акта попросту не окажется на том месте, где этого ожидает игра. Если все файлы палитры были скопированы и включены правильно, остается только один вариант: содержимое какого-то из файлов было нарушено и он содержит больше или меньше строк палитры, чем должен. Если оценивать скриншот на глаз, создается впечатление, будто в загруженной палитре продублировалась палитра Соника (на второй строке), а все остальные строки сместились. Действительно, если насильственно продублировать первую строку палитры, сместив остальные, результат будет тот же:
  13. Проблема не в объекте "Press Start Button", он не может повлиять на координаты заднего и переднего плана (на переднем плане и отрисовывается основа титульного экрана). А вот что может, так это сам Соник, точнее его начальные координаты. Видишь ли, титульный экран по сути использует движок, на котором работают обычные уровни игры. Он частично загружает данные уровня GHZ1, что включает даже начальные позиции Соника -- именно поэтому если изменить начальные координаты Соника в GHZ1, титульник очень часто сбивается -- ведь там работает полноценная камера, которая работает и на обычных уровнях. Это пример очень плохого, ненадежного программирования, но такой подход был очень быстрым и количество кода сократилось до минимума -- в остальном используются те же общие процедуры, которые используются самими уровнями. Самый легкий способ исправить проблему - переместить Соника чуть выше на уровне GHZ1, тогда и камера при загрузке уровня (а титульник, как я уже и сказал, по сути частично загружает уровень GHZ1) будет расположена выше, так что титульный экран на переднем плане не сместится ниже положенного. Кто-то на SSRG или Sonic Retro предлагал довольно верное решение проблемы, но боюсь, я так и не смог найти этот пост: он потерялся со временем. В целом, достаточно лишь исправить позицию камеры, однако лично я не пробовал это, т.к. не было необходимости (в моих хаках титульные экраны я пишу с нуля), поэтому готового и рабочего решения предложить не могу.
  14. Боже, не стоит снова вспоминать и пытаться распространить здесь эту нечисть. Сайт с печальной репутацией, целиком состоящий из ворованного кода и его модификаций. Метод реализации Хомминг Аттаки был полностью слизан с утекшего исходного кода третьего Мегамикса. В англоязычных сообществах попытка использовать этот код нарушает негласный хакерский кодекс чести и карается пожизненным баном. Да и зачем нужен кривой и грязный Хомминг, когда в свободном доступе уже давно есть это: http://pastebin.com/A2n9n88Z Не знаю в чем дело, но при попытке открыть пресловутый сайт, моя система полностью провисла на несколько минут, а браузер висел еще минут 5, пока у меня не кончилось терпение, и я не решил его убить через диспетчер задач, но и тот на полминуты провис, пытаясь связаться с процессом. Но и это еще не все! Даже модем неожиданно для меня вырубило и он ушел в ребут по загадочным обстоятельствам. Никогда такого не было. В общем, система приходила в себя около 10 минут, которые длились вечность. Как одна простая ссылка на пресловутый сайт может вызвать столько невозможных проблем -- не укладывается в голове. Может дело действительно в нечисти?
  15. Огромное спасибо вам за поздравления и все теплые слова, ребята! =) Это действительно был лучший день рождения, который у меня был. Спасибо вам всем за то, что вы есть!
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×