-
Публикации
947 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
9
Все публикации пользователя vladikcomper
-
Я опечатался, допиши "#": moveq #($F000-$D800)/$40-1,d5
-
Какое нелогичное, это русское коммьюнити. S1 Hacking Studio и русских гидов ему стало мало, и, насытившись ими, оно безжалостно требует Хоминг. Jackrost, написание игр с нуля и хакинг - разные вещи, и я бы не стал ставить между ними строгий знак "равно". Ты говоришь так, будто по хакингу Соников написано два несчастных гида - это совсем не так. Причина, по которой я не публиковал Хоминг проста - наше комьюнити на 90% состоит из асм-тимовцев. Дай им хоминг, они бы потребовали Light Dash, Супер Соника, новых боссов и далее по списку. Не для того я писал 895 строк кода нового GHZ-босса, чтобы отдать его первому встречному. А этот встречный появится, и будет безжалостно требовать, поверьте. А если делать все публично - этим "встречным" будет почти все наше хакерское коммьюнити. Впрочем, что вы все: "Хоминг-Хоминг", он уже доступен, так что не надо больше войн на эту тему. Если вы - нормальный компетентый хакер, милости прошу на SSRG, где вас ждет ваш смысл жизни. Ребята, вы просто молодцы! Не жалуетесь на вселенскую несправедливость, а делом занимаетесь. И как вижу, у вас немалые успехи.
-
В этом случае придется перебирать объекты внутри кода или бадника, или шипов. Если у тебя на уровнях много бадников и мало шипов (по количеству объектов), то лучше делать перебор бадников в коде шипов. В обратном случае, лучше перебирать шипы в коде бадника - это если ты хочешь, чтобы столкновение проверялось только какого-нибудь одного типа бадников. Предположем, ты будешь проверять столкновение с шипами внутри кода бадника. Основа для перебора будет примерно такой: tst.b 1(a0) ; бадник на экране? bpl @Quit ; если нет, не выполняем код lea ($FFFFD800),a1; первый слот обычного объекта в RAM moveq #($F000-$D800)/$40-1,d5; зададим количество перебираемых объектов (до последнего слота) @ObjectsLoop cmpi.b #$36,(a1); объект $36, (шипы)? bne @Next ; если нет, идем далее tst.b 1(a1) bpl @Quit ; проверка столкновения @Next lea $40(a1),a1 dbf d5,@ObjectsLoop @Quit rts Я специально проверяю, на экране ли объект и не выполняю код, если он за его границами, это даст небольшую оптимизацию, в которой код очень нуждается - если объектов много, а код написан неоптимально, появятся тормоза, причем большие. С проверкой стокновения надо будет повозиться. Можно воспользоваться кодом из TouchResponse (Touch_Height и Touch_Width), но его надо дополнить и изменить для работе внутри бадника. Код, уничтожающий бадника, можно взять из Touch_KillEnemy, заменив a1 на a0. Никогда раньше не слышал о такой проблемме, хотя есть у меня одна догадка о ее причине. Проверь, стоит ли у мостов "Remember Sprite" (не помню точно). Если да, то сними его, из-за этого объекты могут не создаваться после самоудаления.
-
А мне понравилось, особенно дополнительные детали - тени и какая-то огромная вертикальная планка. Такая глубокая перерисовка уровня не может не радовать, судя по скрину, уровень теперь имеет мало общего с оригинальным MZ. Может быть, надо еще чуть поправить палитру/текстуры блоков (на может быть, что-то менее раскаленное и яркое). Еще не могу не сказать про новый HUD - выглядит он довольно красиво и приятно. Единственное, что бросается в глаза - очень странно нарисованная цифра 8 и слово "TIME", может, такой эффект создается из-за лавы, окружающей его, но буквы слова кажутся неровными.
-
Нет, я никого не разыгрывал. Это пасхалка, я это сделал просто ради прикола, чтобы скрасить трудоемкий процесс разработки =Р По поводу Кредитора - это режим отладки (Debug Mode). Он был очень полезен на ранних стадиях разработки, его можно увидеть на одном из скриншотов программы, который я выкладывал еще до релиза.
-
Видимо лейбел LSelectPointers сместился слишком далеко от оффсета этой инструкции, перемести его поближе и ошибка будет исправлена. Дело в том, что в таком режиме адресации оффсет лейбела задается 8-битным знаковым значением, показывающим, насколько выше или ниже оффсета инструкции находится лейбел. Поскольку значение 8-битное (один байт), возможный диапозон очень мал, если я правильно помню: от -127 до 127. То есть, если лейбел находится в переделе 127 байт от инструкции, все в порядке, но стоит ему отдалиться, возникает ошибка.
-
Хехе, вот и нашли эти интересные строки =) Это пасхалка, в S1HS не было и в ближайшее время не будет Хоминга и секретных настроек. Для себя я такие скрытые опции не стал делать, мне проще делать все в самом коде. Впрочем, S1HS2 я активно использую, при разработке мини-хаков, если нужно опробовать концепт на новом дизасембле или по просьбе разработать какой-нибудь новый компонент для хороших иностранных хаков. Кстати, в SQWA2 от S1HS2 используется менеджер музыки, переписанный и подстроенный под особенности хака, потому что этот менеджер для меня очень удобен. Кстати, файлы с расширением DAT лучше открывать в Блокноте. Если кому интересно, вот для чего предназначены некоторые из них: menu.dat - отвечает за меню со вкладками. Его можно безбоязненно редактировать, меня названия вкладок, а если разобраться в формате, можно удалять подвкладки, менять их расположение и группы (но не думаю, что это кому-то понадобится) musicset.dat - там перечислены номера слотов, в которые Менеджер музыки будет записывать песни со вкладки "Прочее". Номер даны в таком же порядке, как в каком песни отображаются во вкладке Прочее. musiclist.dat - список групп, используемый Менеджером песен. Вообще, в S1HS2 целых две пасхалки, думаю другую некоторые уже нашли, ее обнаружить не очень сложно. Еще есть одна скрытая функция. Нажмите Esc в Кредиторе, и увидите ее. Нажимать надо, когда фокус установлен на область редактора.
-
DPLC = Dynamic Pattern Load Cues, что в переводе означает "Команды подгрузки динамического арта". Это команды, они не отвечают за спрайты, они указывают, какие тайлы подгружать. Поскольку арт Соника занимает 42 Кб, и это только в оригинале, загрузить весь этот арт во VRAM, которой всего 64 Кб неразумно. Поэтому подгружаются только те тайлы, которые нужны для отображения текущего кадра Соника, а маппинги для этого кадра собирают из свежезагруженных тайлов весь спрайт. Формат DPLC: Первый байт - кол-во команд. Каждая команда занимает 2 байта, у нее формат $NTTT, где N - количество загружаемых тайлов (начинается с нуля), TTT - номер тайла, с которого начинается загрузка.
-
Да, недавно нашел на Сега Ретро.
-
2(ax) указывает на номер тайла с которого начинается арт объекта в видео памяти, VRAM. Во VRAM, разумеется, загружаются все тайлы, вся графика, требуемая уровню. У каждой зоны набор загружаемой графики отличается, впрочем, есть графика, которая загружается всегда (кольца, HUD, пружины). Графика загружается в строго определенное место видеопамяти, например тайлы Соника загружаются начиная с адресса VRAM $F000. Адреса, куда загружается большая часть графики можно посмотреть в файле _inc\Pattern Load Cues.asm. Разделив адрес VRAM на размер тайла - $20 (32), можно узнать номер тайла, с которого начинается арт. Так, если у Соника арт загружается с $F000, то $F000 / $20 = $780. Еще бывает полезно непосредственно просмотреть содержимое VRAM. Для этого советую использовать эмулятор Exodus, там можно смотреть содержимое VRAM и легко узнать адрес и номер каждого тайла. Шанс, что баг происходит из-за неверно настроенного объекта - 5%. Хотя вероятность наличия у тебя таких объектов довольно большая. Если это происходит только после определенного места и на неудачно отредактированном уровне, попробуй все же заменить objpos\mzX.bin на оригинал (где Х - номер акта твоего проблеммного уровня), хотя сильно сомневаюсь, что дело в этом.
-
Если сделать какую-то вещь самостоятельно, можно приобрести на порядок больше опыта, чем когда ты взял что-то готовое. Можно потерпеть полный провал, так и не суметь это сделать, или сделать очень криво, но вместе с этим приобретется опыт, при условии, что есть достаточная для развития идеи база. Те, кто портировали Спин Дэш в Соник 1, писали гиды к этому, без сомнения, разбираются во всех нюансах кода лучше, чем мы, которые лишь воспользовались результатами их работы. Мы видим лишь готовый код, а они с ним тщательно работали, изменяли для совместимости с Соник 1. Разумеется, никто в наше время не будет заново портировать Спин Дэш в Соник 1. Это глупо. То же скоро произойдет и с хомингом. "Зачем делать свой хак, когда есть возможность поиграть в готовые" =Р В твоей фразе как раз такой смысл. Кто-то стремиться делать свои хаки, кто-то лишь наслаждается чужими. Так же и во всех других аспектах. Видишь ли, есть замечательные самоотверженные хакеры, которые стремяться досканально изучить устройство игры и делать на ее движке замечательные вещи. Эти люди никогда не возьмут готовый гид по Хомингу. Их очень мало, но они, если достаточно упорны, добьются успехов, нашут Хоминг самостоятельно. Зачем? Для тренировки, получения опыта программирования. Написав Хоминг, они не остановятся, а пойдут дальше, к новым, еще более сложным целям. Через некоторое время они станут истинными специалистами, их хаки будут самыми сильными.
-
SONIC2010, если тебе нужны маппинги надписи Sonic the Hedgehog на титульнике, то Кул-Спот все верно сказал. То, что ты ищешь - сжатые алгоритмом Enigma плановые маппинги, которые находятся в папке mapeni, не знаю точно какой файл, но ты сразу его найдешь, я знаю. Чего? С отображением Соника на титульнике связаны две вещи: Файл artnem\titleson.bin, там находятся его тайлы. Файл _maps\Obj0E.asm, там находятся его спрайтовые маппинги. Еще можно отнести сюда анимацию, она находится в самом sonic1.asm. Помимо спрайтовых маппингов есть еще плановые маппинги, о которых большая часть начиающих и даже средних хакеров почему-то не подозревает. Я и сам долгое время не подозревал, когда начинал свой хакерский путь, не задумывался, как происходит отображение чанков и фонов уровня, где же эта надпись на титульнике =Р Помимо графического слоя спрайтов в Сеге существуют еще План А, План Б и Window. Слой Window Сониковскими играми не используется, за исключением невышедшего Sonic and Crackers. План А - передний план, на нем и отображаются чанки уровней во время игры. План Б - задний план, на нем отображаются фоны. Тайлы, отображаемые на планах, задаются таблицей с ячейками 8х8, в каждой из которой можно расположить тайл, вращать его и менять строку палитры. Размер таблицы и ее адрес задаются программно, через регистры VDP, в Сониках размеры планов насколько я помню 512х256 пикселей на уровнях и простых экранах и 512х512 пикселей в Special Stage. Таблицу с ячейками можно назвать плановыми маппингами. Как видно из определения, они отличаются от спрайтовых. Если в спрайтовых маппингах задавались расположения и размеры спрайтов, из которых строился объект, то здесь указывается содержимое каждой ячейки. Для примера взгляни в СонЭд, посмотри, как там редактируются маппинги чанков. Эти маппинги предназначены для планов. Сравни это с тем, как мапинги ведут себя в SonMapEd'е. Надпись Sonic на титульнике отображается через План А, как чанки на уровнях. Это статичная картинка, поэтому эта надпись НЕ связана с каким-либо объектом, как например Соник связан с объектом Obj0E, и ты не найдешь ее мапинги в папке _maps. На самом деле расположение тайлов и спрайтов задается не программно, а через массив байтов. Если ты думаешь, что в ASM-файлах папки _maps находится код, это не так. Посмотри на содержимое этих файлов: ; --------------------------------------------------------------------------- ; Sprite mappings - Sonic on the title screen ; --------------------------------------------------------------------------- dc.w byte_A898-Map_obj0E dc.w byte_A8CB-Map_obj0E dc.w byte_A917-Map_obj0E dc.w byte_A96D-Map_obj0E dc.w byte_A9AF-Map_obj0E dc.w byte_A9E7-Map_obj0E dc.w byte_AA47-Map_obj0E dc.w byte_AAB1-Map_obj0E byte_A898: dc.b $A dc.b 8, 8, 0, 0, 8 dc.b $10, $F, 0, 3, 8 dc.b $10, $F, 0, $13, $28 Команда dc просто напросто вставляет байт, так что в этом файле нет никакого кода, это лишь массив байтов. Ты можешь открыть любые маппиги в SonMapED и сохранить их в формате *.bin, после чего заменить include _maps\ObjXX.asm на incbin _maps\ObjXX.bin И ничего не изменится. Впрочем, в заблуждение может ввести конструкция вида "dc.w byte_A898-Map_obj0E". Это тоже байт, точнее слово (word). Здесь буквально написано: записать word, равный оффсету byte_A898 минус оффсет Map_obj0E. Имена лейбелов указывают на оффсет (их местоположение) в конечном РОМе, а умный компилятор позволяет записывать не только заданные числа, на результаты вычитания, сложнения, умножения чего угодно, в данном случае, двух оффсетов. Надеюсь, ты понял разницу между маппингами. Вобщем, качай PlaneEd, разбирайся в нем =Р Странная вещь. Похоже, подгрузились тайлы для бега, но маппинги отобразились не те, т.е. остались маппинги стоящего спрайта. Скажи, что ты изменял в своем хаке, что могло бы привести к такому багу?
-
Хех, снова Хоминг-дискуссия и в нехорошем тоне. То, что в хаке появился Хоминг и Афтэр Имижд нет ничего плохого и запрещенного. Писать Хоминг самостоятельно или нет - личное дело Кул-Спота. Справедливости ради замечу, что Selbi не будет давать код Хоминга первому встречному, если он дал Кул-Споту этот гид, значит считает его хорошим хакером, которому можно доверять. Кстати, Селби хоминг изначально дал MarkeyJester, видимо этот код - полная или частичная переделка версии MJ, которая кстати была очень глючной, MJ специально дал Селби ненадежную глючную версию, чтобы было к чему стремиться. Вот и побочный эффект от получения Хомминга, с этим улучшенным кодом стремиться можно мало к чему, сомневаюсь, Кул-Спот, что ты будешь его переписывать. О каких стериотипах идет речь? Если ты про то "Хоминг не должен быть публичным", то это не стереотип, а политика всего хакерского комьюнити, ее морали. Чтобы быть частью коммьюнити надо соблюдать эти морали, потому что у каждой из них есть свои причины. Были времена, когда гид по полноценному Спин Дэшу не был публичным, как Хоминг сейчас. С развитием хакинга и общим прогрессом дела меняются, теперь опубликованный ценнейшие по полезности гиды. Мне кажется, через несколько лет гид по Хомингу станет публичным. Произойдет это, когда хаков с Хомингом станет очень много. Сейчас уже сделан первый шаг - приватный гид, доступный большему количеству хакеров. Это заблуждение. Хаков с Хомингом немного, хаков с хомингом Селби еще меньше. Кул-Спот, у тебя неверное представление об иностранном комьюнити. Там очень много хорошие хакеров, которые не могут написать код этой способности, при этом получить Хоминг они не стремяться. Часть из них - действительно заинтерисованные в хакинге люди, которые изучают суть вещей самостоятельно, и желают написать Хоминг сами. Они не заинтересованы в том, чтобы гид Хоминга был публичен, иначе их труды окажутся напрасными - появится более удачный код, им не будет смысла развивать свои идеи. Другая часть хакеров не стремиться познать АСМ и написать/использовать Хоминг, а выделяет среди других иными методами. Вообще, Хоминг не должен быть главной изюминкой хака. Хороший хак хорош во всем, Хоминг должен быть не более чем дополнением общей картины.
-
Очень советую почитать этот гид, он дает большинство базовых знаний об объектах. Впрочем, он не дает полной информации о том, как создавать новые объекты, а лишь объясняет их устройство, и то только самые азы. Если этого недостаточно, могу дать небольшой инструктаж по объектам, который в отличие от гида на понятном русском языке =Р Итак, первое, о чем нужно позаботится, это "задействовать" объект, прописать его в списке "_inc\Object Pointers.asm". ; --------------------------------------------------------------------------- ; Object pointers ; --------------------------------------------------------------------------- dc.l Obj01, ObjectFall, ObjectFall, ObjectFall dc.l Obj05, ObjectFall, ObjectFall, Obj08 <...> У каждой структуры объекта в байте $0 указан его Id. Коды для объектов выполняются в ObjectsLoad, это самая важная процедура для объектов, благодаря которой все они работают. Процедура берет ID объекта, ищет процедуру, сопоставленную с этим Id'ом в списке Object Pointers.asm и запускает ее. Думаю, многие знают, что c Id'ом 01 сопоставлен код Obj01 и т.д. Но как видно из списка, некоторые Id'ы (2, 3, 4, 6, 7) ссылаются на ObjectFall, который толком ничего не делает. Эти Id-ы не задействованы и их можно использовать. Допустим, ты хочешь, чтобы у нового объекта был ID = 02, тогда просто замени второй элемент в списке (тот, что после Obj01) на Obj02. Теперь создай лейбел для твоего нового объекта, в любом месте, например перед "Obj01:". ; --------------------------------------------------------------------------- ; Object 02 - New Custom Object ; --------------------------------------------------------------------------- Obj02: Фундамент заложен, идем далее. Основа для каждого объекта - массив запускаемых Роутин и код, запускающий роутину в зависимости от значения счетчика роутины $24(a0). Дополни код этим: moveq #0,d0 ; Очистим d0 от мусора move.b $24(a0),d0 ; Загрузим туда счетчик роутин move.w Obj02_Index(pc,d0.w),d1; Получаем относительный оффсет процедуры jmp Obj02_Index(pc,d1.w) ; Прыгаем к этой процедуре ; ============================================================ =============== Obj02_Index: dc.w Obj02_Main-Obj02_Index ; 0 dc.w Obj02_Action1-Obj02_Index ; 2 Процедура ObjXX_Main есть у каждого объекта, здесь он собственно, инициализируется, задаются маппинги, арт, флаги рендеринга и пр. Она выполняется, когда у счетчика $24(a0) стоит значение 0, а оно всегда ноль, если объект свеженький. Потом процедура увеличивает значение $24(a0) на 2, чтобы эта процедура больше не выполнялась. Вот самое важное, что надо задать, чтобы объект отображался: Obj02_Main: addq.b #2,$24(a0) ; увеличиваем счетчик роутины move.l #Map_Sonic,4(a0); указываем оффсет маппингов move.w #$780,2(a0) ; номер тайла VRAM, с которого начинается арт move.b #4,1(a0) ; устанавливаем систему координат относительно уровня Для примера, я использовал мапинги и арт Соника, ты потом можешь это изменить на то, что тебе нужно. Так как в голову мне ничего не приходит, сделаю примитивного клона Соника =Р Obj02_Action1: move.b ($FFFFD01A).w,$1A(a0); загрузим текущий кадр Соника jmp DisplaySprite ; отобразим его! Остальные вещи хорошо рассказаны в гиде, не буду повторяться. Ну и последнее, размещение объекта. Самый простой способ это сделать - через SonED2. Если же ты создаешь босса, лучше сделать это программно, пример показан в Resize_GHZ3 (создание босса GHZ).
-
Как уже сказал SONIC 2010, объекту нужно задать координаты. При создании нового объекта, его структура полностью чиста, и коодинаты, соотвественно, (0;0). Поскольку у тебя воспроизводится звук, значит все работает как надо - объект успешно создается, но его не видно, потому что он в самом верхнем левом углу уровня. Думаю, тебе нужно, чтобы взрыв был на месте Buzz Bomber'а, тогда просто скопируй его координаты: move.w 8(a0),8(a1) ; копируем Х-координату move.w $C(a0),$C(a1) ; копируем Y-координату
-
Да не беда! Вообще, иногда бывает просто невозможно все сделать самостоятельно. Вот я, например, отлично разбираюсь в ассемблере, устройстве Сониковского движка, особенно, объектов, и VDP Сеги, но я очень слабо разбираюсь в хакинге музыки, не умею нормально портировать музыку (думаю, многие видели мои порты из Адвансов в S1HS2 =P). Поэтому я прибегаю к помощи других людей, например, с музыкой мне помогает Lomaster (aka Jet). Так что тебе не обязательно делать все самому, можно просто попросить помощи или запросить разрешение на использование песен из хаков, в этом нет ничего плохого. Впрочем, я сам давным-давно имел неосторожность взять музыку из чужого хака. Летом 2009 вышел мой первый публичный хак, он содержал 2 песни, взятые из SoniNeko. Когда я разрабатывал хак, я абсолютно не был знаком с коммьюнити, не сидел на форумах, на хак SoniNeko набрел случайно. Тогда думал, что музыка в хаке была просто срипана из других игр. А поскольку списка песен не было, и установить, откуда музыка, я не мог, решил взять прямо из хака, все равно, думал, есть Сеговские игры, где та же музыка лежит точно в таком же виде =Р Поразительно, но хак немедленно был замечен Ретровцами, на форуме создали топик с моим хаком, разоблачающий кражу, который стал очень популярен и стремительно набирал посты. Тут я понял, что музыку Нинеко делал сам, и извинился за свой необдуманный поступок. Рад, что ты все правильно понял про музыку. Кстати, можешь свободно пользоваться моими портами, так как их я публично выложил в S1 Hacking Studio 2, теперь их может использовать каждый.
-
Это просто замечательно. Уровни перерисованы до неузнаваемости, причем перерисованы довольно качественно. Sonic2010, ты настоящий мастер SonED'а. Также радуют АСМ-правки и модификации объектов, которые я видел в последней демке. У тебя очень приятный и перспективный хак, помнится, я с удовольствием переигрывал в последнюю демку несколько раз. Единственное, что портит картину - это музыка, украденная из Sonic Boom, Sonic Trash, Sonic Quick Winter Adventures и других хаков. Тебе надо не забывать об авторском праве, над музыкой в этих хаках тщательно трудились их авторы, и надо уважать их труды. Попробуй в следующий раз, если тебе потребуется музыка, просто попросить разрешение на ее использование.
-
У музыки Streets of Rage 3 какой-то слишком мрачный стиль, очень даже напоминает The Adventures of Batman & Robin на SMD, где музыка выполнена на невероятно высоком уровне, ее приятно слушать, но к Сонику едва что-либо можно прикрутить. Впрочем, Mr X, как уже сказал ElectroEchidna, может подойти к мини-боссу, но ближе к концу игры. Fuze идеально подходит для очень динамичных боссов, подобно тем, что были в Eggman Hates Furries. Кстати, я планирую сделать такого босса, которого надо побеждать в беге (но это будет нескоро), так что эту музыку возьму на заметку.
-
Согласен с Cstyler'ом по поводу заезженности музыки других классических Соников. Музыка босса из С3 уже использовалась в огромном количестве хаков, хотелось бы чего-то нового. Музыка мини-босса С3К использована не так часто, ее вполне можно поставить на ХХХ-боссов. Музыку для босса-Эггмана очень хотелось бы заменить, но вот на что, никак не подберу. Есть какие-нибудь предложения? В крайнем случае, можно поискать МИДИ версии песен :yahoo:
-
Да, это можно. Я так с некоторыми песнями и поступаю. Но некоторые песни после этого звучат хуже на слух. Причем я не имею в виду какие-то технические проблемы, например, бассы при ускоренном звучании могут смешиваться в одну кашу - уже есть печальный опыт с одной песней из Мегамена. Я примерно представляю как будут звучать песни в ускоренном виде. Все же они больше подойдут, скажем к LZ, чем GHZ/MZ, в хаке Sonic Harder Levels как раз стоит одна из песен на LZ. Подходит идеально.
-
Спасибо за предложенную музыку :) Музыка из Golden Axe 3 хороша, правда кажется слишком медленной для Соника. Но как вариант тоже может подойти. Еще мне в игре нравится мелодия 18, правда не знаю как она называется. Соник Адванс точно подойдет, так как у него истинно Сониковский стиль. У меня в хаке уже есть несколько мелодий из адванса, как раз в GHZ. Если не найду ничего лучше, придется взять еще немного адванса.
-
Сейчас на странице 0 пользователей
Нет пользователей, просматривающих эту страницу
