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

vladikcomper

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

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

  • Посещение

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

    8

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

  1. Никакой это не баг =Р Ведь код изначально загружал один и тот же арт для каждого из трех актов, потому что так и было задумано. Ясное дело, нужно изменить код, чтобы игра загружала свой арт для каждой зоны. Я быстренько пробежался глазами по тому гиду и пришел в ужас. Нет, дело не в его размере, а в самом способе, который предлагает HPZMan. Метод очень громоздкий и неудачный, особенно плохо иметь три различные версии Main level load blocks и Pattern Load Cues. В процессе разработки хака это может сильно усложнить добавление нового арта для объектов и манипуляции существующим. Еще одна серьезная проблема, которая и могла стать причиной бага, - гид рассчитан на арт GHZ, разделенный на 2 файла. В S1 Hacking Studio 2 был применен гид по слиянию арта GHZ в один файл, чтобы не было проблем с редактированием тайлов GHZ в SonED2. Тогда встает вопрос - как ты распределил файлы? В S1HS2 для Грин Хилла используются не 8x8ghz1.bin и 8x8ghz2.bin, а один файл - 8x8ghz.bin. Но, то, что ты создал копии Pattern Load Cues по гиду должно было исправить проблему. Ты все сделал правильно, то все должно загружаться. Но раз арт используется старый, то тут много вариантов: 1) Неверно распределены файлы 2) Ошибка в Pattern Load Cues 3) Ошибка в SEP-файлах SonED'а 4) Ошибка в коде (маловероятно)
  2. Я тебя совсем не понимаю. Можешь расказать последовательно и подробно? Я долго пытался понять, что какую имменно проблему ты показывал на скриншотах, но до меня так и не дошло.
  3. Ты сделал для каждого акта Грин Хилла отдельный арт, да? Если все сделано правильно, тогда остаются SEP-файлы. Если ты для каждого акта не изменил путь к арту, то, разумеется, все акты будут использовать одни и те же тайлы.
  4. LevSelTextLoad: ; XREF: TitleScreen lea (LevelMenuText).l,a1 lea ($C00000).l,a6 vram $E210,d4; screen position (text) <------------- move.w #$E680,d3; VRAM setting moveq #$14,d1; number of lines of text Прорисовка меню Левел Селекта происходит в LevSelTextLoad. Для отображения меню используются плановые маппинги. А это, в свою очередь, таблицы с ячейками 8x8, в каждой из которых можно размещать тайлы. В Соник 1 всегда (кроме SS) используются планы размером 512х256 пикселей, т.е. в таблицах планов 64х32 ячейки. В других режимах они бы занимали больше памяти, так что выбран минимально возможный размер. Выглядит это дело так: Синяя область - экран 320х224, в котором все и отображается. Данные плановых маппингов (таблиц) размещаются во VRAM, обычно начиная с адреса $C000 (план А) и $E000 (план Б). Для описания каждого тайла нужно 2 байта (флаги + номер тайла), все размещается последовательно, т.е. в $E000 - первый тайл, в $E002 - второй и т.д. Поскольку ширина таблицы - 64 тайла ($40), вторая строка таблицы начинается с адреса $E080 ($40*2 = $80), третья $E100 и т.д. В коде я выделил строку "vram $E210,d4". Она указывает на адрес в памяти, с которого начинается заполнение "таблицы" тайлами букв, это начальная ячейка, с нее начинает рисоваться все меню. Изменив адрес, можно переместить все меню куда угодно. Если ты хочешь переместить все меню выше или ниже, к адресу надо прибавить или вычесть из него $80, например: vram ($E210-$80),d4; поднять на одну строку вверх vram ($E210+$80*3),d4; опустить на три строки вниз
  5. Сторого говоря, хакинг игр незаконен. Это так. В то же время Сеге абсолютно все равно, что коды старых игр уже давно почти полностью вскрыты. Это уже не их передовые разработки, которые не должны были попасть в руки к другим компаниям, они были таковыми лишь 20 лет назад. Коммерческие проекты крупных компаний и свободные разработки фанатов-энтузиастов - это разные вещи. Соник Тим абсолютно равнодушны к тому, что пара любителей сделала бесплатную игру/хак с участием их маскота, они не составят им конкуренцию, никак не повлияют на бизнес (если это произойдет, они подадут в суд и будут правы). А фанатам-энтузиастам, которые добровольно посвящают свое время на разработку их фанатских проектов, далеко не наплевать на свой контент - и они имеют на него негласное право, с которым обычно относятся с должным пониманием и уважением в большинстве сообществах (жаль, что в русских сообществах много людей этого не понимают), - авторское право. Например, я не хочу, чтобы в каком-нибудь другом хаке были такие же боссы, как у меня, чтобы кто-либо пользовался моим дизайном Title Cards или меню (речь идет о полном или частичном копировании моего арта и кода). Этот контент полностью мой, я рисовал арт, программировал объекты с нуля, потратил на это много времени. Думаю, нет смысла объяснять, почему я этого не хочу. Имею право, авторское право. Авторы сами решают, что делать с их разработками. Они могут оставить их для себя, могут использовать в своих проектах, а могут и выложить исходники в свободный доступ. Это обычно говорит, что автор разрешает всем использовать свои наработки. Авторские права обычно принято уважать. При использовании чьих-то разработок, имена их авторов добавляют в Создателей (Credits), перед их использованием у авторов спрашивают разрешение. Вообще, зачем филосовствовать на тему законности кражи контента, если можно просто спросить? "Можно мне использовать Х из вашего хака Y?" И все. Какие проблемы? Невыполнимое задание? В наше время с нужным человеком связаться обычно легко. Не вижу смысла уважать/поощрять воровство. Вряд ли тебе понравилось бы, если, например, кто-то взял бы твою работу и заменил твое имя в создателях своим. Кому-то может не понравится, что без спроса используют их спрайты/музыку. Я пока не видел того сумасшедшего, кто кричал "Это я написал весь код в Соник 1!!!111" Его не выкладывали в общий доступ. Я и не говорил, что в этом уверен. В своем посте я писал: "Хотя не исключу, что он все же смог бы это сделать сам." Затем следует главная мысль, которую я хотел передать: "Одно НО: он плюет на авторские права, использует чужой код, зная, что это запрещено, поэтому нет оснований ему полностью доверять." Хочется верить, что это так. Я не буду утверждать, что это плохо. Просто я видел несколько случаев, когда авторы удаляли свои гиды, мотивируя это массовым злоупотреблением новой способности и отсутсвием желания делать что либо еще (хотя желания клянчить у автора новые крутые гиды было навалом). По поводу конкретно этого гида - тебе решать. Мой аргумент лишь в том, что это дело с Open Source проектом весьма сомнительное. Если ты доверяешь OuricoDoido и считаешь, что разрешено использовать этот код - выкладывай.
  6. Версия Мегамикса могла утечь не сразу после выхода третьей версии, а в процессе разработки следующей. Вполне вероятно, что утекла не третья версия Мегамикса, а, например, версия три с половиной. Я посмотрел его гиды. Действительно, он выглядит как компетентный человек, хорошо знает геометрию и математику, в состоянии применить свою теорию в коде. Хотя АСМ он знает недостаточно хорошо. Это я могу сказать, изучив его код. Он использует только signed-бранчи, описанные в базовых гидах, не знает значения строчки addq.l #4,(sp), пихая ее куда попало в коде своих способностей, не знает про команды ASR/ASL/LSR/LSL. Этих знаний достаточно, чтобы реализовывать нужные ему математические рассчеты, но недостаточно, чтобы выполнять порты объектов. Хотя не исключу, что он все же смог бы это сделать сам. Одно НО: он плюет на авторские права, использует чужой код, зная, что это запрещено, поэтому нет оснований ему полностью доверять. Подумай, прежде чем делать такие гиды, если только ты не хочешь стать вторым OuricoDoido.
  7. Если это будет полностью твой гид, если ты сам портировал Тейлза от и до, тогда тут даже не надо спрашивать - делай, как считаешь нужным, ты вправе делать со своими работать все, что сочтешь нужным. Но ты пользовался кодом из Sonic Open Source Project, либо позаимствовал его части. В этом случае публиковать код/способ добавления, который с вероятностью 90% украден из третьего Мегамикса, не следует. Даже если ты сам напишешь гид, это не означает, что ты можешь использовать работу Team Megamix без их разрешения (которого, скорее всего не будет, увы).
  8. Для шара оно нигде не прописано, у него даже нет скрипта анимации. Так как анимация примитивна (замена кадра с 0 на 1 и обратно), ее реализовали прямо в коде, без скрипта. Если ты работаешь в обычном дизасембле, очень бы советовал взглянуть на тот же код (Obj3F, Obj48) в S1HS2, там я его очень классно расскоментировал, должно быть в разы понятнее. Вот нужный тебе код смены кадров для шарика. Код в дизасембле S1HS2: Obj48_Ball: ; XREF: Obj48_Index moveq #0,d0; use frame #0 tst.b $1A(a0); test ball mapping frame bne.s Obj48_Vanish; if its not zero, branch addq.b #1,d0; use frame #1 Obj48_Vanish: move.b d0,$1A(a0); update mapping frame Тот же код в обычном дизасембле: Obj48_ChkVanish: ; XREF: Obj48_Index moveq #0,d0 tst.b $1A(a0) bne.s Obj48_Vanish addq.b #1,d0 Obj48_Vanish: move.b d0,$1A(a0) Кстати замечу, что код этот можно классно оптимизировать, удалить все строчки выше, а вместо них просто написать: bchg #0,$1A(a0) BCHG (Bit Change) - очень полезная команда, меняет заданный бит с 0 на 1, и с 1 на 0. В этом случае все идеально подходит: изменяя бит #0 (он стоит в самом начале), значение $1A(a0) будет меняться с 0 на 1 и обратно. Если тебе нужно, чтобы кадр менялся не каждый раз, а через определенное время, достаточно доработать код выше и ввести счетчик: Obj48_ChkVanish: (Obj48_Ball:) subq.b #1,$3F(a0) ; вычесть 1 из счетчика bpl @skip; если он положителен, переходим bchg #0,$1A(a0) ; иначе, меняем текущий кадр move.b #5,$3F(a0); установить счетчик на 5 кадров @skip: movea.l $34(a0),a1 ; продолжение старого кода <...> Наверное, так и есть. Кстати, S1HS2 в плане звукового драйвера ничем не отличается от обычного дизасембла, не думаю, что это как-то связано с ним. У меня нет никаких идей по поводу того, из-за чего такое могло случиться (я плохо знаком с SMPS), хотя могу подсказать пару суброутин, которые помню: Sound_ChkValue - выбирает, какой звуковой эффект воспроизводить (он должен бранчить на Sound_D1toDF для Спин Дэша). Sound_D1toDF - сам код, воспроизводящий звук. Кстати, есть легкий способ узнать, вызывается ли Sound_D1toDF или нет. Добавь в начало его кода команду jmp * Если код по каким-то причинам не вызывается, при воспроизведении звука ничего не произойдет. В противном случае, игра зависнет. Часто использую такой трюк при отладке, чтобы узнать, работоспособны ли разные части моего кода - помогает ch8D
  9. Кстати, в описании к видео есть ссылка на новую версию. Судя по словам, это даже не демо, а пред-финальный релиз: "Do not mistake this to be the final version, as there may still be a few bugs or annoyances, which you are welcome to comment on." http://www.mediafire.com/?9g0km129bx2cknt UPD: Скачать и прошел. Это демо одного уровня, а я на минуту подумал, что какой-нибудь пред-финальный релиз =) Я не следил за проектом, но исходя из его возраста, подумал на полную версию и обрадовался. Игра очень поравилась графически, ломающиеся на мелкие куски предметы выглядят очень зрелищно. Единственное, что напрягало при первом прохождении - устройство уровня, не знаешь, что от него ожидать. То мчусь на скорости, наслаждаясь видом, а тут вдруг - пропасть, над которой выложена дорожка из колец. Надо медленно нажать C чтобы промчаться по ним, но это настолько неожиданно после ускорителей, что просто не успеваю среагировать. Еще можно часто вылетать в пропасти, если увлечься Спин Дэшем. И все же, потратив ровно 7 жизней, я прошел игру. Несмотря на количество смертей, игра впечатлила :)
  10. Можешь начать с этого гида: http://info.sonicretro.org/SCHG_How-to:Add_Extra_Characters Будет конечно, не как в S2 Heroes, но уже что-то.
  11. Э... чего? Какой файл? В S1 Hacking Studio есть дизасембл, из которого собирается РОМ с хаком, никакие дополнительные файлы не нужны. Может только, ты захочешь импортировать что-либо из прошлых своих хаков в новый, если те были сделаны на ESE, тебе поможет Porter.
  12. Какую область? Если ты про размер уровня, то его можно изменять Ctrl + Вверх/Вних/Влево/Вправо.
  13. Чтобы установить его, скачай Кегу, открой в дистрибутиве папку Video Codec, там будет кодек и INF-файл. Щелки по INF-файлу и выбери Установить (Install).
  14. Разработки хака, медленно, но продвигаются. Поскольку давно не было новостей о хаке, спешу показать прогресс за несколько месяцев с момента последнего видео. К сожалению, многое из того, что сделано, я показать не могу, так как оно не доделано или находится в тестовом/нерабочем состоянии. Наконец-то я решил чуть серьезнее заняться графикой =) Очень надеюсь в конце концов заняться уровнями и их артом, но до этого надо завершить еще несколько целей. Между тем, хак окончательно стал мультиязычным. Оба языка: и русский, и английский - предоставлены в одном РОМе. Для Title Cards и Level Results Cards я разработал новый дизайн, шрифт и все их элементы были нарисованы заново. Объекты, управляющие ими, были переписаны с нуля, так что теперь они не имеют ничего общего с оригинальными. Меню паузы тоже было переделано, у него теперь более красивый дизайн (сравните с тем, что было показано на прошлых видео), а еще более гладкая анимация. Пока что все, хотя нет, держите небольшой бонус :) SQWA2_VideoBonus.7z (чтобы его воспроизвести, установите Kega Video Codec)
  15. Второе. Не надо было менять команды bra, они там не с проста. В GameModeArray все завязано на оффсетах инструкций. В оригинале все было так: - При GameMode=0, MainLoop прыгал к GameModeArray, а там находилась команда bra.w SegaScreen - При GameMode=4, MainLoop прыгал по оффсету (GameModeArray+4), а там было bra.w TitleScreeen Программа не знает, где в GameModeArray заканчивается одна инструкция и начинается другая, она лишь прыгает к оффсету (GameModeArray+GameMode), где GameMode ($FFFFF600) всегда увеличивается на 4. То есть, рассчет такой, чтобы каждая инструкция занимала 4 байта, тогда все будет работать верно. Заменив bra на jmp, ты увеличил все инструкции до 6 байт. Так что MainLoop прыгает не туда, куда надо, отсюда зависания. С jmp SegaScreen все еще работает, потому что он в самом начале списка. Какой бы ни был размер, но в начало списка MainLoop прыгнет правильно. Пути решения могу привести два: Первый. С минимальными затратами: GameModeArray: bra JmpTo_SegaScreen; Sega Screen ($00) <...> ; А после GameModeArray вставляем наши "костыли": JmpTo_SegaScreen: jmp SegaScreen Второй. Надежный и практичный MainGameLoop: moveq #0,d0 move.b ($FFFFF600).w,d0 lea GameModeArray(pc),a0 movea.l (a0,d0.w),a0 jsr (a0) bra.s MainGameLoop <...> GameModeArray: dc.l; Замени все bra на dc.l
  16. Доработать я его как раз хочу, если будет достаточно времени, сделаю редактор более гибким.
  17. А зачем? Пусть будет английская отдельно от русской, что плохого? =) Или ты хочешь сказать, что иногда хочется сменить язык программы и поработать в иноязычном интерфейсе?
  18. Мультиязычность - нет. Если я выпущу английскую версию, то отдельно. У меня программа будет максимум в двух языках, мультиязычность в этом случае делать излишне. Кстати, S1HS2 была переведена на ангийский почти одновременно с выходом русской версии, спустя день вышел приватный Unofficial English Patch 01. Я не стал размещать его здесь, поскольку в этом не необходимости. Если кому интересно, вот тот самый патч, точнее, его более свежая версия (02): http://vladikcomper.narod.ru/download/S1Ha..._En-Patch-02.7z Кстати, пока не спешу публиковать программу на Ретро. Причину этого более полно выражают слова Tweaker'а: (линк на пост) В целом, я согласен с Твикером, и считаю что иностранное комьюнити может обойтись без инструментов такого плана, плюс мне лень переводить текст Справки, хотя я уже перевел один раздел. Хотя я очень хотел бы зарелизить Creditor, так как считаю, что это действительно будет полезным инструментом.
  19. Знаю, поэтому я и сказал "на большинстве компьютеров", но не на всех. Путь по умолчанию (C:\s1hacking.bin) - просто placeholder, сделан для того, чтобы компиляция сработала даже у тех юзеров, которые не потрудились предварительно его настроить. В идеале, перед первой компиляцией надо изменить этот путь на подходящий, про это я как раз говорю в Справке ("Установка и настройка программы").
  20. Спасибо, это я давно знаю. Если бы я не знал таких основных вещей, то в жизни бы не написал подобной программы. Дело в самом файле настроек. Он присутствует в программе с самого начала, и он предварительно настроен. Можно конечно и исправить положение, генерировать этот самый путь, если программа запускается впервые, но я думаю, оно того не стоит. Да, такую возможность хочу предусмотреть. Может, сделаю программу для авто-обновления, как то было при выходе версии 1.1. Скорее всего, все жизненно важные файлы в новой версии окажутся полностью совместимы с предыдущей, для этого я специально зарезервировал несколько байтов в файле с конфигурацией.
  21. Да, без нее действительно неудобно, в новой версии сделаю. Реализация этого требует дополнительных затрат, вряд ли оно того стоит. Все в дистрибутиве программы настроено заранее, в том числе файл data\hack.bin, в котором хранятся все настройки хака, изменяемые через S1HS. Поскольку полный путь к программе я угадать не смогу, решил ограничиться универсальным путем, который должен точно существовать на большинстве компьютеров. Как ты его запускаешь вручную? Умный Генс, например, запоминает папку, в которой был открыт РОМ, достаточно нажать Ctrl+G и вбить первые букы из имени хака, снизу отобразится список подходящих файлов (обычно их мало), выбираем из списка нужный хак, Enter и всё. Хотя это может сильно надоедать при частых перекомпиляциях. Кега еще умнее: она запоминает имя последнего открытого РОМа, так что там достаточно лишь нажать Ctrl+G, затем Enter. Кнопку Запустить наверное сделаю, она будет опциональной. Менеджер музыки очень неудобен, это точно. Я давно собираюсь его переделать, новый менеджер музыки и обещает быть главным новвовведением в грядущей версии 2.1 t^_^
  22. Тайтл скрин зависит от этого, если изменить стартовый уровень, весь тайтл скрин будет сбит и загружен неправильной графикой. Эту проблему можно будет решить, но на момент разработки я решил оставить все как есть.
  23. Нет, задний план же ограничивать не нужно - ограничился передний заданной позицией - и все, куда заднему плану деться? =Р Там дальше нижняя граница уровня (тоже в пикселях), остальное не помню. Он не смог загрузить ни одного файла, указанного в *.sep. Открой *.sep-файл, там прописаны пути, откуда загружать арт, палитры и вообще все данные игры, которые будут редактироваться. Еще загляни в консольное окно, там после открытия проекта SonED2 пишет, какие файлы он не смог загрузить. В твоем случае он не смог загрузить ни одного файла, потому что в дистрибутиве SonED2 их нет, тебе нужен еще и дизасембл игры. Даже когда он появится, тебе надо будет переписать все пути в *.sep файлах (очень долгая работа). Не знаю почему, но имена файлов данные в SonED'овских файлах, не совпадают с дизасемблом. Советую скачать S1 Hacking Studio 2, там и SonED2, и дизасембл, а *.sep файлы на него уже настроены.
  24. Пара замечаний по коду: Как вижу у тебя предоставлено целых два варианта кода, второй из которых не работает (перед ним стоит бранч, он препрыгивается. Однако, с кодом все впорядке. Я не знаю, как у тебя устроены персонажи, но думаю, надо еще позаботися о загрузке DPLC, еще много зависит от того, когда этот код вызывается. Кстати, тот код, который у тебя не вызывается на самом деле очень хорош и должен работать как нужно, надо только очистить d0, чтобы не было глюков. Так что можно упростить твой код до такого состояния: Map_Character: moveq #0,d0 move.b ($FFFFFFFE).w,d0; d0 -> ChrId lsl.w #2,d0 ; d0 -> ChrId * 4 move.l Map_Characters(pc,d0.w),($FFFFD004).w rts Map_Characters: dc.l Map_Sonic; Sonic dc.l Map_Knuckles; Knuckles Если кроме Наклза никого не будет, можно бойтись максимально простым вариантом (с стиле твоего текущего кода, только проще): Map_Character: move.l #Map_Sonic,($FFFFD004).w; load Sonic maps tst.b ($FFFFFFFE).w ; is character flag zero? beq @Return ; if yes, branch move.l #Map_Knuckles,($FFFFD004).w; load Knux maps @Return rts В SonED2 это делается нажатием Ctrl+Вправо/Вниз. Так расширяется только массив, содержащий расположение чанков уровня. Кстати, в Sonic 1 все же есть лимит, и уровни не могут быть шире некой границы. Однако, не в зависимости от размера массива, границы уровня все же задаются в игре отдельно: Да, в этом файле как раз находится то, что нужно. Здесь задается много чего, в том числе крайняя правая граница уровня в пикселях. Каждая запись, как уже сказал Кул Спот, занимает $C байт. Крайняя граница камеры начинается с четвертого байта каждой записи (если считать с нуля). На картинке выделена граница камеры в GHZ3.
  25. Скорее всего, те спрайты, что ты взял из хака авторы нарисовали сами. Они просто взяли вышеупомянутые адвансовские спрайты за основу. Но не думаю, что Thorn и DNXDelta жадные люди, думаю они не откажут, если их вежливо попросить. :) Надо только спросить, их ли это спрайты и можно ли их использовать.
  • Сейчас на странице   0 пользователей

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

×