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

Помощь по ромхакингу

Рекомендуемые сообщения

А как можно перейти от формата vgz к xm?

Интересно как ты собираешься переводить видео формат в аудио?Цитирую:

Формат файла .vgz Сжатый видео-файл DigitalVDO

Поделиться сообщением


Ссылка на сообщение

Ммм.Понятно.Ступил наверно я с просони..)))

Поделиться сообщением


Ссылка на сообщение
А как можно перейти от формата vgz к xm?

Насколько я знаю никак.

Поделиться сообщением


Ссылка на сообщение

vladikcomper, SONIC2010, спасибо за помощь.

 

Думаю, тебе нужно, чтобы взрыв был на месте Buzz Bomber'а

Не угадал.=Р Мне надо, чтобы врыв был на месте исчезновения патрона.

Поделиться сообщением


Ссылка на сообщение
Интересно как ты собираешься переводить видео формат в аудио?Цитирую:

Бгг, нашли кого слушать.

Vgz в данном случае - сжатый VGM. Еще есть вариант VGM7Z. Все они представляют собой тупо VGM-ку в архиве.

Не исключаю, что под этим расширением может быть и видео, но не думаю, что вы на него нарветесь.

От VGM/VGZ/VGM7Z можно перейти сначала к MIDI через vgm2mid, а потом уже как обычно. Но вот качество конвертации VGM в MIDI оставляет желать лучшего...

Поделиться сообщением


Ссылка на сообщение

Lomaster, спасибо огромное! А можно ещё вопрос: а где скачать этот конвертер?

Поделиться сообщением


Ссылка на сообщение

Помогите, пожалуйста. Где можно найти maps надписи "Sonic the hedgehog"?(но мне нужно в формате asm, как в папке _maps)

Поделиться сообщением


Ссылка на сообщение

Помогите пожалуйста.Кто нибудь может дать инструкцию по теме "Как создать объект и добавить его на уровень"?Желательно в личку.

Поделиться сообщением


Ссылка на сообщение

Гид про создание объектов вроде есть на соникретро или ssrg.

Поделиться сообщением


Ссылка на сообщение
Помогите пожалуйста.Кто нибудь может дать инструкцию по теме "Как создать объект и добавить его на уровень"?Желательно в личку.
Гид про создание объектов вроде есть на соникретро или ssrg.

Да да.Кул спот прав. И причём там очень хорошо всё написано. А тебе нужно создать новый объект или перенести какой-то в другой этап?

 

 

Помогите, пожалуйста. Где можно найти maps надписи "Sonic the hedgehog"?(но мне нужно в формате asm, как в папке _maps)

Поделиться сообщением


Ссылка на сообщение
Помогите, пожалуйста. Где можно найти maps надписи "Sonic the hedgehog"?(но мне нужно в формате asm, как в папке _maps)

Это плановые маппинги и они находятся в папке mapeni. Редактируются PlaneEd'ом.

Поделиться сообщением


Ссылка на сообщение
Это плановые маппинги и они находятся в папке mapeni. Редактируются PlaneEd'ом.

Нет ты меня не понял. Мне нужен тот файл где написоно как расположить тайлы.Например:

файлу \SourceCode\artnem\titleson.bin соответствует \SourceCode\_maps\obj0E.asm

Поделиться сообщением


Ссылка на сообщение
Да да.Кул спот прав. И причём там очень хорошо всё написано. А тебе нужно создать новый объект или перенести какой-то в другой этап?

Новый объект надо.

Гид про создание объектов вроде есть на соникретро или ssrg.

А ссылку можно?

Поделиться сообщением


Ссылка на сообщение

Очень советую почитать этот гид, он дает большинство базовых знаний об объектах. Впрочем, он не дает полной информации о том, как создавать новые объекты, а лишь объясняет их устройство, и то только самые азы. Если этого недостаточно, могу дать небольшой инструктаж по объектам, который в отличие от гида на понятном русском языке =Р

 

Итак, первое, о чем нужно позаботится, это "задействовать" объект, прописать его в списке "_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).

  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Нет ты меня не понял. Мне нужен тот файл где написоно как расположить тайлы.Например:

файлу \SourceCode\artnem\titleson.bin соответствует \SourceCode\_maps\obj0E.asm

Это и есть этот файл. Только зачем-то его пожали Enigm'ой, поэтому его отредактируешь только в PlaneEd'e.

Поделиться сообщением


Ссылка на сообщение

помогите! когда на уровне мрамор, я дохожу до определенного места, картинка соника искажается когда движется, вот так:b518e3208078.jpga56ad709f6ed.jpg600a20c4cfd9.jpga831662fd332.jpg, а когда не движется стоит нормальный спрайт. что делать?

Поделиться сообщением


Ссылка на сообщение
Это и есть этот файл. Только зачем-то его пожали Enigm'ой, поэтому его отредактируешь только в PlaneEd'e.

Уффф.Ты вообще разбириешься в хакинге?

В файле title.bin содержатся мепинги соника на титульнике

 

А в файле Obj0E.asm прописано располежение тайлов на экране.

 

А мне надо файл где прописано расположение тайлов titlefor.bin

 

 

Помогоите, пожалйста.У меня из-за этого работа с титульником "застыла"

Поделиться сообщением


Ссылка на сообщение

Попробуй скопировать оригинальный арт и маппинги Соника.

 

До чего непонятливы некоторые люди. Открой файл obj0e.asm:

Sprite mappings - Sonic on the title screen

.

Это маппинги Соника на титл скрине. А в папке mapeni/titlescr.bin находятся маппинги titlefor.bin, они пожаты энигмой и их нужно редактировать в PlaneEd'e. Если не веришь, спроси у Влада, это он мне как-то давно объяснял.

Поделиться сообщением


Ссылка на сообщение
Попробуй скопировать оригинальный арт и маппинги Соника.

 

До чего непонятливы некоторые люди. Открой файл obj0e.asm:

Sprite mappings - Sonic on the title screen

.

Ну атеперь это переведи и поймёшь что там.

 

Это маппинги Соника на титл скрине. А в папке mapeni/titlescr.bin находятся маппинги titlefor.bin, они пожаты энигмой и их нужно редактировать в PlaneEd'e. Если не веришь, спроси у Влада, это он мне как-то давно объяснял.

Мне не нужны мепинги!Я с ними уже всё сделал.Мне нужен код где прописано расположение этих тайлов а я его найти не могу.

Поделиться сообщением


Ссылка на сообщение

Я в конец запутался. Код, где написано расположение тайлов на экране и есть маппинги! Выражайся пояснее, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Я в конец запутался. Код, где написано расположение тайлов на экране и есть маппинги! Выражайся пояснее, пожалуйста.

Ну вот так объясню:

В папках artnem,...cos,...unc находятся файлы формата bin.Они содержат тайлы объектов и редактируются в SonMapEd.

А в папке _maps файлы формата asm. В них прописано расположение тайлов из ранее указаных файлов.

Понятно?

Поделиться сообщением


Ссылка на сообщение

SONIC2010, если тебе нужны маппинги надписи Sonic the Hedgehog на титульнике, то Кул-Спот все верно сказал. То, что ты ищешь - сжатые алгоритмом Enigma плановые маппинги, которые находятся в папке mapeni, не знаю точно какой файл, но ты сразу его найдешь, я знаю.

 

В файле title.bin содержатся мепинги соника на титульнике

А в файле Obj0E.asm прописано располежение тайлов на экране.

Чего? С отображением Соника на титульнике связаны две вещи:

Файл 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, разбирайся в нем =Р

 

a56ad709f6ed.jpg

 

Странная вещь. Похоже, подгрузились тайлы для бега, но маппинги отобразились не те, т.е. остались маппинги стоящего спрайта.

Скажи, что ты изменял в своем хаке, что могло бы привести к такому багу?

Изменено пользователем vladikcomper

Поделиться сообщением


Ссылка на сообщение
Очень советую почитать этот гид, он дает большинство базовых знаний об объектах. Впрочем, он не дает полной информации о том, как создавать новые объекты, а лишь объясняет их устройство, и то только самые азы. Если этого недостаточно, могу дать небольшой инструктаж по объектам, который в отличие от гида на понятном русском языке =Р

 

Итак, первое, о чем нужно позаботится, это "задействовать" объект, прописать его в списке "_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).

Спасибо огромное!

 

move.w #$780,2(a0) ; номер тайла VRAM, с которого начинается арт

А тут можно подробней.Как работать с этой строкой?

Поделиться сообщением


Ссылка на сообщение
Странная вещь. Похоже, подгрузились тайлы для бега, но маппинги отобразились не те, т.е. остались маппинги стоящего спрайта.

Скажи, что ты изменял в своем хаке, что могло бы привести к такому багу?

Лирическое отступление:у меня, тупая, кривая, почти сломанная мышь.

 

Ответ: Как я понял когда я редактировал в sonede, Marble Zone я нечаянно(из-за тупой мыши, так как она сама нажала на кнопки) выбрал объект 18: floating platform. я увидел в игре этот объект(из-за него такие проблемы), а позже удалил его. но анимация все еще сбитая. пытался заменить уровни, спрайт соника. ничего не выходит.

Поделиться сообщением


Ссылка на сообщение

Почему когда я в сонЕДЕ 2 редактирую фон у меня в игре всё глючит?

Поделиться сообщением


Ссылка на сообщение

Странно. Но из-за платформы такие проблемы точно не могли возникнуть.

Поделиться сообщением


Ссылка на сообщение
А тут можно подробней.Как работать с этой строкой?

 

2(ax) указывает на номер тайла с которого начинается арт объекта в видео памяти, VRAM.

Во VRAM, разумеется, загружаются все тайлы, вся графика, требуемая уровню. У каждой зоны набор загружаемой графики отличается, впрочем, есть графика, которая загружается всегда (кольца, HUD, пружины).

Графика загружается в строго определенное место видеопамяти, например тайлы Соника загружаются начиная с адресса VRAM $F000. Адреса, куда загружается большая часть графики можно посмотреть в файле _inc\Pattern Load Cues.asm.

Разделив адрес VRAM на размер тайла - $20 (32), можно узнать номер тайла, с которого начинается арт.

Так, если у Соника арт загружается с $F000, то $F000 / $20 = $780.

Еще бывает полезно непосредственно просмотреть содержимое VRAM. Для этого советую использовать эмулятор Exodus, там можно смотреть содержимое VRAM и легко узнать адрес и номер каждого тайла.

 

Лирическое отступление:у меня, тупая, кривая, почти сломанная мышь.

 

Ответ: Как я понял когда я редактировал в sonede, Marble Zone я нечаянно(из-за тупой мыши, так как она сама нажала на кнопки) выбрал объект 18: floating platform. я увидел в игре этот объект(из-за него такие проблемы), а позже удалил его. но анимация все еще сбитая. пытался заменить уровни, спрайт соника. ничего не выходит.

Шанс, что баг происходит из-за неверно настроенного объекта - 5%. Хотя вероятность наличия у тебя таких объектов довольно большая. Если это происходит только после определенного места и на неудачно отредактированном уровне, попробуй все же заменить objpos\mzX.bin на оригинал (где Х - номер акта твоего проблеммного уровня), хотя сильно сомневаюсь, что дело в этом.

Поделиться сообщением


Ссылка на сообщение
Почему когда я в сонЕДЕ 2 редактирую фон у меня в игре всё глючит?

на странице 4-9 всё написано, точно не помню на какой

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×