Перейти к содержимому
Форум sonic-world.ru
DeidaraNT

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

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

Ничего не битая, только я не понял, что там должно сохранятся

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


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

4052ae2d11f8.png

 

Извините меня за те 2 поста. :)

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

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


Ссылка на сообщение
Что надо сделать в исходнике,чтобы таймер показывал миллисекунды?

 

Если возможно,пришлите мне код в личку.

Что надо: написать свой код.

 

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

 

Реализация счетчика миллесекунд требует наличия у хакера хороших навыков. Нужно хотя бы немного иметь представление про VDP и уметь работать с VRAM. Для этого необходимо ознакомится с документацией VPD: http://emu-docs.org/Genesis/Graphics/genvdp.txt и http://info.sonicretro.org/SCHG:VDP_Docume...n/General/Ports

 

Отображение счетчиков минут и секунд происходит в суброутине HUD_Update, а именно здесь:

 

loc_1C734:
	move.l	#$5E400003,d0   ; запрос на запись во VRAM по адресу $DE40
	moveq	#0,d1
	move.b	($FFFFFE23).w,d1; загрузить счетчик минут
	bsr.w	Hud_Mins   ; определяет нужные для цифр счетчика тайлы и записывает их во VRAM
	move.l	#$5EC00003,d0   ; запрос на запись во VRAM по адресу $DEC0
	moveq	#0,d1
	move.b	($FFFFFE24).w,d1; загрузить счетчик секунд
	bsr.w	Hud_Secs   ; определяет нужные для цифр счетчика тайлы и записывает их во VRAM

 

Счетчик миллесекунд находится по адресу $FFFFFE25. Тебе нужно будет найти в видео памяти место, куда можно было бы записать 4 тайла и дополнить код примерно такими же строками, но запрашивать другой адресс VRAM и вызывать Hud_Secs после этого.

 

И да, значение $FFFFFE25 надо будет домножить на 100 и поделить на 60, чтобы получить настоящие миллесекунды, дело в том, что байт этот обнуляется при 60, так как считает кол-во кадров, через которое нужно увеличивать счетчик секунд на единицу (1 секунда = 60 кадров).

 

				move.b	($FFFFFE25).w,d1
			mulu.w	#100,d1
	divu.w	#60,d1
	swap	d1
	move.w	#0,d1
	swap	d1

 

4052ae2d11f8.png

 

Почему они не сохраняются? И как это исправить?

 

Исправлено: Слишком большое изображение

Если ты работаешь в S1HS, то это скорее мое небольшое упущение - я слил первичный и вторичный арты GHZ в один файл, чтобы не было проблем с СонЕдом, но забыл сделать изменения в коде.

Исправить это несложно, нужно лишь проследовать этому маленькому гиду: http://info.sonicretro.org/SCHG_How-to:Sep...d_alternate_art

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


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

Люди, у меня тупейший вопрос:

Как заменить спрайт Соника в S3?

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

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


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

Как в СонЕде изменять палитру? У меня не получается...

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

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


Ссылка на сообщение
Где в СонЕде изменять палитру? У меня не получается...

Ну блин, что нельзя по программке немного полазить? Во втором же меню - Editor, выбрав первый же пункт Tile Editor наткнешься на нужный тебе редактор палитр.

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


Ссылка на сообщение
Ну блин, что нельзя по программке немного полазить? Во втором же меню - Editor, выбрав первый же пункт Tile Editor наткнешься на нужный тебе редактор палитр.

Нет лучше по другому спросить.... как менять палитру в ней?

А где искать я знаю.

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


Ссылка на сообщение
Нет лучше по другому спросить.... как менять палитру в ней?

А где искать я знаю.

Там рядом с буквами R, G и B есть микроскопические стрелочки, именно на них надо нажимать для изменения цвета. Это очень неудобно, но таков СонЭд, поэтому советую иногда разворачивать программу на весь экран, чтобы не портить зрение.

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


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

У меня "сдохла" палитра в эндинге(финальной заставке то есть)...я уже пытался её исправить,копировав оригинальный файл "ending" из папки "pallet" в папку относящуюся к палитре моего хака,не помогло...пытался портировать палитру с обычного хака в свой...тоже не вышло...вся палитра на всех уровнях нормальная,а в конечной заставке сбитая...как мне это исправить? :D

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


Ссылка на сообщение
У меня "сдохла" палитра в эндинге(финальной заставке то есть)...я уже пытался её исправить,копировав оригинальный файл "ending" из папки "pallet" в папку относящуюся к палитре моего хака,не помогло...пытался портировать палитру с обычного хака в свой...тоже не вышло...вся палитра на всех уровнях нормальная,а в конечной заставке сбитая...как мне это исправить? :D

Скрины плиз в студию, может помогу чем

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


Ссылка на сообщение
Скрины плиз в студию, может помогу чем

 

Пожалуйста...

AutumninSonic1_003.jpeg

AutumninSonic1_004.jpeg

 

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

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

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


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

Скорее всего это из-за меню выбора уровней из соника 2 - из за него сбились поинтеры палитр.

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


Ссылка на сообщение
Скорее всего это из-за меню выбора уровней из соника 2 - из за него сбились поинтеры палитр.

Но не могу же я теперь поставить старое меню...да и потом,у TailsX-Doll'а тоже меню левел селекта из Соника 2,у него такой проблемы нет...

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


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

Может ты как-то накосячил, вставляя поинтеры палитры левел селекта

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


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

Думаешь,поставив стандпртную палитру левел селекта как в оригинале,палитра встанет на место?

 

И кстати,есть ещё один глюк,исправить который я не могу...Первый босс после первого удара становится белым.и так до конца битвы....а все остальные боссы нормально реагируют на удары...никто не знает как исправить это?

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


Ссылка на сообщение
Думаешь,поставив стандпртную палитру левел селекта как в оригинале,палитра встанет на место?

Попробуй сначала удалить поинтер палитры левел селекта и посмотри - изменилось ли что-то. Если да, то ты поинтер левел селекта как-нибудь криво вставил. Если нет, то проблема в ругом.

И кстати,есть ещё один глюк,исправить который я не могу...Первый босс после первого удара становится белым.и так до конца битвы....а все остальные боссы нормально реагируют на удары...никто не знает как исправить это?

Эмм, а ты изменял как-нибудь первого босса?

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


Ссылка на сообщение
Эмм, а ты изменял как-нибудь первого босса?

Насколько я помню-нет...

 

Всё,я разобрался с боссом...точне с его багом...осталось как то с палитрой эндинга разобраться...

 

Разобрался с одной проблемой,как тут же на её место встаёт другая...теперь во втором акте переделанного марбла в середине уровня у меня зависает игра и вылетает "illegal instruction"... :D(что то мне всё меньше хочется продолжать свой хак,потому что баги меня преследуют почти всё время...)

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

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


Ссылка на сообщение
Разобрался с одной проблемой,как тут же на её место встаёт другая...теперь во втором акте переделанного марбла в середине уровня у меня зависает игра и вылетает "illegal instruction"... (что то мне всё меньше хочется продолжать свой хак,потому что баги меня преследуют почти всё время...)

У меня тоже такая трабла была при переделывании второго мэрбла!

Ошибка в объектах. Попробуй понажимать в процессе редактирования кнопку Y (или I, точно не помню), и посмотреть, не "застрял" ли какой-нибудь объект в стене. Ошибка также возникает из-за неправильного размещения определенного типа пружины, и иногда даже от шипов в стене (видимо ставить в стену можно лишь некоторые виды шипов).

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

Без багов никуда ;)

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


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

Ну вот...Опять столкнулся с проблемой.Захотел я вставить за место бадника Newtron поставить гусенецу.Поставил.Но есть один баг.Спрайт Motobug'а не догружается...Может кто-нибудь подскажет,в чём дело...

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


Ссылка на сообщение
У меня тоже такая трабла была при переделывании второго мэрбла!

Ошибка в объектах. Попробуй понажимать в процессе редактирования кнопку Y (или I, точно не помню), и посмотреть, не "застрял" ли какой-нибудь объект в стене. Ошибка также возникает из-за неправильного размещения определенного типа пружины, и иногда даже от шипов в стене (видимо ставить в стену можно лишь некоторые виды шипов).

 

Illegal Instruction навряд ли можно вызвать неверным расположением объектов, оно в худшем случае может привести к глюкам, хотя игра в большинстве случаев со всем прекрасно справляется. Думаю, это связано с неправильным заданием подтипа объекта, в SonED2 он отражается вторым байтом в "Object Type Id:", а его двоичное значение показано чуть ниже в свойствах объекта, в строчке "Bits:". Этот байт задает свойства объекта, например тип монитора или количество колец и их расположение. Если СонЭд хорошо "знает" объект, он будет расшифрововать разные значение байта, отображая дополнительные строки, например "Param Field 0: 4 Rings" и т.п.

 

Очевидно, многим объектам хватает использования лишь нескольких бит для определения различных своих вариаций, поэтому байт подтипа объекта не может принимать какие попало значения. Если по неосторожности задать неверное значение, в лучшем случае объект будет работать неверно (например, пружина будет отбрасывать в противоположную сторону), а в худшем - illegal instruction.

 

А получается он вот как:

Obj2F_Types:			; XREF: Obj2F_Action
	moveq   #0,d0		; очистим d0, а то мало ли, какой там мусор завалялся
	move.b  $28(a0),d0   ; премещаем подтип объекта в d0
	andi.w  #7,d0		; применяем побитовую маску, оставляем только первые три бита числа
	add.w   d0,d0		; удваиваем его!
	move.w  Obj2F_TypeIndex(pc,d0.w),d1
	jmp	 Obj2F_TypeIndex(pc,d1.w)

; ========================
Obj2F_TypeIndex: dc.w Obj2F_Type00-Obj2F_TypeIndex
	dc.w Obj2F_Type01-Obj2F_TypeIndex
	dc.w Obj2F_Type02-Obj2F_TypeIndex
	dc.w Obj2F_Type03-Obj2F_TypeIndex
	dc.w Obj2F_Type04-Obj2F_TypeIndex
	dc.w Obj2F_Type05-Obj2F_TypeIndex
; ========================

Этот пример кода как раз объекта MZ, который в исходнике назван "large moving platforms". Здесь подтип объекта в определенном месте используется как указатель на одну различные роутины, которые отвечают за то, каким образом будет двигаться объект. Игра рассчитана на то, что он будет принимать значения от 0 до 5. Если значение будет иным, команда jmp прыгнет не на определенную роутину, а в абсолютно случайное место, что в большинстве случаев вызовет Illegal Insturction, либо Line 1010 (1111) Emulator. Несмотря на то, что умный код применяет маску и оставляет только три бита числа (чтобы оно было в пределах от 0 до 7), ошибки все равно возможны, если эти три бита составят 6 или 7.

 

Ну вот...Опять столкнулся с проблемой.Захотел я вставить за место бадника Newtron поставить гусенецу.Поставил.Но есть один баг.Спрайт Motobug'а не догружается...Может кто-нибудь подскажет,в чём дело...

 

Расскажи ситуацию подробнее. Где поставил? В какой зоне? Делал ли что-нибудь с кодом или артом?

Мы не можем постоянно догадываться, что ты делал, чтобы поставить гусеницу и как выглядит недогруженный спрайт Мотобага, так расскажи по-нормальному, тогда у людей будет больше шансов помочь тебе или догадаться о причине проблеммы.

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


Ссылка на сообщение
В какой зоне?

Очевидно GHZ, поскольку бадник Newtron находится только на ней.

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


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

Охвачен маньячной идеей написать хоуминг атаку 8)

Собственно, принцип ее действия я понимаю, однако есть 2 вопроса:

1) Обязательно ли писать новый код, который проверяет близость находящихся врагов/мониторов к сонику, или можно просто тупо взять проверку близости Buzzbomber'a и потом по его принципу сделать такую же проверку других бадников/миониторов?

2) КАК ЧЕРТ ВОЗЬМИ ПЕРЕМЕСТИТЬ СОНИКА НА ПОЗИЦИЮ ВРАГА, всю ночь над исходником сидел, голову ломал.

 

По идее, даже если я один не напишу хоуминг атаку, то мне поможет в этом один знакомый продвинутый ромхакер с эму-ленда, но сначала я хочу попробовать свои силы =)

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×