PDA

Просмотр полной версии : Мерцание спрайтов



Slider
27.07.2009, 13:05
Только недавно стал начинающим правщиком задержек под пентагон-стандарт, чтоб спрайты не мерцали. В 90% играх это достаточно легко - обычно задержки регулируются подобным образом:
ld bc,1000
m1: dec bc
ld a,b
or с
jr nz,m1
Эта хрень стоит там, где процедуры вывода графики на экран (вроде как после них). Регулируя значение в BC можно добиться отсутствия мерцания.
Но вот, что делать, если прямых процедур с задержками нет? Вот уже долго бьюсь с играми Super Wonder Boy (там, когда нажимаешь кнопку паузы по бордеру должна бежать надпись) и Ghouls'n'Ghosts (мерцают спрайты вверху экрана).
Мож, кто поможет?..

drbars
27.07.2009, 20:48
Там скорее всего задержки нужно в мегакод ставлять. Если он генерится, то в процедуру генерации мегакода нулей добавить между выводом бордюрных сток.

Slider
29.07.2009, 00:44
У-у-у-у... :( Как все сложно... А пальцем тыкнуть можешь?..

White_Hunter
29.07.2009, 12:51
Сорри, что влез не по делу...
Слайдер, ты уже 15лет делаешь дисковые версии игр, и так упорно не желаешь изучить ассемблер, тебе что, не интересно ? Давно бы разобрался сам.
Проще конечно прицепить лейблик, дискет бай Слайдер...

valeron
29.07.2009, 19:08
Слайдер, не слушай его! Ты - крут! В чужом коде копаться - я никогда не мог себя заставить без содрогания.

Slider
29.07.2009, 23:29
Слайдер, ты уже 15лет делаешь дисковые версии игр, и так упорно не желаешь изучить ассемблер, тебе что, не интересно ? Давно бы разобрался сам.
Проще конечно прицепить лейблик, дискет бай Слайдер...
Хочешь, даже лейбликов цеплять не буду?.. ;) Я так понимаю, что все равно бесполезным делом занимаюсь. И в ассемблере не бум-бум... :(
В этих штуках, о которых я завел речь, только-только начал разбираться (спасибо Гудбою). Думаю, со временем (которого как всегда децильняк и только на то, чтоб лейблик прицепить его и хватает) все же разберусь. Но помощь нужна СЕЙЧАС!

drbars
31.07.2009, 13:41
Процедура вывода бордюрного скролла по адресу B058h.
В начале её в BC стоит значение задержки для вертикального положения скоролла.
Далее идёт список комант типа out (c), регистр. И сразу на ними два NOP'а. Это и есть задержка, количество NOP'ов нужно эксперементально изменять и смотреть на результат. Далее идут аналогичные конструкции, там всё также. Мегакод очень простой :) Для удобства лучше этот скролл дизасемблировать, настоить отдельно... и потом оптимизировать под исходный размер кода.

Slider
03.08.2009, 15:00
Это я так понимаю, слово "pause" в Super Wonder Boy. Спасибо!
А глянь еще, плз, Ghouls'n'Ghosts!..

drbars
03.08.2009, 22:29
А глянь еще, плз, Ghouls'n'Ghosts!..
Полагаю тебе нужно найти команду halt в главном цикле. где-то рядом с ней и будет заветная задержка. ;)

Slider
04.08.2009, 23:40
Ну да, обычно так и бывает - ei:halt и рядышком задержка... но тут не так... или я не нашёл... :(

drbars
05.08.2009, 14:33
Основной цикл игры, где процеруды вывода по адресу 8A9Ch. Вызов происходит из прерывания которое указывает на адрес 8A79h.

Процедура 8204h - очистка экрана
Процедура A17Dh - вывод спрайтов

Для коррекции необходими доработка (вставка задержки):

ORG #5CA6
LD BC,100 ; значение подбираем экперементально.
M1: DEC BC
LD A,B
OR C
JR NZ,M1
JP #8A9C

ORG #87C4
LD HL,#5CA6 ; меняем адрес CALL'а перерывания во время игры.

всё :)

Slider
05.08.2009, 19:27
Мегаспасибо Доктору Барсу!!! Теперь, надеюсь, по свободе доделаю оба релиза! Респект, дружище!!!

drbars
05.08.2009, 22:51
Дерзай :) Главное заморочиться :D