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

vladikcomper

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

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

  • Посещение

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

    8

Все публикации пользователя vladikcomper

  1. Классный обзор, правда его лайв стрим был живее и эмоциональнее =) Была.
  2. Боже мой, неужели я застал этот светлый день? Неужели это случилось? Я сначала не поверил своим глазам, скриншоты просто сияли своей красотой. Я протер глаза, а они стали еще красивее. Я скачал хак, а он оказался сногсшибательно крут! Вышел по-настоящему крутой русский хак! Не перевелись еще у нас хорошие хакеры! *прослезился* Изменения объектов, новый режим, новая система меню, новые способности (действительно новые и своеобразные), новый босс, новый код деформации фонов, новый HUD, два языка, новые Title Cards - просто голова кружится от всех этих ништяков. Я знаю, многие из них требуют очень хороших знаний ассемблера и умения программировать, за что хочется бесконечно хвалить автора и его достижения и выразить благодарность за сей великолепный хак, который к тому же доставил мне удовольствие в процессе игры, хотя бы своей выдающейся крутизной. Такого количества программных изменений я еще не видел ни в русском одном хаке, и, если честно, надежда уже покидала меня. Изменения арта довольно хороши, особенно понравилась зона MZ. Что касается самих уровней, у них весьма и весьма хороший дизайн с интересными находками. Можно, конечно, усмотреть пару шороховатостей, но они совершенно незначительные. В целом все в этом хаке сделано аккуратно и старательно. Босс. Он чрезмерно сложен, пока не откроешь для себя нужную тактику, и не начнешь хорошо рассчитывать время прыжков и правильно приземляться. Немного удручает то, что игроку почти не дается право на ошибку - стоит уничтожить всего два блока, не ударив босса, и смерть гарантирована. Я думаю, сильно помогло бы, если бы Соник не сворачивался в клубок, когда запрыгивает с нижних блоков на верхние, или хотя бы была кнопка, которая позволяет ему выйти из состояния клубка (например, можно добавить способность двойного прыжка, и чтобы Соник разворачивался при этой способности, к тому же с ней он может потерять кольца, если подлетит в таком прыжке к боссу. Добавляет азарта, но в то же время делает босса менее сложным). Еще одна идея - можно сделать так, чтобы Эггман кидал блоки из Эггмобиля на место уже уничтоженных. Если Соник окажется под блоком, его придавит. Также добавляет азарта, но делает босса проще. Еще было бы неплохо добавить в хак новой музыки. Оригинальная музыка, конечно, хороша. Но мы все это слышали уже тысячу раз. Продолжай. Не останавливайся. Хакай. Прошу.
  3. Спасибо за столь теплые слова =) Это случилось давно, когда я разрабатывал новый HUD и его динамически подгружаемые значки. Для него были заготовлены несколько различных иконок (которые будут использоваться в игровом процессе, увидите как), но потом выяснялось, что про значок Соника я забыл, а доставать его тайлы из старых артов и пересжимать мне тогда было лень, так что решил временно сделать ему уже готовый значок ХХХ. Потом оставил ради забавы. В финальном релизе скорее всего уберу, если не забуду =Р А так, это милая отсылка к главной плюшке старого SQWA.
  4. Sonic Mega fan-game: Ultra Edition (= Отличный пример игры с интересной идеей, на которую интересно посмотреть. После первой части вторая была особо впечатляющей и атмосферной.
  5. Меня часто спрашивали про судьбу этого хака. Уже чуть более года о проекте не было никаких новостей. После последних новостей о хаке, которые датируются примерно концом 2011 года, хак переживал не лучшие времена. По ряду обстоятельств я не мог больше работать над хаком. Еще некоторое время я пытался как-то продолжать разработки, продвигаясь миллиметровыми шагами. Но вскоре разработка хака была окончательно остановлена. И теперь, я должен официально заявить, после такого долгого застоя... SONIC WINTER ADVENTURES ВОЗВРАЩАЕТСЯ! Так как многим людям оказался небезразличен этот хак, и меня на протяжении долгого времени спрашивали о его судьбе, я принял решение воскресить SWA и приостановить свои текущие проекты. Новый виток разработки ведется уже пару месяцев и ведется ударными темпами (по мере появления у меня свободного времени). Все направлено на скорый выпуск новой демки, так как вы наверное уже заждались после этих всех лет =) Рад сообщить, что большая часть работы уже сделана, и релиз планируется довольно скоро. В знак того, что проект жив, прилагаю несколько скриншотов: Я не хочу раскрывать все карты, так что большая часть всего самого интересного останется тайной до самого релиза. Касаемо даты релиза ничего прогнозировать не буду - неизвестно, как сложится жизнь, или какие возникнут сложности. Возможно, перед релизом я покажу еще кое-что из хака. Буду держать вас в курсе.
  6. http://repo.sonicretro.org/MegaDrive-Genesis-32X/skdisasm_hg/archive/default.zip
  7. Сетка на тулвище Соника означает, что этот вот кусок используется несколькими спрайтами (для сохранения места в РОМе) и изменение его автоматически приводит к изменению других спрайтов. Пропадающая голова Соника свидетельствует о нестабильности хакинга устаревшими программами, а именно - редактирование РОМа. Такое может случиться в сочетании с некоторыми правками ESEII или просто потому что-то ляпнула сама старая программа - причин множество. Я бы посоветовал использовать новые надежные программы и работать с дизасемблами. Там все и понятнее, и проще разобраться со спрайтами и возможностей для редактирования намного больше. Ты можешь скачать S1 Hacking Studio - http://forum.sonic-world.ru/topic/14207-s1-hacking-studio/page__st__350__p__252376427#entry252376427 Она включает дизасембл и нужную тебе программу - SonMapED. Открой его и загрузи следующие файлы: Маппинги - _maps\Sonic.asm Тайлы - artunc\sonic.bin DPLC - _inc\Sonic dynamic pattern load cues.asm В этой программе можно легко импортировать спрайты из PNG изображений, добавлять новые, полностью их переделывать. И проблем с отсутствующей головой не будет.
  8. Новый аватар будет превносить в мои посты еще больше кавая и лучезарного добра!

    1. Показать предыдущий комментарий  ещё 3
    2. SpeedMaster

      SpeedMaster

      Чего? о.о

    3. ❌ Строк не найдено

      ❌ Строк не найдено

      Супер Эпичное Падение? СЭП?????

    4. Mr Kotolohka

      Mr Kotolohka

      Смешно получается под SUPER EPIC FALL смешно потому что перевод супер эпичное падение новерное у SonicLand98 тупо не хардкорный игрок или просто вкус другой

    5. Показать следующий комментарий  ещё 9
  9. Трололо. А титульник специально побит, чтобы игра вылетала и мы не видели вот это: Хак сделан в S1HS2. Музыка не изменена. Арт не изменен. А палитра изменена, молодец. Код изменен, молодец. Плашечка Illegal Instruction это подтверждает. Тролль 999, это у тебя уже не первый такой хак, насколько помню. Ну так дела не делаются же. Троллить надо уметь! Тонко, со вкусом! А это вызывает только приступы рвоты и негодования.
  10. Такой баг был только в С1ХС самой первой версии и получался при редактировании лабиринта. Какой у тебя дизасембл?
  11. Твой "исходник" называется образ диска с файлами, которые использует игра. =Р Если возьмешь компакт диск с Sonic CD и вставишь его в свой CD-ROM, увидишь следующее: Собственно, диск использует распространенную файловую систему, которую понимает Винда и другие операционные системы. А BIOS в Sega CD позволяет получать доступ к файлам на диске. Что делать с MMD? Дизасемблировать! Я уже говорил, что это программы для M68K. Они загружаются в область память, начинающуюся с $200000, что тоже нужно учесть (начальный оффсет в файле следует принять за $200000, а не 0). Видео STM вряд ли ты воспроизведешь каким-либо плеером. Они заточены под Сеговский VDP, т.е. сделаны тайлами 4bpp. Какой там используется кодек, понятия не имею. На Sega CD вообще использовали Cinepak, но здесь никаким сжатием вообще не пахнет. Я поковырял видео тайловым редактором. Пол часа возни с определением формата и подбором оффсетов и voi-la: Я проверил весь файл - все кадры действительно несжаты. Единственное, периодически тайлы прерываются некоторыми массивами данных, которые кстати все выравниваются по размеру $20 байт (тайлу), среди прочего они, вероятно, содержат палитру, так как она меняется в разных фрагментах видео. Каждому кадру тоже предшествует какой-то клочок данных (здесь выделен красным, размер - ровно один тайл). Думаю, он описывает рамеры кадра и время отображения. А вообще, если хочется посмотреть кат-сцены из Sonic CD, скачай дистрибутив Sonic CD 2011, который на мобильные платформы. Там ты найдешь все видео в формате MP4. В отличие от версии Sega CD, у них больше цветов, больше частота кадров и разрешение. И вообще, в старой игре сцены сильно укоротили из-за ограничений по размеру.
  12. Никто еще не сделал полного дизасембла Sonic CD. Игра очень объемна. Как можно заметить, на диске в основном записаны файлы MMD размером 256 КБ. Каждый этот файл - отдельная MD-программу, представляющая собой отдельный уровень или игровой экран. Можно сказать, что у каждого уровня в игре свой 256-кб "РОМ", и в каждом из них заново повторяются такие данные как арт Соника, код движка и другое, отличаются только коды объектов на уровне, данные уровня. Ну и у этих "РОМов" нет полноценных заголовков. Использование таких вот "РОМов" связано с жестким ограничением SEGA CD на размер программы. Программа для M68K должна быть загружена в память, которой выделено всего 256 кб. MarkeyJester работает над дизасемблом Sonic CD. SegaLoco начал дизасемблировать Sonic CD Beta 510. http://forums.sonicretro.org/index.php?showtopic=23864 и http://sonicresearch.org/forums/index.php?showtopic=2455 (пока только файл IDB). Мне самому кто-то когда-то давно кинул небольшой дизасембл одного из MMD-файлов Sonic CD - уровня Metallic Madness Act 3 (R83C__). Дизасембл не очень полный и подробный, но объем работы проделан огромный. Вот он: https://dl.dropbox.com/u/44757401/Sonic%20CD.7z - я давно им не пользовался и уже забыл, чем отличаются две копии файла. Возможно, в одну их них я вносил свои дополнения.
  13. Нет проблем =) Правильно сделал, что принял вызов! Вышеупомянутую фразу я имел неосторожность ляпнуть довольно давно, когда ситуация с хакингом у нас мне казалась совсем пессимистичной. Рад, что ты доказал, что это не так. А вообще, ты бы лучше с твоими навыками какой-нибудь крутой хак сделал. Если на "получение" хоминга у тебя ушло 3 дня, представляю какой вышел бы хак или просто техно-демка из всяких способностей/фишек, если потратить чуть больше времени. Это точно бы многократно опровергло мои пессимистичные слова.
  14. Что ж, друзья! Пора поставить точку в приключениях хоминга! Это ошеломительный ответ, я ждал, когда же такой ответ появится. Кто бы думал, что это случится сегодня. Все было бы совсем идеально, если одно но не омрачало бы всю эту затею. Это не твой код, не ты его составлял. А я надеялся! Именно. Это я уже говорил утром на irc канале #sonicscanf. К сожалению, я не мог ответить сразу, так как неудобно писать содержательные посты с мобильника. Этот код байт в байт соответствует третьей версии Хоминг атаки, которую я написал и которая используется в Sonic 1 Megahack: Ultra Edition и еще в невышедшем Sonic Winter Adventures. * * * Чтобы там ни было, Мимо проходящий, твой ответ действительно ошеломительный, я не шучу. Все в твоем гиде сделано на высшем уровне. Меня поразило, с какой точностью ты описал каждую команду моего кода и принцип действия в целом, не забыв кроме всего прочего про такие вещи, как очищение флага в ResetOnFloor, добавление дополнительного кода в TouchResponse. Ты даже понял такую мелку деталь, что "numbers MUST BE in ascending order" в массиве ID'ов объектов (с масивом, отсортированным в порядке возрастания я сильно оптимизирую цикл перебора его элементов). Это действительно круто. Твои познания в ассемблере и реверс инжиниринге великолепны. Есть правда, небольшой ляп, который ты допустил, разбирая код: Тригер окончания списка -1 (FF), а не 00. Байт 00 получился в результате выравнения офсета следующей за списком инструкции (even). Здесь все нетривиально, так что бесспорно, об этом сложно догадаться. В цикле перебора массива из ID'ов, я повторяю перебор, пока ID объекта больше рассматриваемого элемента массива. При достижении значения FF, цикл автоматически обрывается, так как нельзя подобрать ID такой, что он будет больше FF. Таким образом, я получаю наиболее быстрый алгоритм перебора элементов, который не требует ни обязательной проверки всех элементов массива, ни специальных условий для обнаружения конца списка. 60 кадров, я задаю байту $1F значение 60. Условие окончания хоминга срабатывает, как только счетчик достигает значения 0. А еще, только что заметил, ты удалил из основного кода несколько команд, использовавших регистры d4, d5 для запоминания dX, dY при поиске ближайшего объекта. Очень хорошо, потому что они не используются, это мертвый код, остатки от поисков лучшей реализации алгоритма, которые я забыл удалить. * * * В общем-то, Должен сказать, не очень то приятно, когда размещают твой собственный стафф, к тому же пытаясь выдать его за свой. Да, я вижу, что ты сильно постарался, изучая мой код, я рад, что есть и нас еще грандиозные хакеры, и апплодирую твоим знаниям (чтобы так достать и разобрать код, знаний нужно немало). Но все же, должен согласится со всеми, кто говорит, что Хоминг уже не имеет такое большое значение в хакинге, что это что-то уникальное и что не стоит допускать его массового копирования. Мир меняется, меняются требования игр, и нещадно повышается планка качества для хакинга. Хакинг постоянно должен предлагать что-то новое, чтобы существовать. И я думаю, самое время. Причина, по которой я не выкладывал хоминг, по которой его до сих пор не выкладывают другие, - "это достижение для хакера, изюминка хака, и если позволить достижению быть легкодоступным, ценность достижения сойдет на нет, и что было изюминкой, затеряется в куче хлама, которое на вид такое же, но хлам". Как-то так. Я знаю, многие меня не поймут. Сложно сформулировать это побуждение, могу только вам сказать: создайте свою изюминку. Это будет визитной карточкой вашего хака, инновацией, уникальностью. Позволите ли вы просто взять и дизасемблировать ваш хак, достать изюминку, которая, возможно многого вам стоила, и вывесить ее на растерзание миру? Но, как я говорил выше, времена меняются. Для меня написание хоминга уже давно перестало быть изюминкой, сейчас я занимаюсь намного более серьезными вещами, как программирование боссов и внутриигровых экранов. Так что я и сам подумывал о том, что в будущем я мог бы написать гид о хоминге, и что он, может быть, помог бы хакингу в целом, помог стать качественней и не отставать от растущих требований. Тем более, я не имел бы что-либо против, если бы кто-то написал его сам и выложил бы в публичный доступ. А тут, что ж, что сделано, то сделано. Забирайте код, друзья! И да будут хаки ваши на 20% круче с хомингом, если вы его жаждите. При использовании кода, пожалуйста, укажите мое авторство. Так же прилагаю оригинал моего кода, в том виде, в котором он был задействован в моих хаках, Sonic 1 Megahack: Ultra Edition и Sonic Winter Adventures: http://pastebin.com/A2n9n88Z (думаю, тебе МП, это будет особенно интересно). Может быть, через несколько месяцев и я сам напишу свой гид. Кстати, этот хоминг тоже не совсем идеален (хакеры: есть куда стремится!).
  15. Музыка из Шоу Бенни Хилла. Классика жанра.
  16. Неожиданно =) Летс-плей очень понравился, особенно отдельные моменты мне, как автору хака, доставляли особенно. Спасибо за крутой обзор, Сыендук!
  17. Ок, исправил. Думал, и так будет понятно, хотя там все равно небольшая опечатка была. Теперь написано "имя лейбела и одну команду над ним". Это вполне обычное явление. Просто у Сеги очень сложная архитектура (целых два процессора), так что всплывает много тонкостей с этим. Нельзя обращаться к шине данных процессора (Z80), когда процессор выполняет какую-либо программу - тогда шина занята и используется им (через нее он читает саму программу, а программа в свою очередь, может также читать/записывать в память, например). Насколько помню, в более современных системах подобные процессы могут даже происходить автоматически, на аппаратном уровне, но в старой Сеге многое приходится регулировать самостоятельно. Звуковой чип YM2612 тоже "приурочен" к адресному пространству Z80. Так что для доступа к нему, нужно запросить у Z80 шину. Процессор остановит выполнение программы и будет передавать данные от 68K в YM и обратно. Ну зато Сега по крайней мере сама справляется с остановкой Z80, если он обращается к 68K во время DMA. Это происходит само собой, так как процессор Z80 ждет ответа от 68K, который не ответит, пока не справится с DMA. Но в Соник 1 зачем-то сделали принудительную остановку Z80 перед DMA. Может, решили перестраховаться, или тогдашняя документация по железу советовала это делать (в ней было исправлено немало ошибок, к тому же кое-какая информация из нее не совсем точна).
  18. Как улучшить качество воспроизведения звука в Mega PCM Все мы знаем, как звучит оригинальный сэмпл SEGA в Соник 1: https://dl.dropbox.com/u/44757401/SEGA_Good.wav Но что, если мы попробуем воспроизвести тот же сэмпл во время игры? Когда происходят массивные передачи данных между компонентами системы, работают скрипты по обновлению музыки и многое другое. Тот же самый сэмпл будет звучать так: https://dl.dropbox.com/u/44757401/SEGA_Bad.wav Это распространяется на все сэмплы, воспроизводимые в игре. То есть все ваши басы, ударные будут звучать с искажениями. Качество заметно падает, сэмпл как бы становится "рваным". В этом гиде я расскажу, как решить эту довольно сложную техническую задачу и добиться максимально высокого качества воспроизведения. В конце этого поста также находится приложение - чистый дизасембл, где применен этот гид + небольшой бонус. После этого вы сможете добиться впечатляющих результатов, как, например, этот: Но сначала пожалуй, нам нужно установить, а почему же это происходит? Следующий ниже текст будет содержать много теории и технических деталей. Если вы не хотите вдаваться в невероятные (!) шокирующие (!!) подробности, пропустите следующий пункт. 1. Теоретическое объяснение Здесь проблема не в Mega PCM, а в самом движке Sonic 1. В Сеге, как вы знаете, представлено два процессора - Motorola 68000 и Zilog 80. Сам движок игры работает на мощном 16-битном процессоре M68K, и именно этот процессор управляет по большей частью всеми компонентами приставки. Второй процессор - Z80, используется в Sonic 1 для вывода цифровых сэмплов. Мой драйвер Mega PCM как раз работает на процессоре Z80. Как говорилось выше, во время функционирования игры, движку неизбежно приходится связываться с различными компонентами системы, как звуковые- и видео-чипы, чтобы обновлять звук и изображение. При этом, архитектура приставки накладывает свои ограничения на доступ к ресурсам. Так, например при доступе к звуковому чипу YM2651, процессор Z80 должен быть приостановлен. То же требуется, например, при доступе к памяти Z80 со стороны 68K. Во время игры, Соник 1 останавливает Z80 в следующих случаях: При работе движка SMPS, так как ему нужен доступ к звуковому чипу YM2612. Во время DMA-переноса данных в видеопамять (VRAM). SMPS и DMA-переносы постоянно работают в конце каждого кадра, причем на их выполнение требуется время. Таким образом, Z80 остановки длятся относительно долго, а вместе с тем останавливается работа Mega PCM, а значит, прерывается и обновление DAC, которое целиком лежит на плечах Mega PCM. Из-за неравномерного вывода звука появляются заметные искажения. Для наглядности, представим что у нас есть звуковая волна в форме синусоиды. В идеале она выглядит так: Но в Соник 1, Z80 часто останавливается. В моменты остановок Mega PCM не работает, а значит волна не обновляется. Не получая новых сигналов, звуковой чип будет генерировать последний полученный сигнал. Волна будет выглядеть так: Серые области - периоды, когда Z80 остановлен и звук не обновляется. Если вырезать их из рисунка, получилась бы исходная красивая синусоида, как в первом графике, но из-за остановок в обновлении звука, волна заметно искажается. Задача моего гида - сократить время остановок Z80 до минимума. К сожалению, полностью избавиться от них невозможно, так как они необходимы для доступа к памяти Z80 и YM. Поэтому добиться качественного воспроизведения цифровых сэмплов на Сеге - очень сложная задача, требующая немалых усилий. Но тут я уже постарался для вас, так что вам лишь остается правильно проследовать всем инструкциям! Итак, нам потребуется максимально оптимизировать вышеперечисленные два фактора: SMPS DMA-переносы Именно из этих двух частей и состоит гид. 2. Оптимизация остановок Z80 в SMPS Соник 1 предпочитает останавливать Z80 с самого начала работы SMPS и до ее конца. Это объясняется тем, что звуковому движку в любой момент времени может понадобиться доступ к YM2612 или в памяти Z80 (для управления Mega PCM). Но ведь этот доступ нужен не всегда - большую часть времени движок просто обновляет внутренние события и таймеры, ведь чтение музыкальных файлов и выполнение их внутренних команд занимает большую часть времени. Получается, что Z80 простаивает "просто так" - ведь SMPS обращается к YM довольно редко. Если останавливать Z80 именно в тот момент, когда отдельные процедуры SMPS требуют YM и память Z80 (а не на время выполнения всего кода SMPS), можно добиться нехилой оптимизации. Именно в этом и заключается эта часть гида. Для начала, вам потребуется добавить в свой дизасембл несколько новых макросов. Они заметно упрощают процесс, так как с ними можно избавиться от использования большого и многократно повторящегося кода. ; ============================================================= stopZ80 macro move.w #$100,($A11100).l nop nop nop @wait\@: btst #0,($A11100).l bne.s @wait\@ endm ; ============================================================= startZ80 macro move.w #0,($A11100).l ; start the Z80 endm ; ============================================================= waitYM macro @wait\@: move.b ($A04000).l,d2 btst #7,d2 bne.s @wait\@ endm Добавьте эти макросы в начало sonic1.asm или в файл macro.asm (если у вас S1HS, так будет предпочтительнее). Теперь - за дело! Перейдите к лейбелу sub_71B4C (UpdateMusic в S1HS). В самом начале вы увидете следующий код: move.w #$100,($A11100).l ; stop the Z80 nop nop nop Это код остановки Z80. Так, SMPS останавливает его в самом начале своей главной процедуры и запускает только в самом конце. Этот код нам здесь больше не понадобится, удалите или закоментируйте его. Теперь, перейдите к лейбелу loc_71C44: loc_71C44: move.b ($A04000).l,d2 ;++ btst #7,d2 ;++ bne.s loc_71C44 ;++ move.b #$2A,($A04000).l ;++ move.w #0,($A11100).l ; start the Z80 rts Учитывая, что вы уже установили Mega PCM, этот код будет выглядить, как показано выше. В самом конце - команда, запускающая Z80. Код, помеченный плюсиками (++), это дополнительный код, специально для Mega PCM. Он реализует небольшой трюк, необходимый для Mega PCM (описание этого трюка можно найти в первом посте). Нам этот код еще понадобится, но не в этом месте. Удалите весь код, кроме имени лейбела и rts. С этого момента, SMPS больше не останавливает Z80 во время своей работы. Но есть несколько мест, где остановить его необходимо. Первое такое место - это где SMPS отправляет Mega PCM номер DAC сэмпла. Как я уже говорил, когда 68K обращается к памяти Z80, сам Z80 должен быть остановлен. Идите к лейбелу loc_71C88 и найдите в коде следующую строку: move.b d0,($A01FFF).l Нам нужно, чтобы Z80 останавливался перед ее выполнением, и продолжал работу сразу после него. В этом нам помогут макросы. Просто замените эту строчку на: stopZ80 move.b d0,($A01FFF).l startZ80 Еще остались места, где SMPS дает Mega PCM команды паузы, снятия с паузы и остановки воспроизведения. Перейдите к лейбелу loc_71E7C и найдите: move.b #$7F,($A01FFF).l; pause DAC Дополните это команду таким же образом, после чего она будет выглядеть так: stopZ80 move.b #$7F,($A01FFF).l; pause DAC startZ80 Перейдите к лейбелу loc_71EFE. Прямо над ним, вы увидите: move.b #0,($A01FFF).l ; unpause DAC Опять же, дополните эту команду, как было сделано выше. И последнее, идите к loc_725B6 и дополните команду: move.b #$80,($A01FFF).l ; stop DAC playback И, наконец, SMPS должен остановить Z80 в процедурах обращения к YM. В этот раз, замена кода будет выглядеть сложнее, к тому же мы применим тот самый код для Mega PCM, который убрали в самом начале. Идите к процедуре sub_7272E и замените весь код на этот: sub_7272E: ; XREF: loc_71E6A stopZ80 waitYM move.b d0,($A04000).l waitYM move.b d1,($A04001).l waitYM move.b #$2A,($A04000).l startZ80 rts ; End of function sub_7272E Затем, идите к sub_72764 и замените ее на: sub_72764: ; XREF: loc_71E6A; Sound_ChkValue; sub_7256A; sub_72764 stopZ80 waitYM move.b d0,($A04002).l waitYM move.b d1,($A04003).l waitYM move.b #$2A,($A04000).l startZ80 rts ; End of function sub_72764 Если вы добрались до этого момента - поздравляю! Вы оптимизировали SMPS. Убедитесь, что вы сделали все правильно - постройте РОМ и проверьте его в эмуляторе. Звук должен играть как обычно, и DAC сэмплы должны быть слышны. Если с чем-то возникли проблемы, вы всегда можете проверить себя, сравнив ваши правки с правками в чистом дизасембле, где применен этот гид. Его можно скачать чуть ниже, смотрите Приложения в самом конце. 3. Оптимизация процедур VBlank Соник 1 всегда останавливает Z80 при DMA-переносах во VRAM и CRAM. На самом деле, останавливать процессор в этом случае совсем необязательно. Когда речь идет о DMA-переносе, VDP останавливает M68K, захватывает его шину и переносит данные из любого места (RAM или ROM) в видеопамять на очень высокой скорости. На Z80 это никак не сказывается, он может спокойно себе работать. Но если Z80 захочет обратится к 68K в этот момент (например, если он читает РОМ), он зависнет, ожидая ответа от 68K. Ответ от 68K он получит только, когда DMA-перенос закончится и 68К продолжит работу. Однако, с учетом описанного выше случая останавливать Z80 принудительно (программно) не имеет смысла - он сам остановится в нужный момент. Тем более, на саму остановку уходят дополнительные циклы процессора, как со стороны 68k, так и со стороны Z80. Самое главное - эмуляторы не эмулируют остановку Z80 при DMA-переносах. Так что исключив принудительную остановку, которую делает Соник 1, мы получим колоссальную оптимизацию. На реальной системе такой оптимизации не будет, но все же получится сэкономить некую долю времени. Итак, мы будем работать с процедурой VBlank. Это loc_B10 или VBlank в S1HS. Ее код очень обширен включает множество роутин. Перейдите к loc_BC8, вы увидите следующий код: move.w #$100,($A11100).l loc_BC8: btst #0,($A11100).l bne.s loc_BC8 Узнаете цикл остановки Z80? С ним мы уже встречались не раз. Полностью удалите этот код (включая имя лейбела и одну команду над ним). Теперь, идите к loc_C22. Найдите и удалите эту команду: move.w #0,($A11100).l Это команда заново запускала Z80 после остановки. Перейдите к loc_C76. Вы снова увидите код остановки Z80: move.w #$100,($A11100).l ; stop the Z80 loc_C76: btst #0,($A11100).l ; has Z80 stopped? bne.s loc_C76 ; if not, branch Удалите его. Затем, найдите лейбел loc_D50 (он находится чуть ниже). Там вы увидите команду запуска Z80, после его остановки в loc_C76. move.w #0,($A11100).l Удалите ее. Теперь, вы знаете что делать. Найдите и удалите похожие коды в следующих местах: loc_DAE loc_E64 (move.w #0,($A11100).l расположен чуть выше) loc_E7A loc_F54 loc_FAE loc_1060 (пару строчек выше) loc_1076 loc_10D4 (в самом конце, перед rts) Вот и все! Гид был очень насыщенный и сложный, и если вы со всем успешно справились - это достойно похвал. Теперь качество воспроизведения цифровых сэмплов будет на высшем уровне и вы сможете проигрывать цифровые песни в отличном качестве. 4. Приложение Дизасембл S1HS с установленным Mega PCM и примененным гидом: https://dl.dropbox.c...h_MegaPCM_HQ.7z Этот дизасембл также содержит бонус - на титульнике играет одна из высококачественных цифровых песен из Sonic 1 Megahack: Ultra Edition! Наслаждайтесь!
  19. Спасибо за поздравления, друзья! =) Джет! Это просто невероятно! Великолепно! Неподражаемо! Ты осуществил мою давнюю мечту. Пожалуй, лучший подарок мне как хакеру. Спасибо за столь бесценный подарок! О, как бы всего этого хотелось! По поводу хакинга. Знаю, многие ждут от меня новых работ и завершения старых проектов (SWA, S1HS2), и мне самому сильно хочется завершить их и порадовать вас новыми релизами. К сожалению, сейчас и в будущем у меня будет еще меньше времени на хакинг, чем было раньше. Если честно, я почти не занимался хакингом с июля 2012, когда доделал Мегахак (хак был сделан в июля, к дедлайну Хакинг контеста, но вышел только в Августе, с открытием этого контеста). После этого многие события в жизни заставили меня отложить многие свои дела, так как сил и времени на них не оставалось. Однако, я не собираюсь бросать свои дела, однако их разработка значительно замедлится. Сейчас, как ни странно, после очень напряженного лета, которое я провел в разъездах, я понемногу возвращаюсь к своим делам. Правда, свободного времени все же крайне мало, это связано с учебой. Я работаю еще над SWA, однако его разработка продвигается микроскопическими шагами. Я делаю все по мелочи и не могу реализовать многие планы, так как они требуют долгого и глубоко погружения в работу, сосредоточенности, что невозможно с маленькими окнами свободного времени, которые мне выпадают. Разработка проектов сильно затянется, релизы могут случиться не скоро, а прогресс может быть не совсем уж впечатляющим. И все же, я еще в деле! И спасибо, что не забываете меня! =)
  20. Привет! Давненько я тебя не видел =)

    1. Alexey383

      Alexey383

      Привет)) да я так то тут)) просто читаю, а писать как то неохота))

  21. Что ж, наконец-то я дома с нормальным интернетом, и смог посмотреть это видео, и не только. Очень радовался я любому видео про Мегахак, но это особенно порадовало. Особенно момент, когда MegaG поставил игру на паузу на втором боссе, после чего последовал дикий смех и звук закатывания под стол. Еще интересный обзор: вообще-то он называется Max Payne - Killer Suits Саундрек Макс Пейна не лицензирован и всем входящим в его состав трекам даже не даны имена. Имена им давали риперы саундтрека, так что в сети можно найти много вариантов имен. Лично я предпочел назвать этот трек Battle Theme, потому что мне такое имя казалось простым и понятным. Хотя да, тут промашка вышла, потому что по такому имени нужный трек вряд ли можно найти. * * * И да, ребятки, думаю вам будет интересно узнать про некоторые интересные факты о Мегахаке! Хак разрабатывался всего 14 дней (кто прошел, уже знает). Из этих дней 3-4 дня ушло на написание прототипного драйвера с двух-канальным PCM специально для хака. Все нубские палитры генерируются программно, причем в самой игре. Для этого я разработал фильтр палитр "Noob Effect Night", который использовался еще в первом Мегахаке. Алгоритм довольно правдоподобно имитирует работу нубов, вручную я бы не добился такого качества исполнения =Р Боссы GHZ1 и GHZ2 написаны за один день. Позже я внес в них лишь незначительные правки. Первая фаза босса SYZ2 была написана еще в 2011-м для одного концепта, который я потом забросил. Чтобы хороший босс не пропадал, я решил использовать его код в Мегахаке, усовершенствовав и добавив новых действий. Босс устроен довольно сложно, это система управляемых частиц с множеством событий и тригеров. Для этого босса в 2011-м было написано два визуальных редактора. Код босса (вместе со второй фазой, когда появляется Эггман) занимает 42 КБ. Если не считать босса SYZ2, большая часть которого была написана ранее, самым технически сложным боссом считается SYZ3. На его разработку ушло больше всего времени, в него вложено больше всего сил. Поэтому он выглядит наиболее законченным. Код босса занимает 30 КБ. Босс SBZ1 появился довольно неожиданным образом. Вначале я решил сделать босса для SYZ1. Четкой идеи у меня не было, так что я пробовал различные подходы сразу, на месте. В качестве оружия сразу решил использовать колючие шарики. И вот босс вышел почти в таком же виде, как сейчас он выглядит в SBZ1. Я поигрался с ним и понял, что этот босс просто создан быть в завершающих уровнях. Так босс SYZ1 оказался в Скрап Брейне под тему Финальной Зоны, и стало гармоничнее.
  22. Скажи, а что плохого в том, что я выложил исходник? Может, он и действительно никому не пригодится, никто им не воспользуется, но хуже от него точно не станет. Хехе, или кто-то потом напишет: "Влад, когда я стал смотреть твой исходник, от кода у меня вдруг закружила голова, я упал и потерял сознание. Теперь в больнице с сотрясением мозга. Зачем ты выложил чертов исходник?" И все же я верю, что хоть кому-нибудь он окажется полезным. Может, это заинтересует кого-нибудь в изучении ассемблера Z80, как меня в свое время заинтересовали дизасемблы родного Z80-драйвера Соник 1 и SMPS Z80. К тому же, исходники выложены на Sonic Retro и SSRG, а там они точно кому-то пригодятся (и уже, кстати, пригодились, как мне признавались). Ну а если бы я не выложил все то, что я выложил там, на ЦИСе, это было бы нечестно.
  23. Спасибо за отзывы! Если честно, не ожидал столь положительной реакции по поводу хака и даже несколько сомневался в состоятельности идеи. И не описать насколько я рад, что хак многим понравился =) Идея создать такой хак возникла спотанно. Я твердо решил принять участие в Sonic Hacking Contest в этом году и отправить туда один из своих хаков. К сожалению, доработать Sonic Winter Adventures до играбельной демки я не успевал, так что решил разработать небольшой мини-хак специально к контесту. В качестве главной идеи решил развить концепию оригинального Sonic 1 Megahack, хака, который использовался в Разводе ASM-Team. Отсюда и название с припиской "Ultra Edition" и несколько отсылок к разводу ASM-Team (надпись перед титульником и такие же палитры). Хак изначально планировался как хак с большим количеством новых боссов. Я решил попрактиковаться в программировании большого количество боссов на скорость (кто прошел хак знает, в какие рекордные сроки он был разработан =Р), а также опробовать несколько новых подходов в программировании объектов. Все это было очень полезно для тренировки и проверке разных подходов в программировании, которые в будущем пригодятся мне при создании новых боссов для Sonic Winter Adventures и не только. По поводу багов - да, их там много, очень много. Некоторые оставлены намеренно, некоторые я просто не успел исправить, но хотел бы. Хак начал разрабатываться довольно поздно, когда до крайнего срока сдачи хаков на Хакинг Контест оставалось буквально две недели. Я едва уложился в этот срок. Вопросы для викторины и финального босса я делал буквально за считанные часы до окончания дедлайна. Но не будем о грустном. Я рад сообщить, что Sonic 1 Megahack вернулся с контеста не с пустыми руками, он заработал целых два трофея! Eggman Trophy -- Лучшие новые боссы/минибоссы в хаке Vector Trophy -- Самый смешной хак Это PCM звук, или грубо говоря WAV-ка. Да, это цифровая музыка в чистом виде. Все это стало возможно благодаря моему драйверу Mega PCM, который в состоянии играть целые песни в высоком качестве. Кстати, специально для этого хака я написал аддон к драйверу, который реализует двух-канальный PCM на частоте до 19 kHz. На самом деле в этом вопросе два правильных варианта ответа. =Р Это единственный такой вопрос. К слову, этот вопрос мне пришел в голову потому что я недавно имел счастье поиграть в Некст Ген и мне сильно понравилась эта игра, несмотря на все ее недостатки. Буду краток -- как кто-то сказал "Соник 06 - это необработанный алмаз!" Но чтобы никого не обидеть, другой вариант ответа (догадайтесь какой) тоже награждает игрока кольцами. По большому счету оба варианта справедливы, и у людей могут быть совершенно полярные мнения по этому вопросу, и каждая сторона готова остаивать свое мнение и обе будут в чем-то правы. А то боюсь, что на меня бы нахлынула толпа Некст-Ген хейтеров =Р P.S.: Сейчас я далеко от дома и сижу со старого медленного ноутбука с ужасным интернетом, поэтому к сожалению появляться буду крайне нестабильно и не смогу своевременно отвечать на посты, к сожалению.
  24. Mega PCM v.1.1 Добавлен небольшой фикс на случай воспроизведения битых сэмплов. Если игра попытается воспроизвести пустой или несуществующий сэмпл, вы ничего не услышите. Например, если вы портировали SMPS песню, а некоторые DAC сэмплы для нее у вас отсутствуют. Прошлая версия Mega PCM как и многие другие драйверы выдала бы рандомный шум из-за ошибки воспроизведения Это также поможет, если на воспроизведение попадет слот из случайных байтов. Случайные оффсеты теперь не вызовут ошибку с доступом к запрещенным участкам памяти, ведь оффсеты исправляются, чтобы избежать этого. Исправлен код синхронизации в циклах воспроизведения PCM и DPCM. Хотя и я следил за каждым циклом в коде, я слегка просчитался в вычислении циклов для кода синхронизации, из-за чего цикл воспроизведения при достижении последнего банка работал на 4 процессорных цикла быстрее. Следовательно, последний банк сэмпла воспроизводился немного быстрее, чем другие. Несмотря на то, что 4 цикла (длина команды NOP) - это ничтожно мало, ускорение воспроизведения было заметно на высоких частотах дискретизации (22 kHz и выше). Mega PCM теперь поддерживает РОМы до 8 МБ! Прошлая версия имела ограничение до 4 МБ, хотя это не был предел возможностей драйвера. Я решил увеличить лимит и достигнуть максимума, на что способна система переключения банков в Mega PCM - 8 МБ. Это означает, что можно уместить вдвое больше музыки и сэмплов! Должен предупредить, что крайне мало эмуляторов пока поддерживает большие РОМы. Но если вы все же заинтересовались такой возможностью, постраюсь кратко ввести в курс дела (список эмуляторов см. ниже): Многие считают, что у SMD есть строгое ограничение до 4 МБ под РОМ. На самом деле консоль способна на большее. Дело в том, что все картриджи официальных игр в свое время были спроектированы так, что они не позволяли адресовать более 4 МБ РОМ-пространства, хотя сама консоль позволяла это делать. Проблема в картриджах, а не в консоли. К примеру, некоторые флэш-картриджи для Сеги (например Mega Everdrive) уже поддерживают РОМы более 4 МБ, показывая, на что на самом деле способна консоль. К сожалению, крайне мало эмуляторов пока поддерживают большие РОМы. Факт в том, что вышеупомянутый лимит был закреплен официальным руководством Genesis, где на карте памяти 68K под РОМ секцию выделялось только 4 МБ, а остальное пространство до 8МБ было помечено как "зарезервировано". Примечательно, что в наиболее ранних версиях руководства (1988-89 годы) лимит на РОМ составлял 1 МБ. Авторы многих эмуляторов решили четко следовать руководству и ограничили РОМ-пространство до 4 МБ. В принципе, это верно и ни одна официальная игра не пострадала, и все же хотелось, чтобы больше эмуляторов избавались от этого ограничения, так как оно открывает новые горизонты в разработке под SMD. Пока существует лишь немного эмуляторов, работающих с большими РОМами. Некоторые из них - хакнутые версии популярных эмуляторов. Их можно найти здесь: http://umk3.hacking-cult.org/rus/download.htm Как обновить Mega PCM до версии 1.1 Легко. Скачайте этот архив: https://dl.dropbox.com/u/44757401/MegaPCM_v11_Bin.7z Замените MegaPCM.z80 в своем хаке на обновленную версию из архива. Всё. Исходный код Mega PCM v.1.1 https://dl.dropbox.com/u/44757401/MegaPCM_v11_SourceCode.7z * * * Если у вас еще нет Mega PCM, но вы решили его поставить, делайте все как написано в первом посте. По ссылкам из первого поста - тоже обновленная версия Mega PCM.
  25. Я точно помнил, что писал когда-то пост по этому поводу, но никак не мог вспомнить где и когда. Решил найти его во что бы то ни стало. После долгих попыток и формулирования разных запросов, нашел его наконец! Все-таки не безнадежен поиск =Р http://forum.sonic-w...#entry252412265 Есть гид: http://sonicresearch...?showtopic=2273 На самом деле камера устроена не очень сложно, хотя действительно, может понадобиться немало времени, чтобы с ней разобраться. По мере того, как я изучал движок Соник 1 в целом, я составлял для себя некоторые заметки. Среди них я оставил заметки и об основных переменных, управляющих камерой. Может быть, они окажутся кому-то полезными: ----------------------------------------------------------------------- - Camera System ----------------------------------------------------------------------- - Scroll Layers Positions --------------------------------------------- *** Plane A *** $FFFFF700 - X-pos $FFFFF704 - Y-pos *** Plane B (Scroll Layer 1) *** $FFFFF708 - X-pos $FFFFF70C - Y-pos *** Plane B (Scroll Layer 2) *** $FFFFF710 - X-pos $FFFFF714 - Y-pos - Camera boundaries --------------------------------------------------- *** Current *** $FFFFF720 - Left level boundary $FFFFF722 - Right level boundary $FFFFF724 - Top level boundary $FFFFF726 - Bottom level boundary *** Actual *** $FFFFF728 - Left level boundary $FFFFF72A - Right level boundary $FFFFF72C - Top level boundary $FFFFF72E - Bottom level boundary - Misc ---------------------------------------------------------------- $FFFFF732 - Left level boundary, at the end of an act $FFFFF73A - Camera X-shift (position change between frames) $FFFFF73C - Camera Y-shift (position change between frames) $FFFFF73E - Camera Y-displacement (i.e. Sonic's Y-position relative to camera, default $60) $FFFFF7AA - Flag to lock camera's right boundary (used by bosses) Обращаю внимание на адрес $FFFFF73E. Он указывает, на каком уровне по вертикали должен быть Соник относительно камеры. По умолчанию его значение - $60. Именно при изменении его значения камера может смещаться выше или ниже, когда Соник смотрит вверх или пригнулся. Вот и ключ к камере а-ля Соник СиДи - сделать то же самое, но для горизонтального смещения.
  • Сейчас на странице   0 пользователей

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

×