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

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

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

А где можно взять спрайты как в Sonic 2 Retro, когда соник крутиться ураганом?

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


Ссылка на сообщение
А где можно взять спрайты как в Sonic 2 Retro, когда соник крутиться ураганом?

Может, авторы хака S2RR сами их рисовали.

Подобные спрайты можно поискать, например здесь: http://www.sonicfangameshq.com/sprites.html

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


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

Там большинство спрайтов в непонятном формате .gam

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


Ссылка на сообщение
Там большинство спрайтов в непонятном формате .gam

Это же для фан игр, поэтому форматы файлов рассчитаны Multimedia Fusion, The Games Factory и пр.

Однако обычные картинки тоже есть, надо в графе Format выбрать Sheet.

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


Ссылка на сообщение
Однако обычные картинки тоже есть, надо в графе Format выбрать Sheet.

 

Да, но спрайтов в обычном формате там мало. Тут, кстати, самая большая коллекция спрайтов Соника.

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

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


Ссылка на сообщение
Может, авторы хака S2RR сами их рисовали.

Подобные спрайты можно поискать, например здесь: http://www.sonicfangameshq.com/sprites.html

 

 

Там большинство спрайтов в непонятном формате .gam

 

 

Это же для фан игр, поэтому форматы файлов рассчитаны Multimedia Fusion, The Games Factory и пр.

Однако обычные картинки тоже есть, надо в графе Format выбрать Sheet.

 

 

Да, но спрайтов в обычном формате там мало. Тут, кстати, самая большая коллекция спрайтов Соника.

Спасибо!Нашёл то что надо.

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


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

Блин, как можно нормально загрузить палитру в SonEd2? Делаю новый фон, кое-как удалось импортировать сам фон в качестве блоков, а вот с палитрой проблемка...

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


Ссылка на сообщение
Блин, как можно нормально загрузить палитру в SonEd2? Делаю новый фон, кое-как удалось импортировать сам фон в качестве блоков, а вот с палитрой проблемка...

Я использовал SonMapEd для импортирования палитры (тоже для фона\заднего плана O0), но импортировал особым образом, если пожелаешь узнать, могу сказать.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Мой вопрос теперь:

Почему когда я добавил арт в лейбел PLC_GHZ, запускаю, включается мелодия, выходят название уровня и акт, и не уходят, всё застыло, мелодия продолжает играть?

Может в этом коде ошибка, где я прописал загрузиться арту:

PLC_GHZ:	dc.w $C
	dc.l Nem_GHZ; GHZ main patterns
	dc.w 0
	dc.l Nem_Stalk; flower stalk
	dc.w $6B00
	dc.l Nem_PplRock; purple rock
	dc.w $7A00
	dc.l Nem_Crabmeat; crabmeat enemy
	dc.w $8000
	dc.l Nem_Buzz; buzz bomber enemy
	dc.w $8880
	dc.l Nem_Chopper; chopper enemy
	dc.w $8F60
	dc.l Nem_Newtron; newtron enemy
	dc.w $9360
	dc.l Nem_Motobug; motobug enemy
	dc.w $9E00
	dc.l Nem_Spikes; spikes
	dc.w $A360
	dc.l Nem_HSpring; horizontal spring
	dc.w $A460
	dc.l Nem_VSpring; vertical spring
	dc.w $A660
	dc.l Art_my
	dc.w $6000
	dc.l Art_popugai
	dc.w $6400

?

Ps: экран чёрный, только название уровня и акт.

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

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


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

В коде инициализации уровня есть такой цикл:

Level_TtlCard:
	move.b	#$C,($FFFFF62A).w
	bsr.w	DelayProgram
	jsr	ObjectsLoad
	jsr	BuildSprites
	bsr.w	RunPLC_RAM
	move.w	($FFFFD108).w,d0
	cmp.w	($FFFFD130).w,d0; has title card sequence finished?
	bne.s	Level_TtlCard; if not, branch
	tst.l	($FFFFF680).w; are there any	items in the pattern load cue?
	bne.s	Level_TtlCard; if yes, branch
	jsr	Hud_Base

 

Он проверяет две вещи:

1) Title Cards уже полностью появились? Если нет, бранч на Level_TtlCard для зацикливания.

2) Все команды загрузки сжатого арта выполнены? Если нет, тот же бранч в начало цикла.

 

Скорее всего, у тебя не выполняется второе условие, и игра входит в бесконечный цикл. Из-за чего это? Какой-то баг, связанный с очередью команд PLC.

 

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

Очередь занимает память в диапозоне $F680-$F6FF. Очевидно, она не резиновая, и рано или поздно может переполнится. Код очереди в Соник 1, как и в Соник 2 до ума не доведен, во-первых, он не проверяет переполнение, во-вторых, помнится, в нем есть программная ошибка, из-за которой она работает с меньшим количеством записей, чем изначально рассчитана.

 

С переполнением очереди особо не поборешься - врядли удастся найти свободный блок памяти длиной более $A0 байт. Если тебе хочется загрузить больше арта, можно грузить напрямую:

		vram	$B000 ; <-- куда грузить
	lea	(Art_my).l,a0; <-- что грузить
	bsr.w	NemDec

 

Этот код можно разместить, например после jsr Hud_Base

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


Ссылка на сообщение
Я использовал SonMapEd для импортирования палитры (тоже для фона\заднего плана O0), но импортировал особым образом, если пожелаешь узнать, могу сказать.
Импортируем картинку фона как Spritesheet, там самым генерируется палитра, сохраняем ее, открываем в хексе и копируем в файл палитры GHZ - такой способ?

 

Блин, ну что за лабуда? Сделал нормальный фон размером 256х256, переконвертировал его в формат СонЭда, загружаю как чанк, чанк загрузился, все нормально, отображается как надо, изменяю план В, сохраняю, запускаю ром и БАЦ - вижу почти пустой фон с какими-то рандомно расположенными ТАЙЛАМИ GHZ, а не нового фона!!! С чем это может быть связано? Может быть с тем, что графика добавляется в конец файла, а этого делать не следует? Но тогда зачем делать такую функцию как импорт custom'ных чанков?

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

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


Ссылка на сообщение
Импортируем картинку фона как Spritesheet, там самым генерируется палитра, сохраняем ее, открываем в хексе и копируем в файл палитры GHZ - такой способ?

Неть =Ъ Я использовал ещё прогу Paint.NET для импортирования палитры.

Открываем прогу Paint.NET, открываешь изображение фона. Потом при помощи инструмента "Пипетка", кликаешь на любой цвет, как ты видишь, этот цвет появился на окне "Палитра", потом кликаешь на маленький значок в окне "Палитра", который я выделил на изображение, потом кликаешь на палитру, куда ты хочешь сохранить цвет. И так внеси в палитру все цвета, которые на изображений твоём (не больше 16 цветов) (Вот пример). Открываешь SonMapEd, открываешь палитру фона, куда ты хочешь импортировать палитру (можешь не открывать, если ты хочешь создать новый файл с палитрой), кликаешь на цвет любой в строке палитры (я например на вторую строку, на второй цвет)), появляется окошечко "Цвет". Потом из окна "Палитра" в Paint.NET выбираешь любой цвет, которого ты хочешь импортировать, кликаешь на кнопку "Больше >>", окно "Палитра" расширилась, в правой стороне появляются настройки для цвета, копируй со строк, которые я выделил на изображений значения цветов в окошечко "Цвет" у SonMapEd. Потом кликаешь "OK" в окне "Цвет", открываешь опять этот цвет в SonMapEd, как ты заметил, значения этого цвета немного поменялись. Потом обновляешь этот цвет и в палитре у Paint.NET'а, копируешь эти значения в окно "Палитра" у Paint.NET, кликаешь на маленький значок, который я выделил на изображение, потом кликаешь на тот цвет, который нужно обновить. Потом обнови этот цвет и у изображения, который нужно обновить при помощи инструмента "Заливка". Всё, тоже самое сделай и с другими цветами)) Потом как это сделаешь, сохрани палитру, и можешь спокойно импортировать чанки для фона в SonEd2))

 

Блин, ну что за лабуда? Сделал нормальный фон размером 256х256, переконвертировал его в формат СонЭда, загружаю как чанк, чанк загрузился, все нормально, отображается как надо, изменяю план В, сохраняю, запускаю ром и БАЦ - вижу почти пустой фон с какими-то рандомно расположенными ТАЙЛАМИ GHZ, а не нового фона!!! С чем это может быть связано? Может быть с тем, что графика добавляется в конец файла, а этого делать не следует? Но тогда зачем делать такую функцию как импорт custom'ных чанков?

Удали тайлы старого фона, тайлы не должны превышать их количество до 33E (шестнадцатеричное число)\830 (десятичное число) ))

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


Ссылка на сообщение
Удали тайлы старого фона, тайлы не должны превышать их количество до 33E (шестнадцатеричное число)\830 (десятичное число) ))

Благодарю! То есть, можно их просто затереть цветом 0F?

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


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

Я даже незнаю как написать свой вопрос.Но надо пробовать.У меня есть два персанажа с разными маппингами.В игре они у меня меняються в воздухе нажатием кнопки В.Маппинги прописаны так:

Map_Character:
	cmpi.b	 #$01, ($FFFFFFFE).w; Флаг персонажей установлен на $01?  
	beq.s   Map_Character_Knukles; если да, продолжить
	bra.w   Map_Character_Sonic; если да, продолжить
	move.b  ($FFFFFFFE).w,d0; set Character to d0
	lsl.w   #2,d0
	move.l	Map_Characters(pc,d0.w),($FFFFD004).w; load the Character map
	rts

Map_Characters:
	dc.l	Map_Sonic; Sonic
	dc.l	Map_Knukles; New Player

Map_Character_Knuckes:
		move.l	#Map_Knukles,($FFFFD004).w; load the Character map
		rts

Map_Character_Sonic:
		move.l	#Map_Sonic,($FFFFD004).w; load the Character map
		rts
; End of function Map_Character

Map_Sonic:
	include "_maps\Sonic.asm"
even
Map_Knukles:
	include "_maps\Knuckles.asm"
even

Вот как они у меня в игре(см 1 и 2 прикрепленый скрин).

Но если умереть наклзом то вот это выходит(см 3 и 4 прикрепленый скрин).

Кто-либо может подсказать как решить эту проблему?

post-10548-1301474248_thumb.png

post-10548-1301474254_thumb.png

post-10548-1301474259_thumb.png

post-10548-1301474266_thumb.png

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


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

А ты сделал отдельные DPLC для Наклза?

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


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

Я сделал DPLC Наклза(правда они от SonMapEd'a(кто знает тот поймет)).Даже подключил.Но все равно это фигня.

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


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

Используй DPLC, которые я тебе дал

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


Ссылка на сообщение
Используй DPLC, которые я тебе дал

Это они)

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


Ссылка на сообщение
Может в проверке накосячил?

Наврятле.Ведь они же работают.Это что-то с маппингами.Если не веришь взгляни на мой вопрос.Посмотри там 1 и 3 скрин.

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


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

С маппингами должно быть все в порядке, в коде вроде бы нет ошибок. А вот с неправильными DPLC такие глюки вполне могут быть.

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


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

Кто знает, как расширить уровни? :)

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


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

Размер уровней лежит в misc/lvl_size.bin. Формат я не знаю, но знаю, что на один акт 12 ($C) байтов.

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


Ссылка на сообщение
Map_Character:
	cmpi.b	 #$01, ($FFFFFFFE).w; Флаг персонажей установлен на $01?  
	beq.s   Map_Character_Knukles; если да, продолжить
	bra.w   Map_Character_Sonic; если да, продолжить
	move.b  ($FFFFFFFE).w,d0; set Character to d0
	lsl.w   #2,d0
	move.l	Map_Characters(pc,d0.w),($FFFFD004).w; load the Character map
	rts

Map_Characters:
	dc.l	Map_Sonic; Sonic
	dc.l	Map_Knukles; New Player

Map_Character_Knuckes:
		move.l	#Map_Knukles,($FFFFD004).w; load the Character map
		rts

Map_Character_Sonic:
		move.l	#Map_Sonic,($FFFFD004).w; load the Character map
		rts
; End of function Map_Character

Map_Sonic:
	include "_maps\Sonic.asm"
even
Map_Knukles:
	include "_maps\Knuckles.asm"
even

 

Пара замечаний по коду:

Как вижу у тебя предоставлено целых два варианта кода, второй из которых не работает (перед ним стоит бранч, он препрыгивается. Однако, с кодом все впорядке. Я не знаю, как у тебя устроены персонажи, но думаю, надо еще позаботися о загрузке 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 все же есть лимит, и уровни не могут быть шире некой границы.

Однако, не в зависимости от размера массива, границы уровня все же задаются в игре отдельно:

Размер уровней лежит в misc/lvl_size.bin. Формат я не знаю, но знаю, что на один акт 12 ($C) байтов.

Да, в этом файле как раз находится то, что нужно. Здесь задается много чего, в том числе крайняя правая граница уровня в пикселях.

Каждая запись, как уже сказал Кул Спот, занимает $C байт.

Крайняя граница камеры начинается с четвертого байта каждой записи (если считать с нуля).

 

post-8869-1301495563_thumb.png

На картинке выделена граница камеры в GHZ3.

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

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


Ссылка на сообщение
Благодарю! То есть, можно их просто затереть цветом 0F?

Можно, но я рекомендую удалить старые и неиспользованные тайлы, т.к. размер арта будет зашкаливать, а этого нельзя, т.к. последние тайлы арта могут заходить за другие тайлы, и эти тайлы уровня могут перезаписаться другими тайлами, или на оборот. Старые и неиспользованные тайлы удалял при помощи SonMapEd'ом)) Но потом придётся пыхтиться за блоков (16х16 в пикс.) из-за того, что тайлы сдвинутся)) Могу сказать как устранить глюки у блоков, если нужно))

 

Зы: если у тебя глюк с чанками фона, то удали не нужные чанки при помощи SonEd2 v11.02.24 (или как там...), выдели ненужный чанк, и нажми комбинаций клавиш Ctrl+D (именно в SonEd2 v11, именно у него есть это) , он удалит чанк, который ты выделил, и перейдёт на следующий чанк, не на прошлый)) Мне помогло убрать этот глюк)) Он ещё может отразить чанки, Ctrl+f - отразить по вертикали, Ctrl+m - отразить по горизонтали)

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

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


Ссылка на сообщение
Пара замечаний по коду:

Как вижу у тебя предоставлено целых два варианта кода, второй из которых не работает (перед ним стоит бранч, он препрыгивается. Однако, с кодом все впорядке. Я не знаю, как у тебя устроены персонажи, но думаю, надо еще позаботися о загрузке 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 байт.

Крайняя граница камеры начинается с четвертого байта каждой записи (если считать с нуля).

 

post-8869-1301495563_thumb.png

На картинке выделена граница камеры в GHZ3.

Спасибо! А там дальше уже размер заднего фона?

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


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

Скачал SonED2. У меня проблема. Открываю файл в формате .sep, а там ничего нету, просто черный экран. Как это исправить?

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


Ссылка на сообщение
Спасибо! А там дальше уже размер заднего фона?

Нет, задний план же ограничивать не нужно - ограничился передний заданной позицией - и все, куда заднему плану деться? =Р

Там дальше нижняя граница уровня (тоже в пикселях), остальное не помню.

 

Скачал SonED2. У меня проблема. Открываю файл в формате .sep, а там ничего нету, просто черный экран. Как это исправить?

Он не смог загрузить ни одного файла, указанного в *.sep. Открой *.sep-файл, там прописаны пути, откуда загружать арт, палитры и вообще все данные игры, которые будут редактироваться. Еще загляни в консольное окно, там после открытия проекта SonED2 пишет, какие файлы он не смог загрузить.

 

В твоем случае он не смог загрузить ни одного файла, потому что в дистрибутиве SonED2 их нет, тебе нужен еще и дизасембл игры. Даже когда он появится, тебе надо будет переписать все пути в *.sep файлах (очень долгая работа). Не знаю почему, но имена файлов данные в SonED'овских файлах, не совпадают с дизасемблом.

 

Советую скачать S1 Hacking Studio 2, там и SonED2, и дизасембл, а *.sep файлы на него уже настроены.

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


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

vladikcomper спасибо!

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


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

Какой конвертер лучше?xm3smps или xm4smps.И кто нибудь может рассказать про все возможности этих конвертеров?

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


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

xm4smps, по словам Segaman'a, лучше компилирует. Однако в нем отсутствует очень важная опция предпрослушки, которая есть в xm3smps/oerg.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×