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

vladikcomper

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

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

  • Посещение

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

    8

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

  1. Новый аватар, няяяя!

    1. Teffycom
    2. alz610

      alz610

      Да это же из игры МегаМари, а котором ты мне говорил! НЯ!

    3. Ivan YO

      Ivan YO

      Няяяяя :3

    4. Показать следующий комментарий  ещё 15
  2. ВНЕЗАПНО я решил сделать несколько гидов, после крайне долгого отсутствия активности в этом деле. Нет, большой учебник по ассемблеру еще не готов, я уже думаю о том, как бы начать HTML-верстку (которую я к слову всегда делаю вручную, что займет время). А пока начнем с небольшого обновления весьма своеобразными и немаленькими гидами. В будущем надеюсь делать обновления чуть чаще, чем раз в год =) Встречайте: Как исправить баг с загрузкой Pattern Load Cues (Соник 1 и 2) Как исправить баг со сдвигом очереди Pattern Load Cues (Соник 1 и 2) Как исправить баги при смене уровней (Соник 1) Последние два гида - мои собственные, они описывают экзотические неоткрытые ранее баги в Сониках, которые я обнаружил в последние месяцы. Счастливых багфиксов!
  3. Нет, там циклические тайлы. Сами тайлы обновляются через определенное время, к тому же программа их загрузки периодически "двигает" содержимое тайлов, это довольно сложный процесс, смещаются начала и концы тайлов. В результате создается эффект движения лавы, в то время как сами тайлы неподвижны.
  4. На самом деле объекты могут работать абсолютно в любой зоне, так как структуры объектов, форматы спрайтов и анимаций для объектов во всей игре одинаковые. Единственная проблема - тайлы, или арт. Объект рассчитывает, что в видеопамяти (VRAM) на некотором оффсете XXXX есть нужные ему тайлы. Но так выходит, что Marble Zone на оффсете XXXX есть эти тайлы, а в Green Hill Zone там совершенно другое. Объекту по большому счету наплевать, что там. Какие тайлы есть - такие и отобразятся, на самом объекте это никак не скажется. Будь колона из MZ трижды покрыта рандомными тайлами в другой зоне - она везде будет выполнять свой объектовый долг одинаково хорошо. Решение проблемы довольно простое и требует минимум программирования, есть лишь одна неприятная загвоздка. Если хочешь в GHZ добавить объект из MZ, нужно найти, куда бы разместить его тайлы. Места в видеопамяти всегда не хватает. Обычно чем-то придется пожертвовать. * * * Для наглядности покажу, как выглядит суровая видеопамять, или VRAM: Так она используется конкретно в GHZ, в MZ многие тайлы будут другими. Только HUD, мониторы, кольца и Соник есть во всех зонах и сидят на одном месте. Тайлы GHZ выглядят так, потому что на этом снимке все они носят палитру Соника (потому что в VRAM за тайлами не закреплена информация, о том, к какой палитре каждый принадлежит, это устанавливается самим спрайтами и планами). VRAM, как видишь, вся почти забита. Кстати, советую хотя бы раз на это взглянуть своими глазами - скачай например, эмулятор Exodus и понаблюдай за видеопамятью - интересное зрелище, к тому же это помогает многое осознать. * * * Но вернемся к старой проблеме. Как поставить объект из MZ в GHZ? В свете того, что я говорил этот вопрос приобретает другую форму: как загрузить тайлы нужного объекта и заставить объект использовать именно их? Для примера я возьму объект Obj30 - Большая зеленая колонна из MZ (англ. Object 30 - large green glassy blocks). Позаботимся о тайлах - это пару пустяков. Открой _inc\Pattern Load Cues.asm и посмотри какой арт (тайлы) загружается в MZ - найди в файле лейбел "PLC_MZ". Пробежимся глазами по списку загружаемого арта и тут же найдем: dc.l Nem_MzGlass ; green glassy block dc.w $71C0 "Грин глэсси блок" - именно так называется наш объект, это то что нужно! Формат данных: оффсет загружаемого арта в РОМе (откуда загружать), оффсет VRAM (куда загружать). Теперь перейдем к "PLC_GHZ". Нужного количества свободного места мы не найдем, так что тут к сожалению придется чем-то пожертвовать. Для примера, давай пожертвуем гигантским GHZ шариком, его использует только босс. Просматриваем список пока не найдем: dc.l Nem_Ball ; giant ball dc.w $7540 Загрузим на это место тайлы MZ колонны. Для этого достаточно заменить "Nem_Ball" на "Nem_MzGlass". Дело сделано! * * * Теперь надо заставить объект брать тайлы из нового места, но только в GHZ. Найди в sonic1.asm лейбел "Obj30". Где объект указывает, какие тайлы он использует? В слове (word) 2 своей струтуры. Значит, нужно пробежаться глазами по коду и искать место, где фигурирует 2(a0), или в запущенных случаях, 2(a1). Пробегаемся глазами - спустя несколько экранов кода, чуть ниже лейбела "Obj30_Load" находим: move.w #$C38E,2(a1) 2(a1) - запущенный случай. Дело в том, что объект сложен и загружает дочерние объекты. Если объект размещен в GHZ, нужно записать в это слово другое значение. В нем указывается оффсет VRAM, правда с некоторыми преобразованиями. В нашем случае оффсет - $7540 (см. выше). Не буду вдаваться в подробности - оффсет надо разделить на $20, а еще в этом слове можно указать палитру, которую использовать. Соберем все вместе, и voi-la: move.w #$C38E,2(a1) ; палитра и тайлы для MZ tst.b ($FFFFFE10).w ; зона = 0 (GHZ?) bne.s @Skip ; если нет, переход move.w #(1<<13)+($7540/$20),2(a1) ; палитра и тайлы для GHZ @Skip: Замени строчку выше на этот код и дело сделано. (1<<13) задает палитру, 1 можно заменить на число от 0 до 3 чтобы выбрать другую палитру. Итак, теперь можно идти в SonED и размещать в GHZ объект 30. Правда палитра может преподнести сюрпризы, в GHZ она отличается. Но это уже совсем другая история ;)
  5. В таком случае с музыкой в хаке нет никаких проблем. Я и сам ошибочно подумал, эти 2 песни взяты прямо из Бума. Совсем забыл, что ты, S_T_D, когда-то конвертировал точно такие же песни, хотя я слушал все твои порты ;)
  6. Разумеется, большинство хакеров не музыканты. Сами музыку обычно не делают, а пользуются готовыми работами "музыкантов" (которых значительно меньше, чем хакеров) или же просят их сконвертировать некоторые песни специально для их хака. Здесь же речь о том, как ты берешь эту музыку. Если если рипать ее из чужих хаков и использовать без разрешения авторов - это считается воровством и полным наплевательством на людей, ее сделавших (а что если этот человек не хочет, чтобы его работа использовалась где-то еще? имеет же право) Другое дело - обратиться к автору музыки с просьбой использовать определенные его песни. Этот способ более простой и продуктивный: если автор согласится, он вышлет исходники песен. А еще если хорошо попросить, автор может проявить великодушие и сделать новые порты специально для твоего хака. Ну а самое главное - ничего не надо рипать, и никто не упрекнет тебя в краже стаффа, так как вся музыка будет использована с согласия ее сделавших. Но если хочешь воровать - воруй, тут никто этого не запретит. За это банят на SSRG, Ретрохаке и Соник Ретро.
  7. Да. Но хак не отменен. Разработку возобновлю как закончу с некоторыми более мелкими проектами. Новостей по SWA еще долго не будет, я решил, что все-таки не буду показывать все подряд до релиза.
  8. Игры уже соединены. Flamewing объединил свой хак с хаком Sonic 1 and 2, от ColinC10. Уровни из Соник 1 работают на движке Соник 2, т.е. весь код объектов, деформации планов и прочий код уровней был перенесен на новый движок, не говоря уже об изменении арта под палитру Соник 2. Хочешь сделать подобное? Что ж, похоже ты действительно хочешь стать Хакером с большой буквы! Могу только пожелать удачи в этом нелегком деле ;)
  9. Всех запишем, приглашаются все желающие (fuu) По поводу миссий в играх Mega-Drive: я постараюсь приготовить кое-что особенное, главное только мне уложиться в срок. В любом случае, скучно не будет!
  10. Только что проверил - все работает, только в обычных уровнях разделитель будет выходить на логотип Сеги, вместо Ending Sequence. Чтобы это изменить, в коде Obj3A_NextLevel нужно заменить это строчку: move.b #0,($FFFFF600).w; set game mode to level (00) (комментарий, данный в дизасембле, некорректен, я забыл это исправить) На эту: move.b #$18,($FFFFF600).w И использовать код, который дал Кул-Спот. Должно сработать
  11. collision_property и есть тот байт $21. Проверь значение этой константы в начале s2.asm. Совсем забыл, что в дизасембле Соник 2 используются константы вместо обычных численных значений, к которым я привык. В таком случае $10(a0) это xvel(a0), а $12(a0) это yvel(a0). А еще советую найти в коде список этих констант и ознакомиться с ним, так будет легче работать с объектами.
  12. Посмотри в справочнике - http://info.sonicretro.org/SCHG:Sonic_2/RA...us_Table_Format Согласно нему, количество ударов босса хранится в байте $21 объекта. В коде босса нужно найти команду, где этому байту задается какое-нибудь значение, она будет выглядеть так: move.b #xx,$21(a0) Меняя число ХХ ты изменишь количество ударов как тебе угодно. По поводу скорости, она задается в байтах $10 (горизонтальная) и $12 (вертикальная), т.е. если хочешь как-нибудь повлиять на перемещение босса, один из варинатов - искать в коде все, что связано со скоростями, и менять их значение. Но сразу предупрежу: беспорядочное изменение скоростей может "выбить босса из колеи", т.е. он может начать вести себя не корректно, например залететь за экран и не вернуться. Дело в том, что все в коде объектов может быть тесно связано, т.е. часть программы объекта может полностью полагаться на скорость и ожидать что босс окажется там-то там-то через заданое время или достигнет заданой границы экрана. Очень часто при правке скоростей, особенно у боссов, описаные выше ожидания программы подрываются и объект перестает полноценно функционировать. В этом случае нужно искать и править связанный с этим программный код, или - чуть более легкий для новичка способ - заняться тщательной подгонкой остальных скоростей у босса (чтобы скомпенсировать возможные "отклонения от курса"). Последний способ работает не всегда - тут уж как повезет, зависит от того, что ожидает код объекта. Хех, точно. Надо наконец добить учебник, спасибо что напомнил =Р То, что у меня на сайте сейчас (старый гид по ассемблеру) - плохо написанная и пережеванная каша, на которую мне уже два года как страшно смотреть, но замена все никак не придет, так как я ленюсь начать HTML-верстку. Ребята, если кто-то думает что у вас не получится освоить АСМ, если вы не понимаете этот гид, не думайте так! Этот гид очень сложно понять, потому что он написан паршиво. Когда я его писал, и я сам был не силен в АСМе. В результате, многие вещи я показал не в том свете, в некоторых местах досадно ошибся, а объяснения получились смазанными. По сути, этот "гид" является вольной редакцией такого же гида с Ретро, с некоторыми дополнениями, урезаниями и перефразами. Не знаю как сейчас, но в то далекое время гид на Ретро был в таком же мутном и непонятном состоянии. Там были ошибки, неверные изложения и много всего. Но я по нему учился, кстати говоря. Позже, по мере продвижения, я опроверг некоторые факты того гида (и своего) и переосознал многие определения. Очень жаль, что я не исправил своевременно свой гид, а запустил это дело на долгие годы. Постараюсь зарелизить новый учебник (более не короткий гид) как можно быстрее. Сейчас он находится в сыром текстовом состоянии, так что я просто не могу зарелизить его публично (еще из-за того, что некоторые его компоненты призваны работать только когда он оформится в виде веб-страниц).
  13. Я прошел Lunatic Mode со сейвстейтами. Сложно было только в начале, потом я освоился, или уровни легче пошли. Hard и Normal Modes можно легко пройти без сейвстейтов. Боссы довольно просты во всех режимах, особенно меня поразила простота его в Lunatic Mode: после всех невероятных препятствий я ожидал чего-то воистину непроходимого. Хак хорош, только короткий, как и все хорошие демки. Меню и некоторые новые мелодии сделаны на ура.
  14. Я бы не сказал, что Мегамикс заглохнет. Работу над ним, судя про всему, должен возглавить его со-основатель Stealth. В любом случае, над хаком работает целая команда, а не один человек.
  15. 1. Чтобы ограничить вызов какой-либо способности, обычно используют флаг в памяти, при активации которого способность более не вызывается. В начале кода ставится условие выхода: "если флаг такой-то установлен, выход". В общем случае это выглядит так: Sonic_Something: tst.b (xxx).w ; способность уже вызывалась? bne.s Sonic_Something_Return ; если да, выход <...> move.b #1,(xxx).w; задать флаг, чтобы способность больше не вызывалась <...> ; основной код Sonic_Something_Return: rts Где (xxx).w - какой-нибудь адресс памяти. Его ты должен будешь выбрать сам. Подойдет любой свободный адрес памяти, его можно найти в справочнике по RAM Sonic 2 на Ретро (у меня сейчас к сожалению нет времени его смотреть). Можно воспользоваться каким-нибудь свободным байтом в структуре объекта Соника. Это даже лучше. Тогда адрес будет иметь форму xx(a0), свободные байты тоже можно узнать из справочника. И последний момент - нужно позаботится о восстановлении способности (сбросе флага), чтобы при новом прыжке можно было совершить Джамп Дэш еще раз. В твоем случае это нужно сделать в процедуре Sonic_ResetOnFloor. название из Соник 1, в Соник 2 оно может отличаться (у меня нет сейчас времени уточнить названия). Очищается флаг командой CLR, например. clr.b (xxx).w 2. Ты дал слишком мало информации. На основании этого я не могу ничего сказать. 3. Звук в формате 8bit PCM 22 kHz (в количестве килогерц могу немного наврать). Есть много программ конвертеров, которые позволяют получить звук этого формата. Грубо говоря, это WAV-файл, но в "чистом" виде, без заголовка и прочего, только звуковой поток. При конвертировании звука важно лишь следить за параметром "8-bit PCM", количество килогерц можно задать по желанию, этот параметр отвечает за частоту обновления звукового потока. Единственное, если частота нового звука будет отличаться от оригинала, нужно будет трогать код и изменять параметр "pitch" для звука.
  16. Это значит "использовать анимацию номер $21" и ничто больше. Номер анимации не несет никакой информации о том, что будет в самой анимации. Найди лейбел SonicAniData, это список всех анимаций для обычной формы Соника (для Супер формы смотри SuperSonicAniData чуть ниже). В опрятном дизасембле Соник 2 все даже пронумировано, так что можно легко узнать номер для каждой анимации. Из таблицы видно, что номер $21 у анимации SonAni_LieDown. Это анимация когда Соник встает с земли. SonAni_LieDown: dc.b 3, 7,$FD, 0 Анимация очень коротка и состоит из одного кадра (7). Потом флагом $FD она переключается на анимацию 0. А это анимация ходьбы. Анимация ходьбы - особая, она зависит от скорости, при нулевой скорости она воспроизводится очень медленно. Отсюда и берется медленная ходьба, которую ты видишь. Тебе нужно создать свою анимацию, где ты совместишь анимацию ходьбы, затем бега для имитации разгона. Достаточно просто скопировать кадры из анимации ходьбы и бега: SonAni_Walk: dc.b $FF, $F,$10,$11,$12,$13,$14, $D, $E,$FF SonAni_Run: dc.b $FF,$2D,$2E,$2F,$30,$FF,$FF,$FF,$FF,$FF И получить что-нибудь подобное: SonAni_PeelOut: dc.b 3, $F,$10,$11,$12,$13,$14, $D, $E,$2D,$2E,$2F,$30,$FE,4 Это моя грубая прикидка. Чтобы было глаже, может быть, тебе понадобиться продублировать некоторые кадры, а некоторые вырезать. Добавь сслыку на эту анимацию в конец списка SonicAniData. Ее номер будет $22, так что надо будет исправить move.b #$21,anim(a0) в коде твоего Пил Аута.
  17. С1ХС 2.1 пока почти не занимался. Хотя в планах выпустить ее когда-нибудь во второй половине этого года. Релиз будет всемирный, т.е. программа будет доступна на английском.

  18. Спасибо, и вас тоже ^_^

    Встречаю новый год в москве. Скоро улетаю.

  19. Хак был отменен так как я решил, что не стоит начинать слишком много проектов. Но недельные труды над ним не пройдут бесследно - SQWA2 появится единственный босс из хака, которого я сделал за время разработок, - сумасшедшие красные кольца. Возможно появится фича с замедлением времени из этого же отмененного хака. Увы, сам хак я наверное никогда не покажу.

  20. Как ни странно, Соник Бэд Дрём - мой давно отмененный хак на Соник 1. На картинке один из первых, "грубых" концептов планируемого тайтл скрина. Хак был начат незадолго после выхода твоего Bad Dream, как ни странно. Да, мне так сильно понравилась тогда идея со сном, что я решил опробовать что-то подобное =Р Сорри, за плагиат имени, просто ничего умнее придумать не мог.

  21. Да, в Соник 1 используется звуковой драйвер SMPS, так что формат данных должен соотвествовать формату, с которым работает этот драйвер. VGZ, конечно, формат трекерной музыки, но это совсем не то, что нужно. К сожалению, я почти не знаком с SMPS и музыкой вообщем, так что мало что могу тут сказать. Музыку для SMPS можно сотворить программой xm3smps, которая конвертит музыку из формата XM. Кстати, с помощью хорошего трекера можно любую MIDI сконвертить XM. По поводу VGZ ничего сказать не могу. Также музыку можно рипнуть из других игр, использующих движок SMPS, правда для этого скорее всего придется рипнутую музыку немного фиксить, так как версии SMPS могут различаться между играми. Совсем экстримальный вариант - писать (или, можно сказать, программировать) музыку вручную. Звучит дико, но особые умельцы так и делают.
  22. Какая у тебя версия Windows 7? У меня стоит Windows 7 64-bit и ASM68K идеально работает (как на самом первом релизе, так и на SP1), и даже без всяких режимов совместимости. Проверь, может файл поврежден. Попробуй заново скачать S1HS2 и заменить свой ASM68K.EXE на новый. Странно было бы, если файл действительно каким-то образом повредился, но кто знает. По идее, компилятор ASM68K 32-битный и должен работать на 32-битных и 64-битных системах.
  23. Если никак не удается найти, то возможно, то что ты ищещь - не спрайтовые, а плановые маппинги. Я не знаю точно, как сделано в титрах Соник 2 (в титрах Соник 1 все определенно на спрайтах), но если учесть, что надписи на тайтл кардсах там сделаны плановыми маппингами (насколько помню, может я ошибаюсь), то разработчики вполне могли сделать и титры, включая надпись в конце, на них. Это вполне разумно, так как сэкономит кучу тайлов. Кстати, о спрайтах. Твое "изображение" превышает все допустимые лимиты: оно содержит больше 80 спрайтов (кусочков, pieces), т.е. Сега не отобразит большую его часть, а самое главное - на одной горизонтальной линии во многих местах находится больше 20 спрайтов, в то время как VDP может отображать не более 20 спрайтов на строке (в эмуляторах есть опция, чтобы обойти этот лимит, но по-моему не очень-то хорошо выходить за рамки, заданные реальном железом, это как-то... по-читерски). Это так, к слову. В любом случае тебе наверное придется взять в руки PlaneED, и, боюсь, придется покопаться в исходнике, разобрать код финальных титров. Просто если иметь дело в планами, размеры маппингов (длина и ширина) обычно задаются в коде, а я думаю, тебе сильно придется увеличить размеры под твою новую надпись. Если что, постараюсь помочь с кодом.
  24. Соглашусь с Kaoma777, облака в желтом небе не могут иметь синие рефлексы, так как рефлекс есть отражение цвета окружения, а окружение оранжевое. Первый вариант тоже далек от идеала, в основном за счет тех же рефлексов и ошибке со светом-тенью. Понять как оно должно быть просто - достаточно посмотреть как оно выглядит в жизни:
  25. Если ты используешь в S1HS арт мониторов из С3, то там вместо монитора S монитор Electric Shield, как ты и показал. Маленький недочет, думаю, стоит исправить его в будущих версиях. В арте из С1 все нормально, так же можно отключить замену арта и вручную перерисовать арт из С3 в тайловом редакторе. Если ты изменял подводную палитру LZ в SonED, значит ты редактировал файл pallet\lz_uw.bin. Если редактирование цветов Соника в нем не дало результатов, то наверное его палитра хранится не там, а в pallet\son_lzuw.bin. Я не проверял эти файлы, но судя по названию, это то, что нужно. Если под активацией этого монитора ты подразумеваешь добавление Супер Соника, то должен сказать, в коде финальной версии Соник 1 нет ни одного упоминания о том, что должен был делать S-монитор. Так что "активировать" его не получится, а получится только запрограммировать с нуля. Кстати, посмотрел гид про активацию очков. По его названию можно подумать, что он заставит монитор очки (Goggles) что-то делать, я кстати сначала по ошибке так и подумал. Но если взглянуть, то автор просто добавляет в код Obj2E (содержимое мониторов) еще один бранч, благодаря которому будут различаться мониторы S и Goggles, так что можно запрограммировать их на разные действия. В первоначальном коде мониторы S и Googles не различаются и для обоих работал один и тот же код, который ничего не делал. Гид же предлагает "заготовочку", где мониторы различаются и у каждого свой код, который ничего не делает. Автор поразумевает, что читатель потом сам запрограммирует каждый из мониторов, как ему нужно (хотя в секции Example Code есть примитивный пример кода). Вобщем, гид неполноценный, и не почти никакой практической пользы не несет. Хотел бы внести в код важные поправки: Obj2E_ChkS: cmpi.b #7,d0; does monitor contain 'S' bne Obj2E_ChkGoggles; if not, branch to Goggle code addi.w #50,($FFFFFE20).w; add 50 to rings addi.w #50,($FFFFFF98).w; add 50 to rings collected ori.b #1,($FFFFFE1D).w; update the rings counter move.w #$B5,d0 ; play ring sound jmp (PlaySound).l В твоем коде пропущен PlaySound, чтобы воспроизвести звук, а еще команда ADDQ, которая означает (ADD Quickly) работает только с числами от 1 до 8. Была бы ошибка компиляции.
  • Сейчас на странице   0 пользователей

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

×