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

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

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

Люди, помогите! Когда я упаковываю, у меня выходит ошибка, вот. Как это исправить?

PS: я изменил спрайты фликки.

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


Ссылка на сообщение
Люди, помогите! Когда я упаковываю, у меня выходит ошибка, вот. Как это исправить?

PS: я изменил спрайты фликки.

Это ты в АСМе копался, там и есть ошибки

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


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

DeidaraNT, я в sonic1.asm ни чего не менял. Я его даже на оригинальный заменял, всё равно ошибку пишет...

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


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

DeidaraNT, это же элементарная ошибка с бранчем.

На твоем скриншоте я обвел строки, на которых находится ошибка. Скачай EmEditor, открой в нем sonic1.asm, жми Правка - Перейти - вбей строку, на которой находится ошибка, тебя переместят на нее. И вот на этой строке замени

b**.s на b**.w
bra.w на jmp
bsr.w на jsr

 

Да, и еще, вытащи дизасембл из этого хаоса папок, компилятор иногда глючит при таком длинном пути.

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

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


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

Люди, помогите!:-P

У меня выходят следующие куча ошибок при упаковке! Как их исправить?

Вот:

SN 68k version 2.53

D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\PALETTE POINTERS.ASM(25) : Warning : Size of pal_levels ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\SONIC.ASM(3038) : Warning : Size of colpointers ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\3A GOT THROUGH CARD.ASM(175) : Warning : Size of levelorder ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\SONIC.ASM(6836) : Warning : Size of musiclist2 ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\PATTERN LOAD CUES.ASM(23) : Warning : Size of plc_levels ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\PATTERN LOAD CUES.ASM(36) : Warning : Size of plc_animals ($6) does not match ZoneCount ($7).
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\SONIC.ASM(11608) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\SONIC.ASM(2298) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\SONIC.ASM(2384) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\89 ENDING SEQUENCE STH.ASM(37) : Error : Branch (32782 bytes) is out of range
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(28) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(32) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(36) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(44) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(44) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(44) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(45) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\28 ANIMALS.ASM(45) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\59 SLZ ELEVATORS.ASM(10) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\5A SLZ CIRCLING PLATFORM.ASM(10) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\5B STAIRCASE.ASM(10) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INCOBJ\5E SEESAW.ASM(10) : Warning : Forward reference to redefinable symbol
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\DEBUGLIST.ASM(181) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\DEBUGLIST.ASM(182) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\DEBUGLIST.ASM(183) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\DEBUGLIST.ASM(188) : Error : Symbol 'map_animal2' not defined
D:\GAMES\SONIC_1_DISASSEMBLY_JULY_2010\_INC\DEBUGLIST.ASM(190) : Error : Symbol 'map_animal2' not defined

Assembly completed.
14 error(s) from 51615 lines in 0.86 seconds

Я эти АСМки не менял, только изменил спрайты флики и её мапы, больше ни чего.

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

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


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

Да, нахимичил ты видимо на славу)

Видимо ты добавил какой-то объект map_animal2 и где-то не прописал его, где нужно было, оттуда и вышли эти ошибки.

Варьянты:

1) Править эти ошибки

2) Откат предыдущих изменений в коде

 

И, кстати, используй лучше этот дизассембл, ибо он актуальнее SVN-ского. Как вариант, использовать дизассембл S1HS.

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


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

Как в асм можно сделать рестарт игры?

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


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

Я поражаюсь, одни нубы на ЦИСе не могут нормально картинку перекрасить, другим-ассемблер, как три копейки. Жесть.

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


Ссылка на сообщение
Как в асм можно сделать рестарт игры?

Попробуй вставить move.b #0,($FFFFF600).w; set Game Mode to Sega Screen

Это может и не реестарт игры. Можешь попробовать если не получиться подставить другии значения.Если опять не получиться попробуй Джимпнуться на сега экран

=)

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


Ссылка на сообщение
Как в асм можно сделать рестарт игры?

Посмотри код демок, после того, как демка заканчивается, идет рестарт.

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


Ссылка на сообщение
Попробуй вставить move.b #0,($FFFFF600).w; set Game Mode to Sega Screen

Это может и не реестарт игры. Можешь попробовать если не получиться подставить другии значения.Если опять не получиться попробуй Джимпнуться на сега экран

:)

Я это пробовал, но увы в игре потом много багов. Мне нужен именно ПОЛНЫЙ рестарт игры.

 

Посмотри код демок, после того, как демка заканчивается, идет рестарт.

Я пробовал. Тоже не получается.

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


Ссылка на сообщение
Я это пробовал, но увы в игре потом много багов. Мне нужен именно ПОЛНЫЙ рестарт игры.

 

 

Я пробовал. Тоже не получается.

Попробуй расковырять код Control mode, потому что там ведь когда нажимаешь Start+A происходит рестарт, или когда проиггрываешь

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


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

Попробуй вставить move.b #0,($FFFFF600).w; set Game Mode to Sega Screen

Это может и не реестарт игры. Можешь попробовать если не получиться подставить другии значения.Если опять не получиться попробуй Джимпнуться на сега экран

:)

Я это пробовал, но увы в игре потом много багов. Мне нужен именно ПОЛНЫЙ рестарт игры.

Полного рестарта железа (с автоматической очисткой памяти, ресетом всех регистров и пр), подобно Hard Reset'у в эмуляторах, добиться нельзя. Все должно делаться посредством кода, поэтому переход на Sega Screen в этом случае и есть самое подходящее решение.

 

Хотя можно в качестве совсем уж экстремального способа прыгнуть на EntryPoint, но это не очень то хорошо, и не факт, что все будет в порядке, хотя так делается в Sonic 3 в случае ошибки (вектор ErrorTrap).

 

Джамп на Сега скрин - это совсем плохо и обязательно кончится вылетом игры. Связано это с состоянием стека на момент прыжка, он уже используется режимом экрана Level, и сверху этого забит вызовами кучи вложенных суброутин. Режимы экрана - дело тонкое, и в этом должна соблюдаться последовательность, не случайно в игре присутствует процедура MainGameLoop.

 

MainGameLoop:
move.b  ($FFFFF600).w,d0; load Game Mode
andi.w  #%11100,d0	  ; apply bit mask, so d0 will be <= $1C and multiple of 4
jsr	 GameModeArray(pc,d0.w); jump to apt location in ROM
bra.s   MainGameLoop

 

Это такой бесконечный цикл, который вызывает суброутину (например, Level или SegaScreen) в зависимости от значения в адрессе $FFFFF600.

 

Чтобы перейти к другому экрану, вызванная суброутина должна изменить $FFFFF600, а затем снова вернуться к MainGameLoop с помощью rts.

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

 

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

 

move.b	#0,($FFFFF600).w; set Game Mode to Sega Screen

 

Не важно, что будет ниже в коде, но когда все суброутины в цикле завершатся, внутри Level_MainLoop настанет черед выполнить этот код:

 

Level_MainLoop:
<...>
cmpi.b  #8,($FFFFF600).w
beq.s   Level_ChkDemo; if screen mode is 08 (demo), branch
tst.w   ($FFFFFE02).w; is the level set to restart?
bne.w   Level		; if yes, branch
cmpi.b  #$C,($FFFFF600).w
beq.w   Level_MainLoop  ; if screen mode is $0C (level), branch
rts

 

Особенно важны последние три строчки, которые говорят, что если $FFFFF600 изменился, не надо больше продолжать цикл, а надо выйти из суброутины, и вернуться снова к MainGameLoop, который, в свою очередь, и перейдет к другому экрану.

 

Да, режимы экранов - это штука очень сложная и тонкая, но что поделать =Р

 

SONIC2010, короче просто пиши "move.b #0,($FFFFF600).w", это самый правильный способ. Кстати, какие у тебя происходят баги после рестарта игры?

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

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


Ссылка на сообщение
SONIC2010, короче просто пиши "move.b #0,($FFFFF600).w", это самый правильный способ. Кстати, какие у тебя происходят баги после рестарта игры?

Ну я уже кое-что тут придумал.

Баги у меня были из-за переходов с этапа на титульник. И когда я на титульнике жму старт у меня загружается не тот левел который должен загружаться по идее. И ещё титульник загружал мепинги последнего пройденного этапа.

Я тут уже во всём разобрался.

Но всё равно СПАСИБО!

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


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

Где можно скачать настроенный SonED 2? Мне не хочется пользоваться SonED 2 из функционала программы S1HS.

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


Ссылка на сообщение
Где можно скачать настроенный SonED 2? Мне не хочется пользоваться SonED 2 из функционала программы S1HS.

А самому поискать? http://info.sonicretro.org/SonED

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


Ссылка на сообщение
SonED2 V 1.3 - Но это не настроенный.Настроенный есть только в S1HS.Но я бы не сказал,что это не настроенный СонЕД. Изменено пользователем TailsX-Doll

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


Ссылка на сообщение
Огромное "спасибо".

11479742.png

А ты по какой качал и че делал???

офтоп: ты мой тезка)))) =)

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


Ссылка на сообщение
Огромное "спасибо".

11479742.png

Бедный СонЭД.Чё ты с ним делал?

По вопросу:

Вместе с СонЕДом открывается ещё одно окно.Посмотри,чё в этом окне происходит.Может СонЕД какие то файлы не находит.

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


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

Ультимейт Фейлспалм. Нужно настраивать в блокноте файлы проектов, указывать, где находятся файлы уровней, палитры и т.д. Как тебе СонЭд сам их найдет? В общем, клади туда опять SonEd из S1HS, качай дизассембл svn и скопируй из его сонэда папку objdef в свой сонэд.

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


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

Чёт давненько вопросов не было...задам ка я один...

Я изменил звуковой движок в своём хаке...но есть пара глюков:

Звук "СЕЕГААА" воспроизводится с глюками...то есть он вообще не воспроизводится...

После проигрывания мелодии дополнительной жизни мелодия самого уровня дальше не воспроизводится...

И во время мелодии Неуязвимости не играют звуки пружин/прыжка/взятия колец и.д....

Кто знает,как это можно исправить?

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


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

Как настроить SonED2 помогите пожалуйста...

____________________________________________

Уже не надо, разобрался сам

Изменено пользователем Ежидзе

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


Ссылка на сообщение
Чёт давненько вопросов не было...задам ка я один...

Я изменил звуковой движок в своём хаке...но есть пара глюков:

Звук "СЕЕГААА" воспроизводится с глюками...то есть он вообще не воспроизводится...

После проигрывания мелодии дополнительной жизни мелодия самого уровня дальше не воспроизводится...

И во время мелодии Неуязвимости не играют звуки пружин/прыжка/взятия колец и.д....

Кто знает,как это можно исправить?

У меня такие же баги.

 

 

Из Sonic the Hedgehog 2 Final...

Неа.У тебя стоит драйвер другой.

Sonic 2 Clone Driver.Он типо клон драйвера из Sonic 2 Final.Но этот драйвер ещё воспринимает мелодии из первого соника.

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


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

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

Вопрос про PCM драйвер Jman'а.

С помощью этого драйвера в хак можно добавлять не более 16 семплов?Верно?Если да,то как тогда MarkeyJester поставил в хак намного больше 16 семплов?Если это благодаря DAC банкам,то как их создавать?

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


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

Вопрос про PCM драйвер Jman'а.

С помощью этого драйвера в хак можно добавлять не более 16 семплов?Верно?Если да,то как тогда MarkeyJester поставил в хак намного больше 16 семплов?Если это благодаря DAC банкам,то как их создавать?

В описании драйвера можно увидеть:

The default behavior of the driver is 14 PCM slots and 1 multi-bank PCM slot for a total of 15 slots. However, this can easily be changed. First, you have to change when the sega sound is played. To do that, go to offset $3D of the uncompressed file. The default is $0F. Change this to the number of slots you want (so if you want 18 slots, change it to $12). Do note that this will change the value you need to put into $1FFF in your game code in order to play the sega sound. This is the value of offset $3D + $81 (so in the previous example, you'd need to play $93 ($12+$81) into $1FFF). Then just apped the extra PCM data to the end of the table. There's plenty of RAM in the z80, so you can have an endless amount of PCM samples.

Т.е., по умолчанке идут 14 PCM-слотов и 1 мульти-банковый, всего 15. Но, отредактировав драйвер, можно поставить сколько угодно слотов.

 

Банки здесь - это области памяти в РОМе. Процессор Z80 имеет ограниченный доступ к РОМу, поэтому использует переключение банков памяти. Размер одного банка - 32 Кб, т.е. Z80 может читать РОМ только блоками по 32 Кб.

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

 

Но jman сделал возможность воспроизводить сэмплы, занимающие по несколько банков. Например, если у тебя огромнейший сэмпл в, скажем, 48 КБ, то можно будет его воспроизвести. Это называется "multi-bank PCM-samples", по умолчанию для таких выделен один слот. При воспроизведении такого сэмпла сменится заданное количество банков, при этом вне зависимости от его размера, воспроизводиться звук будет вплоть до конца последнего банка, так что область от конца сэмпла, до конца последнего банка нужно будет предусмотрительно заполнить нулями.

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


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

А вот тут можно поподробнее?

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


Ссылка на сообщение
А вот тут можно поподробнее?

Да вот тут все написано: http://forums.sonicretro.org/index.php?showtopic=6920

 

А именно:

NOTE ON CHANGING THE NUMBER OF PCM SLOTS.

 

The default behavior of the driver is 14 PCM slots and 1 multi-bank PCM slot for a total of 15 slots. However, this can easily be changed. First, you have to change when the sega sound is played. To do that, go to offset $3D of the uncompressed file. The default is $0F. Change this to the number of slots you want (so if you want 18 slots, change it to $12). Do note that this will change the value you need to put into $1FFF in your game code in order to play the sega sound. This is the value of offset $3D + $81 (so in the previous example, you'd need to play $93 ($12+$81) into $1FFF). Then just apped the extra PCM data to the end of the table. There's plenty of RAM in the z80, so you can have an endless amount of PCM samples.

 

You can also change the number of multi-bank PCM slots. Note that these will always be at te end of the PCM table, no matter how long it is. To do this, go to offset $96. The default is $E. This desribes which slot number to begin defining multi-bank PCM samples. So if you, for example, change it to $C, then every slot in the table from $C onward will be a multi-bank PCM definition. Combined with the change of the number of slots above, this would give you 12 normal PCM slots and 6 multi-bank PCm slots (lots 0-$B and slots $C-$11 respectively.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×