-
Публикации
947 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
9
Все публикации пользователя vladikcomper
-
Ну так желтые рамки тут не причем. Это не СоникСпрайт, где границы невозможно изменять. Скажи, что ты делаешь для замены Эггмана на Соника. Плохие результаты получаются из-за неправильных действий.
-
Ничего не понял. Что ты пытаешься сделать?
-
Settings->Miscellaneous->Outline Active Sprite/Piece boundaries
-
Огромное спасибо :fool: Статья - просто супер.
-
Это музыка формата Audio-CD, отсюда и качество. С тех пор как Мегамикс переместился на платформу Sega CD, я так и думал, что их следующий шаг - сделать музыку в этом формате, как это сделано в Sonic CD.
-
Перевод хорош. Конечно, есть шороховатости, нужно поработать над исправлением тайтл кардсов, перерисовать некоторые буквы. Но это не главное. Главное, что затронуты почти все тексты игры, что очень хорошо с точки зрения хакинга. Рад что у нас появился такой замечательный хак переводящий игру на другой язык. :D Соглашусь с Эдди однако. Соник - это не РПГ и не квест, где перевод остро необходим. С таким количеством текста не имеет смысла язык игры, потому что большая часть текстов понятна даже людям, плохо знающим английский. Однако не сказать, что это силы в пустую - это может сойти за отличную тренировку и повышения скилла для более серьезных проектов.
-
О, да! Похоже, Мегамикс действительно возвращается. Честно говоря, после затишья с момента последнего видео (с музыкой CD-качества) я не ожидал вновь услышать об этом проекте. Но похоже Мегамикс-ребята все это время упорно пыхтели над создением чего-то сногсшибательного. И они это сделали - все на самом высшем уровне. Искрене рад, что будет пятый Мегамикс.
-
Что-то совсем пропустил эти вопросы. Исправляюсь :D Надеюсь, они еще актуальны. 1) За твердость объекта отвечает суброутина SolidObject. Эта функция вызывается из других объектов, чтобы сделать их твердыми. Если ты полистаешь код Obj41 (пружины), ты найдешь там несколько вызовов этой функции. Бранчи на нее легко можно закоментить, и тогда пружина будет вести себя как пружина из Sonic CD (т.е. не будет твердым объектом, с которым можно столкнуться). Однако это скорее всего приведет к нарушению функциональности кода Obj41, т.е. пружина не будет срабатывать при запрыгивании на нее. Дело в том, что функция SolidObject задает объекту такие флаги, как "Соник стоит на объекте", "Соник толкает объект" и пр. (байт $22). Помимо этого она использует байт $25 как индикатор состояния твердого объекта (кстати, в некоторых объектах, например боссах, он используется в качестве счетчика вторичной роутины). Насколько я помню код Obj41, сразу же после вызова SolidObject, он бросается проверять этот байт, так что SolidObject для правильной работы пружин просто необходим. Но выход, разумеется, есть. Нужно реализовать в Obj41 некую альтернативу коду SolidObject. Сам SolidObject помимо установки флагов, еще и влияет на Соника - корректирует его координаты при столковении с объектом, сбрасывает скорости, задает ему флаги толкания объекта и пр. Можно посмотреть, как все реализовано в коде SolidObject и составить на основе этого свой код (который будет делать то же самое, кроме влияния на Соника). 2) Как исправить баг с камерой написано в гиде про Спин Дэш в разделе "Исправление багов". http://vladikcomper.narod.ru/sonic_guides_view.htm?3 Valentin the fox все верно показал, оба куска которые он дал, как раз отвечают за объекты животных (который один на всех). Мне остается только немного добавить ко всему вышепоказанному. В роутине Touch_Enemy, которая как раз отвечает за уничтожение бадников, объект бадника заменяется на объект 27 (points). А этот объект в свою очередь, генерирует взрыв бадника, вылетающие очки и вылетающего зверька. Мечты, мечты... Всем людям свойственно мечтать. У каждого из ~6,5 тысяч людей на этом форуме есть свои несбыточные мечты. А теперь представь, если бы каждый из этих шасти с половиной тысяч пришел бы в эту темку и стал фантазировать на тему "если бы я был мега-офигенны хакером...". Эта тема для материальных вещей, друг мой =Ъ
-
Небольшая поправка, MarkeyJester его выпустил. Selbi ему в этом деле помогал. А вот хак с Грин Хиллом сделал Selbi. Что ж, классно видеть, что развивается хакинг еще одной Сониковской игры. Но, боюсь, хакинг Крэкерсов мало кого заинтерисует, потому что сама игра слишком сильно недоделана, скорее даже представляет собой техно-демку, с кучей несоединенных воедино наработок. Зато благодаря этому дизасемблу можно будет изучить движок Крэкерсов и портировать оттуда физику нити, соединяющей два персонажа.
-
tst.b ($FFFFFE2D).w beq.s PowerSonic_Rts
-
Не знаю, что ты там делаешь, короче, вот: Obj01_ChkInvin: bsr.w PowerSonic <...> Можно было вставлять и сразу после Sonic_Display, но этот вариант лучше с точки зрения стиля программирования. Ежик огурец, лол. Интересный будет персонаж. 3-4 часа? О_о Вообще, такие вещи делаются за считанные минуты, если использовать SonED2. В самой первой версии SQWA мне хватило 30 минут, чтобы переделать 3 акта Холодного холма, изменить палитру GHZ и MZ и пририсовать льдинки к пальмам и цветам.
-
Лучше в Sonic_Display. CollectRing выполняется в момент собирания кольца, выполняется однократно. А в даном случае нужно, чтобы код выполнялся постоянно. Кстати, код можно упростить, вот так: PowerSonic: btst #5,($FFFFF602).w ; check if C button is held beq.s PowerSonic_Rts ; if not, branch cmpi.w #50,($FFFFFE20).w ; does Sonic have at least 50 rings? blt.s PowerSonic_Rts ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w; time limit for the power-up move.b #$38,($FFFFD200).w; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s PowerSonic_Rts ; if yes, branch move.w #$99,d0 jmp (PlaySound).l ; play invincibility music PowerSonic_Rts: rts EDIT: небольшая правка кода...
-
Чтобы понять суть своей проблемы, посмотри на суброутину MoveDemo_Record. Она служит для записи демок, но разве в финальной версии Соник 1 есть такая возможность? Там даже вверху даже есть коммент "This is an unused subroutine". Несложно догадаться, что она просто нигде не используется. Нигде в коде не вызывается, не запускается. Если перейти к Obj01_MdNormal и закоментировать "bsr.w Sonic_SpinDash", то же произойдет и с суброутиной Спин Дэша - она нигде не будет использоваться. Вот, то же и с твои кодом - он нигде не вызывается. Вставляя свой код куда попало, ты ничего не добьешься. Он не будет же выполняться самостоятельно, его надо вызвать из работающего кода. Не указал? А что же это тогда за число 6007 в скобках после SONIC1.ASM? Ошибка, как и я думал, совершенно не относится к вставленному коду и маппингам вообще. Просто где-то далеко есть большой бранч, оффсет которого после вставки кода превысил положенный лимит.
-
Ребят, все ваши проблемы в том, что вы всегда ищите причину ошибки в свежевставленном коде, отредактированной вами строчке и вобще в последнем действии, как будто вы его сделали не так, что повлекло возникновения ошибки. Потрудитесь почитать, что пишет умный компилятор, который для вас и имя файла, где ошибка случилась, указывает, и номер строки отображает и даже саму строку для наглядности иногда показывает. Я не экстрасенс, и не могу на расстоянии прочитать, какие связи нарушились в вашем коде после вставки нового куска. Потому что в данном случае в куске нет ничего противоествественного и запрещенного, так что Look-Tops, дай описание своей ошибки и скажи, на какую часть кода указывает компилятор. В коде есть несколько недочетов, как например rts после jmp и отсутствие выхода перед лейбелом "SonPow", но если ничего не происходит, то наверное код просто не выполняется. Скажи, где ты его вызваешь?
-
Ого, мой хак уже превозносят над Мегамиксом. Неожиданно :) Но не забывайте, что Мегамикс - почти новая полноценная игра, с новыми уровнями, новой графикой и музыкой. А у меня пока небольшой хак, в котором будет доступно лишь 2 зоны. Уровни мало изменены, им не хватает новой графики - здесь я ничего особо поделать не могу, потому что я неважно рисую. К тому же над Мегамиксом работала целая команда и делался он аш с 2005 года, догнать его по качеству будет сложновато. Хотя, возможно, я не буду работать в одиночку - один человек с Ретро сам изъявил желание помочь мне с уровнями и графикой в хаке. Пока что я делаю упор на коддинг и пишу для хака тонны кода, модифицируя движок, удаляя или переписывая его части, ну и естественно, создавая новых боссов. Поэтому я много времени работал над такими концептами, как система меню и невиданное нигде ранее меню паузы -_- По поводу новых персонажей, то их я добавлять пока не планирую. Мне сейчас нужно доделать систему меню и поработать над новыми боссами и исправлением багов. Возможно, после выхода новой версии, возьмусь за добавление новых персов. SONIC2010, ты не имеешь представление о работе режимов игры (что в GameModeArray), поэтому твой вопрос выглядит абсурдным. Сейчас объясню. Код режимов игры (SegaScreen, TitleScreen и др.) управляет отображением тех или иных экранов во время игры. Каждая из вышеперечисленных роутин очищает часть RAM-памяти, сбрасывает нужные флаги, перенастраивает регистры VDP, подготавливает и загружает маппинги планов, после чего входит в главный цикл (MainLoop) в котором и происходит отображение экрана и обработка нажатий клавиш. Взять и модифицировать ранее существующий режим игры, например, сделать из Тайтл Скрина то меню, что показано на видео, глупо и до невозможности трудно. Более разумный вариант - написать новый режим игры с нуля. Это очень трудно и требует глубоких познаний устройства сеги и навыков работы с VDP (видеопроцессором), поэтому подобные меню и прочие прелести есть в единицах хаков. Говорить о каких-то новых/старых мапингах здесь не целесообразно. Если у меня новые тайлы, новый шрифт, новое расположение элементов, то о каких старых мапингах идет речь? Да и что дадут тебе эти мапинги?
-
Ну, я стал счиать падающие камушки MZ и обновленного ХХХХ новыми боссами :) Потому что камни в MZ скорее сделаю как вступительную часть к новому боссу. А код ХХХХ был полностью переписан. на что ушло огромное количество сил, поэтому я считаю его новым. Чтобы понять, насколько сложно разрабатывать хороших боссов, приведу простые цифры - в коде ХХХХ-босса сейчас 472 строки, учитывая, что он очень круто оптимизирован и перестраивался много раз для упрощения. Но такой вот суровый АСМ.
-
Счастье и радость переполняют меня. Потому что сегодня, я наконец смогу показать широкой публике результаты многомесячной работы над хаком. Как и обещал, я выпускаю видео, демострурующее множество нововведений в грядущей, второй версии хака. В хаке произошли огромные перемены. Во-первых, сделаны новые боссы, часть из которых показана на видео. Во-вторых, как можно заменить, слушая музыку в хаке, DAC-сэмплы изменились на более современные аналоги. Это связано с тем, что в SQWA теперь используется новый DAC-движок (не путайте с портом звукового движка Соник 3 от Эзраеля). В видео также будет продемонстированы некоторые новые мелодии. За тему главного меню огромное спасибо Jet'у, который портировал ее из Magaman: The Wily Wars, что было очень сложным из-за разницы в SMPS-движках. Остальные порты - мои, сделанны в основном из Адвансов. Не буду сразу раскрывать всех нововведений, посмотрите видео о начала до конца и сами их увидите. В общем, наслаждайтесь :) Надеюсь, вам понравится. ^__^ P.S.: Очень реккомендую смотреть видео в качестве 480p, так как в остальных вариантах главное меню выглядит размыто.
-
Только что проверил свой код. Все работает. Вот фрагмент кода для справки: HurtSonic: subq.b #1,($FFFFFE2C).w; уменьшить значение флага на единицу bmi.s HurtSonic_Cont bra.s Hurt_Shield HurtSonic_Cont: move.b #0,($FFFFFE2C).w; исправляем значение флага щита (если оно негативно) tst.w ($FFFFFE20).w ; does Sonic have any rings? beq.w Hurt_NoRings ; if not, branch jsr SingleObjLoad bne.s Hurt_Shield move.b #$37,0(a1) ; load bouncing multi rings object move.w 8(a0),8(a1) move.w $C(a0),$C(a1) Hurt_Shield: ;move.b #0,($FFFFFE2C).w; remove shield move.b #4,$24(a0) jsr Sonic_ResetOnFloor bset #1,$22(a0) move.w #-$400,$12(a0) ; make Sonic bounce away from the object move.w #-$200,$10(a0) btst #6,$22(a0) beq.s Hurt_Reverse move.w #-$200,$12(a0) move.w #-$100,$10(a0) По поводу "странного глюка", то происходит он скорее всего из-за сдвинутой Y-позиции камеры. Y-позиция должна равняться нулю, тогда глюк пропадет. А Y-позиция сдвигается, если изменить стартовую позицию Соника в GHZ1. Возможно, редактирование Спешл Стейджев как-то поменяло на оффсеты, так как Спешл Стейджы сжаты и в зависимости от содежащихся в них данным могут заминать разное количество байт. Эх, как я ненавижу ESE... А кроме палитр все в порядке? Или есть еще неверные данные?
-
Неужели сложно убрать пару значков ";" перед публичным релизом? (=
-
Да все так, только суброутина HurtSonic не проверяет количество ударов у щита, а просто обнуляет все, если в адресе записано число, не равное нулю: HurtSonic: tst.b ($FFFFFE2C).w; проверить флаг щита bne.s Hurt_Shield; если флаг не равен нулю, переходим <...> Hurt_Shield: move.b #0,($FFFFFE2C).w; обнуляем флаг Модифицируй немного код, чтобы вместо обнуления из флага отнималась единица, как то так: HurtSonic: subq.b #1,($FFFFFE2C).w; уменьшить значение флага на единицу bmi.s HurtSonic_Cont bra.s Hurt_Shield HurtSonic_Cont: move.b #0,($FFFFFE2C).w; исправляем значение флага щита (на случай, если оно негативно) <...> Hurt_Shield: Неужели нельзя догадаться? Для этого нужно просто изменить порядок уровней. В Sonic High Force я изменил порядок уровней, чтобы, например за LZ3 следовал не SLZ1, а сразу FZ. Такая функция даже была в ESE, а Портер в S1HS сможет портировать измененный порядок в дизасембл. На всякий случай в моей програмке стоит проверка на размер файла. Если размер не равен 512 Кб, программа считает РОМ неверным, так как по логике большая часть перекомпилированных РОМов начинает весить 1 Мб. Не знал, что ESE иногда добавляет в РОМ лишний килобайт.
-
SonMapEd'ом это редактировать бесполезно. Это не спрайтовые маппинги, а маппинги планов в формате один байт на тайл. Программы для их редактирования к сожалению рассчитаны только на английский текст, так что их придется редактировать вручную. Формат, однако, очень простой - каждый байт в маппингах указывает на номер тайла из файла artunc\menutext.bin, начиная с нуля. Если открыть этот файл в тайловом редакторе, можно будет легко узнавать номер тайла с нужной буквой и записывать его в маппинги.
-
"Branch offset is out of range" происходит из-за того, что добавив строки нового кода ты сместил оффсеты лейбелов так, что они стали недосягаемы для некоторых branch-команд. Для нужно найти строку, на которой произошла ошибка (она в компиляторе указана в круглых скобках) и заменить: b**.s на b**.w bsr.w на jsr bra.w на jmp
-
В старом-старом билде Sonic High Force я как раз делал более быстрый способ доступа к Левел Селекту. Для этого достаточно пойти к лейбелу Title_EnterCheat и закоментировать часть кода, проверяющую ввод сочетания Up, Down, Left, Right. Title_EnterCheat: ; XREF: Title_ChkRegion ; move.w ($FFFFFFE4).w,d0 ; adda.w d0,a0 ; move.b ($FFFFF605).w,d0; get button press ; andi.b #$F,d0 ; read only up/down/left/right buttons ; cmp.b (a0),d0 ; does button press match the cheat code? ; bne.s loc_3210 ; if not, branch ; addq.w #1,($FFFFFFE4).w; next button press ; tst.b d0 ; bne.s Title_CountC lea ($FFFFFFE0).w,a0 move.w ($FFFFFFE6).w,d1 lsr.w #1,d1 andi.w #3,d1 beq.s Title_PlayRing tst.b ($FFFFFFF8).w bpl.s Title_PlayRing moveq #1,d1 move.b d1,1(a0,d1.w) Title_PlayRing: move.b #1,(a0,d1.w) ; activate cheat ; move.b #$B5,d0 ; play ring sound when code is entered ; bsr.w PlaySound_Special bra.s Title_CountC Тогда Левел Селект будет вызываться простым нажатием A + Start. Если нажат только Start, игра как обычно перейдет к первому уровню. Довольно удобно.
-
Нет, идея с клоном - это абсолютно рандомная мысль, которая пришла ко мне во время разработки. ^_^ Да и идея далеко не нова - ее использовали где только ни было не раз.
-
Сейчас на странице 0 пользователей
Нет пользователей, просматривающих эту страницу
