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

vladikcomper

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

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

  • Посещение

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

    9

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

  1. Illegal Instruction навряд ли можно вызвать неверным расположением объектов, оно в худшем случае может привести к глюкам, хотя игра в большинстве случаев со всем прекрасно справляется. Думаю, это связано с неправильным заданием подтипа объекта, в SonED2 он отражается вторым байтом в "Object Type Id:", а его двоичное значение показано чуть ниже в свойствах объекта, в строчке "Bits:". Этот байт задает свойства объекта, например тип монитора или количество колец и их расположение. Если СонЭд хорошо "знает" объект, он будет расшифрововать разные значение байта, отображая дополнительные строки, например "Param Field 0: 4 Rings" и т.п. Очевидно, многим объектам хватает использования лишь нескольких бит для определения различных своих вариаций, поэтому байт подтипа объекта не может принимать какие попало значения. Если по неосторожности задать неверное значение, в лучшем случае объект будет работать неверно (например, пружина будет отбрасывать в противоположную сторону), а в худшем - illegal instruction. А получается он вот как: Obj2F_Types: ; XREF: Obj2F_Action moveq #0,d0 ; очистим d0, а то мало ли, какой там мусор завалялся move.b $28(a0),d0 ; премещаем подтип объекта в d0 andi.w #7,d0 ; применяем побитовую маску, оставляем только первые три бита числа add.w d0,d0 ; удваиваем его! move.w Obj2F_TypeIndex(pc,d0.w),d1 jmp Obj2F_TypeIndex(pc,d1.w) ; ======================== Obj2F_TypeIndex: dc.w Obj2F_Type00-Obj2F_TypeIndex dc.w Obj2F_Type01-Obj2F_TypeIndex dc.w Obj2F_Type02-Obj2F_TypeIndex dc.w Obj2F_Type03-Obj2F_TypeIndex dc.w Obj2F_Type04-Obj2F_TypeIndex dc.w Obj2F_Type05-Obj2F_TypeIndex ; ======================== Этот пример кода как раз объекта MZ, который в исходнике назван "large moving platforms". Здесь подтип объекта в определенном месте используется как указатель на одну различные роутины, которые отвечают за то, каким образом будет двигаться объект. Игра рассчитана на то, что он будет принимать значения от 0 до 5. Если значение будет иным, команда jmp прыгнет не на определенную роутину, а в абсолютно случайное место, что в большинстве случаев вызовет Illegal Insturction, либо Line 1010 (1111) Emulator. Несмотря на то, что умный код применяет маску и оставляет только три бита числа (чтобы оно было в пределах от 0 до 7), ошибки все равно возможны, если эти три бита составят 6 или 7. Расскажи ситуацию подробнее. Где поставил? В какой зоне? Делал ли что-нибудь с кодом или артом? Мы не можем постоянно догадываться, что ты делал, чтобы поставить гусеницу и как выглядит недогруженный спрайт Мотобага, так расскажи по-нормальному, тогда у людей будет больше шансов помочь тебе или догадаться о причине проблеммы.
  2. Плохой из тебя кэп. Это и игра, и хак. Оригинальный Соник 1 был игрой, почему хак на него должен быть чем-то иным? Называть SQWA игрой никто не запрещал. Да, уже подумываю о переименовании t^_^ Кстати, несмотря на то, что игра разрабатывается уже в течение долгого срока, она все же может называться Quick, так как в будущей версии планируется только две зоны. Относительно иностранного хакерского комьюнити, их тоже очень мало.
  3. Там рядом с буквами R, G и B есть микроскопические стрелочки, именно на них надо нажимать для изменения цвета. Это очень неудобно, но таков СонЭд, поэтому советую иногда разворачивать программу на весь экран, чтобы не портить зрение.
  4. Приятный небольшой хак. t^_^ Музыка весьма неплохая, особенно в GHZ2 и на титульнике. Также радуют АСМ изменения, такие как более удобный левел селект и другой способ завершения уровня, единственное, не пойму, почему отсутсвует Спин Дэш - неотъемлимый аттрибут современных хаков, без него играть иногда неудобно.
  5. Вот, это уже во много раз лучше t^_^ Очень приятно слушать, отличная работа.
  6. Ну блин, что нельзя по программке немного полазить? Во втором же меню - Editor, выбрав первый же пункт Tile Editor наткнешься на нужный тебе редактор палитр.
  7. Не торопите события. Я не могу по вашему желанию выложить хак. Ясное дело, он недоделан, некоторые вещи не связаны, некоторые не сделаны, некоторые не реализованы до конца. Запаситесь терпением и подождите некоторое время, ничего страшного не случится.
  8. Не баг, это родной неполноценный Jump Dash S1HS :) Да, есть гиды по портированию движков, посмотри на Ретро. Я ими никогда не пользовался, и сомневаюсь, что они полезны, потому что все нормальные хаки обычно используют новые DAC-движки, позволяющие добавлять больше DAC-сэмплов и даже использовать несколько банков по 32 Кб. Их всего два - драйвер Jman'а и драйвер Sonic Harder Levels. Гид по последнему легко найти на просторах SSRG (подфорум Tutotials кажется), все говорят, что он проще и удобнее в использовании, единственный минус - DAC-сэмплы должны быть сжатыми, это приводит к небольшой потере качества. Драйвер Jman'а немного получше, сэмлпы не требуют сжатия, но он с ним сложнее разобраться, причем драйвер давнишний (2006 года где-то). Его можно найти на форумах Ретро.
  9. Не всегда дело в количестве DAC-сэмплов. Поиграй в хак S1 Yarmar Edition ( http://www.fileden.com/files/2009/6/6/2467921/S1Yarmar.bin ), там музыка в первой же зоне взята из той же МИДИ, что и у тебя, использует те же 3 сэмпла, но звучит намного приятнее. Поиграй в SoniNeko, там почти все песни используют обычные сэмплы, но режущего слух звучания у них нет. Потому что дело не только в количестве сэмплов, но и в умении их правильно использовать.
  10. Инструменты хороши, но вот DAC-сэмплы не те... Слух режут.
  11. Вообще-то я только переводил гид, а создал его Cinossu, в самом гиде про это, кстати написано. =Ъ Ага, файлов нет, но умный код все равно загружает палитру с оффсетов, где они предполагаемо должны быть и натыкается на палитры других зон. Причем некоторые палитры (MZ2, SLZ2) очень даже прилично смотрятся. Не сталкивался с этой проблеммой у себя, но думаю, что это происходит из-за того, что таблица запоминаемых объектов переполняется. Дело в том, что игра не может держать все объекты уровня в памяти, поэтому объекты которые остались далеко за границей камеры приходится удалять, а новые погружать по мере прохождения уровня. Чтобы запоминать какие кольца были собраны, какие бадники были убиты, а какие мониторы разбиты, предусмотрена эта таблица. Если мониторов/бадников/колец слишком много, она, видимо, переполняется, из-за чего многие ее записи оказываются за отведенным пределом ($FC00-$FD7F) и игнориуются.
  12. Что надо: написать свой код. Увы, готовый код в личку тебе никто не даст, так как это не тот тип вещей, который можно раздавать всем подряд в готовом виде. Реализация счетчика миллесекунд требует наличия у хакера хороших навыков. Нужно хотя бы немного иметь представление про VDP и уметь работать с VRAM. Для этого необходимо ознакомится с документацией VPD: http://emu-docs.org/Genesis/Graphics/genvdp.txt и http://info.sonicretro.org/SCHG:VDP_Docume...n/General/Ports Отображение счетчиков минут и секунд происходит в суброутине HUD_Update, а именно здесь: loc_1C734: move.l #$5E400003,d0 ; запрос на запись во VRAM по адресу $DE40 moveq #0,d1 move.b ($FFFFFE23).w,d1; загрузить счетчик минут bsr.w Hud_Mins ; определяет нужные для цифр счетчика тайлы и записывает их во VRAM move.l #$5EC00003,d0 ; запрос на запись во VRAM по адресу $DEC0 moveq #0,d1 move.b ($FFFFFE24).w,d1; загрузить счетчик секунд bsr.w Hud_Secs ; определяет нужные для цифр счетчика тайлы и записывает их во VRAM Счетчик миллесекунд находится по адресу $FFFFFE25. Тебе нужно будет найти в видео памяти место, куда можно было бы записать 4 тайла и дополнить код примерно такими же строками, но запрашивать другой адресс VRAM и вызывать Hud_Secs после этого. И да, значение $FFFFFE25 надо будет домножить на 100 и поделить на 60, чтобы получить настоящие миллесекунды, дело в том, что байт этот обнуляется при 60, так как считает кол-во кадров, через которое нужно увеличивать счетчик секунд на единицу (1 секунда = 60 кадров). move.b ($FFFFFE25).w,d1 mulu.w #100,d1 divu.w #60,d1 swap d1 move.w #0,d1 swap d1 Если ты работаешь в S1HS, то это скорее мое небольшое упущение - я слил первичный и вторичный арты GHZ в один файл, чтобы не было проблем с СонЕдом, но забыл сделать изменения в коде. Исправить это несложно, нужно лишь проследовать этому маленькому гиду: http://info.sonicretro.org/SCHG_How-to:Sep...d_alternate_art
  13. S1HS был полностью переведен на английский, так что ты сможешь им показать.
  14. Когда я впервые увидел скриншотики, я первые несколько секунд пытался понять, что это за ночь в SQWA :) Серьезно, палитра очень смахивает на зимнюю, а в сочетании с русским HUD'ом немного напоминает палитру SQWA. Разумеется, это никакой не плагиат, просто совпадение =Ъ Думаю, чтобы палитра смотрелась как ночная палитра Зеленого холма, нужно немного прибавить количество зеленого в траве, сделать некоторые цвета в стенах темнее и приглушить синий в них. Но палитра - не главное в этом замечательном хаке. Главное - это отличная музыка и перевод. Я до сих пор слушаю песню $8E, так она мне нравится. Она безусловно лучше моих кривых портов в SQWA. Можно сказать, что ты - это русская версия nineko =P (да, кстати, твои порты напоминают по звучанию и стилю Нинековские)
  15. General Parametres -> Tempo, там есть два списка, выбирая в них разные значения как раз можно изменить темп, а еще есть кнопочка Calculate, которая в случае удачи подсчитает самый подходящий темп.
  16. Это да, но обычно маппинги никак от этого не страдают, потому что в коде игры на лейбелы в них никто не ссылается. Единственное исключение - маппинги на экранах Sonic Got Through/Special Stage/Chaos emerald, все они ради экономии места ссылаются на лейбел в маппингах Zone Title Cards, в этом лейбеле находятся маппинги овала (он же везде одинаков, вот и решили не повторяться). Поэтому эти маппинги не были вынесены в отдельные файлы для удобного редактирования в SonMapEd'е. А если их там отредактировать, то тут изменение названий лейбелов приведет к ошибкам.
  17. Маппинги спрайтов никогда не сжимаются. Сжимать нужно только арт (т.е. тайлы), если он берется из папки artnem\. Ну тут все за нас готов сделать SonMapEd, так как он поддерживает открытие и сохранение сжатого арта - посмотри меню File>Load Data File и File>Save Data File и все станет ясно.
  18. Не понимаю правда смысл вопроса про Ретро, но вот: http://forums.sonicretro.org/index.php?showtopic=18470 - топик с программой на форуме.
  19. Дело в том, что голова Соника не в лезет в старые маппинги, не хватит тайлов. Да и тайловом редакторе с этим управиться будет намного сложнее.
  20. Нужно проверить состояние байта $FFFFF603. Там прописываются кнопки, которые держатся в данный момент. Скорее всего, где-то в коде допущена незаметная ошибка, которая и приводит к такому глюку. Это может быть что угодно - забытое RTS, ссылка не на тот лейбел в жизненно-важных роутинах. Проверь, кстати Resize_SYZ, если ошибка происходит при определенной позиции камеры, возможно что-то не так там. Формат уровней с течением времени у Соников особо не изменялся. Графику можно скопипастить не задумываясь, надо только проверить, чтобы была сжата в Nemesis. С блоками 16х16 тоже проблем нет - их формат и в С1, и в С2 абсолютно идентичен. Единственная проблема - chunks (большие блоки), если в прототипе они 128х128, то придется повозится - при обычном копировании все просто напросто собьется.
  21. Все объекты, которые отображает SonEd2 определяются в папке SonEd2\objdef, описаны они в файле s1obj.lst, а их изображения находятся в pcx-файлах. Очень многие объекты не отображаются, потому что список неполный и многие изображения отсутствуют. Попробуй взять SVN-дизасембл из скопировать папку objdef оттуда, там список пополнее будет.
  22. Я бы с удовольствием перевел, если бы было время. Но в любом случае надо учиться понимать иностранные гиды, потому что без этого никуда.
  23. Втречался с таким глюком. SonED2 по каким-то причинам портит массив коллизий для блоков, и Соник начинает проваливаться сквозь пол в некоторых местах. Чтобы исправить проблему, нужно заменить файлы collide\carray_n.bin и collide\carray_r.bin на оригинальные.
  24. Спасибо за поздравления ^_^

  25. Импортируешь спрайты? Если новый спрайт получился больше предыдущего и не соответствует ему по форме, то некоторые его части будут обрезаны. Потому что SonMapEd при импортинге заменяет только использованные в пределах спрайта тайлы. Я никогда не занимался импортом спрайтов из изображений, так что не знаю, как лучше поступить. Советую почитать http://info.sonicretro.org/SCHG_How-to:Use_SonMapEd/Part_2 - там как раз описана именно такая проблема.
  • Сейчас на странице   0 пользователей

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

×