BlaireCas, а можно посмотреть на код вывода спрайта? Не должно оно тормозить ТАК. БК медленнее, чем даже ПП УКНЦ, а на ней таких проблем нет.
BlaireCas, а можно посмотреть на код вывода спрайта? Не должно оно тормозить ТАК. БК медленнее, чем даже ПП УКНЦ, а на ней таких проблем нет.
Вот ссылка на видео моего рендера. Да, при шаге на соседнюю клетку на мгновение замирает, но там полностью пересчитывается видимость карты и объектов. Можно сделать несколько в фоне, чтобы шаг был мгновенный, но сейчас не до того.
https://youtu.be/ZanlUnj75p0
Собственно все на гитхабе есть.
1. Сам спрайт выводится сначала в буфер (по 1-му буферу на каждый цветной план). Вроде ты-ж подсказал юзать ASHC?
2. Затем буферы выводятся на экран (тут тормоза врубаются ибо экранное ОЗУ) я использую дефолтное с записью туда через регистры (уупс.. не отображать-же ВОЗУ в обычную память, эдак никакой памяти не напасешься).
3. Ну затем буферы восстанавливаются тайлами (вроде тут проблем не должно быть)
Основной кусок вывода в 1 цветной план буфера
Код:; plane-1 buffer routine, R0=spr addr, R5=buf addr, R4=height BufSprite1: bic #^B1111111111110000, R1 ; X % 16 bne 20$ ; zero shift ; R0=spr addr, R5=buf even addr, R4=height mov #BUFWID, R1 10$: bic (R0)+, (R5) ; mask word bis (R0)+, (R5) ; color word inc R0 ; 14T skip plane-2 colors inc R0 ; 14T add R1, R5 ; 14T buffer next line sob R4, 10$ ; 32T|16T return ; non-zero shift ; R0=spr addr, R5=buf even addr, R4=height 20$: mov (R0)+, R3 ; 32T mask word clr R2 ; 14T R2:R3 - mask dword ashc R1, R2 ; 92T (for R1=15) R2:R3 << R1 bic R3, (R5)+ ; 43T apply mask words bic R2, (R5) ; 43T dec R5 ; 14T back to previous addr dec R5 ; 14T mov (R0)+, R3 ; 32T color word clr R2 ; 14T R2:R3 - color word ashc R1, R2 ; 92T (for R1=15) R2,R3 << R1 bis R3, (R5)+ ; 43T apply color words bis R2, (R5) ; 43T inc R0 ; 14T skip plane-2 colors inc R0 ; 14T add #BUFWID-2, R5 ; 32T sob R4, 20$ ; 32T|16T ; =568T*16 return[свернуть]
Понятно что на 2-й цветной буфер будет аналогично.
Ну и разумеется там относительно приличный оверхед в обвязке вывода еще мол чтобы не всегда 16px по высоте выводить (спрайт из 2-х пикселей по высоте выведет только 2 строкив цикле да и все)
Периферийный процессор отдельно, но там нечто аналогичное.
Но! Когда буферный план надо вывести на экран - я не могу тупо копировать навроде (R4 адрес буфера, R5 адрес экрана):
10$: mov (R4), (R5)
add R1, R4
add R2, R5
sob R3, 10$
(так-то вот клево-бы было)
Потому-что - у меня адреса экрана выше 200000, ну и экран в центральном процессоре там побит на байты (8-пикселе). То-есть приходится поочередно из каждого буфера делать movb по ячейкам 176640 (адрес экранных 8-ми пикселей) 176642 (данные экранных 8-ми пикселей).
Тупой код вывода 16х16 с двух буферов на VRAM
Код:; draw 16x16 from buffer to screen, R1-levelX, R2-levelY Buf2Scr16: .ppexe #CmdBuf2Scr16 mov #176640, R4 ; to screen addr asl R2 mov LevYScrOfs(R2), R0 ; R0=starting screen line addr asl R1 ; R1=LevelX*2 add R1, R0 ; R0=scr addr mov R0, (R4) ; screen addr -> @#176640 ; to buffer addr mov LevYBufOfs(R2), R0 add R1, R0 ; buffer 1 addr -> R0 ; mov #SCRWID-1, R1 ; 1st buffer mov R0, -(SP) mov (R4), -(SP) mov #16., R3 mov #176642, R5 10$: movb (R0)+, (R5) inc (R4) movb (R0)+, (R5) add #BUFWID-2, R0 add R1, (R4) sob R3, 10$ ; 2nd buffer mov (SP)+, (R4) mov (SP)+, R0 add #VBufferSize, R0 mov #16., R3 inc R5 ; R5=176643 20$: movb (R0)+, (R5) inc (R4) movb (R0)+, (R5) add #BUFWID-2, R0 add R1, (R4) sob R3, 20$ return[свернуть]
- - - Добавлено - - -
А в первом посте ссыль на гитхаб. Берется оттуда например descnt.dsk - запускается, прописано в автозагрузку.
Ну или то что в /release скопировать куда хочется (на hdd образ например УКНЦ-шный).
Я бы не сказал что тормозит ибо я оставил пока только 1-ну мышь там в одном месте, 1-го паука, самого героя, и подбираемый объект который тоже спрайт. Максимум для 25фпс будет 2 мыши, герой и объект который лежит четко на одном тайле.
(если хочется увидеть мышь - проще в меню нажать вниз-вниз-вверх-вверх-вниз-вверх, затем подобрать лопату, затем нажать К2, затем еще раз нажать К2 (можно подбирать фонарик можно не подбирать), затем еще раз К2, затем еще раз К2 - дальше попытаться вылезти наверх где мыши водятся ибо дебажный режим и ниже еще ничего нет, а то по-нормальному честно можно париться еще мол там проходить, хоть небольшие да все-ж есть подколы для обычного прохождения, а с дебаговым режимом можно переключать "эпизоды")
Последний раз редактировалось BlaireCas; 09.09.2022 в 20:10.
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Ага, спасибо за указание нужных кусков кода. Да, ASHC я вроде действительно сам предлагал. Есть предложения, как сделать повеселее и этот код, там место для оптимизации на мой взгляд есть. Только у меня тут 2 ночи уже, спать совсе пора. Позже.
Но. Даже с вот этим запихиванием видеоданных через бестолковую однобайтовую дырку ... ну не должно оно быть НАСТОЛЬКО медленно. Там случаем не происходит такого, что процедура рисования вызывается несколько раз на кадр? Я как-то сам попал на такое же, из-за немерцающего вывода было непонятно, что лишняя работа делается.
Oleg N. Cher(10.09.2022)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ну изначально из-за чего влез в спор с jerri (очень крутой человек, сожрал собаку на графонии, но 8-ми битном) - это вот то что УКНЦ несмотря на кучу памяти (мол да там-же цельных 192Кб! да они зажрались! Saboteur обычный не осилить. А ведь там поездка в "метро" нормас сделана. Фу фуууу... А и Knight Lore написан на 48кб и всем играм даст фору)
Вообщем типа УКНЦ более бестолковый чем БК 0011М. Но что-ж, возможно это даже так. Однако это первый мой комп в котором изучал асм от пдп. Это как первая любовь. В игрухе получилось не прям круто, графоний рисовать страдать и тырить попиксельно с другим мест тоже та еще проблема. Придумывать сюжет вообще атас. (а что рисовать не придумав сюжет? тупо попрыгать мол не свалиться как в montezuma's revenge чтобы (кст очень хорошо сделан на атари, реиграбельно и все такое). Вообщем сложняк поэтому и тянется так долго. Все эти передвижения и прыжки ГГ парился делал чтобы не было совсем ужасно, чтобы не было мол прыгнул вперед и нельзя повернуть назад. Заняло кучу туповатого кода. А то получилась бы иначе игруха от BIL Corp (где он сейчас)
Мне там надо сделать чтобы фантом за тобой ходил и повторял движения, на вид вроде очень просто. Тупо сохряняешь последние 16 фреймов координаты героя и потом прорисовываешь их на втором спрайте. Ну должно как-бы прокатить. Герой ходит по два пикселя за кадр 25фпс и отставание follower-a на два тайла почти будет не так прям ужс выглядеть. Разве-что когда герой(иня) будет стоять на месте тогда второй персонаж тупо подбежит и станет за ней.
А как сделать чтобы например если ГГ прыгнула на другой блок и он за ней прыгал только потом (то-есть ты перепрыгиваешь лужу кислоты, второй герой который за тобой идет стоит думает, прыгать сразу не должен)? Сложна да
Кстати у тебя Сандро возможно получилос-бы что-то типа EOB на писишке типа данжен кравлер с а-ля ФПС видом. НО сам знаю что это ужас даже с современными средствами разработки (мало памяти, зажуёт всю сразу)
(очень сумбурно написал, damn that demon alcohol (c) nazareth)
Последний раз редактировалось BlaireCas; 10.09.2022 в 03:27.
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Так я собственно уже год потихоньку пишу и это: https://zx-pk.ru/threads/33655-crawl...evykh-igr.html
Памяти маловато, но хватает пока. На 11М+диск вообще проблем нету, там можно хоть как в TES:Arena мир размером в континент сделать.
Только я хочу не EOB, а хоррор про потерянный в космосе космический корабль с всякой жутью на борту. Типа как System Shock или Dead Space, но только по духу, ни разу не клон. У походовки свои правила и логика, не надо туда клонировать 3D в реальном времени, это не сработает.
Сделал follower-а на пробу. Ну а чтоВесело "бегает" ахах, аж понравилось.
Разумеется он "ненастоящий", а тупо повторение последних 16-ти координат и анимаций спрайта ну только с другим базовым номером спрайта.
Гифка
[свернуть]
То что тут в синем цвете это нормально, так задумано специально.
Шедевр портирования на УКНЦ - игра Highway Encounter
Эмуляторы: UKNCBTL, EmuStudio (респект авторам)
Oleg N. Cher(10.09.2022), parallelno(11.09.2022), Radon17(10.09.2022), Sandro(10.09.2022), Titus(10.09.2022), tnt23(10.09.2022)
А в общем случае нормального последователя очень сложно написать, т.к. есть куча ситуаций, когда надо будет с ним разойтись, а места нету. И что делать?
Собственно, я помню только один случай, когда всё нормально сделано. Это принц персидский, а точнее -- спинофф от 2008 года. Вот там Элика проявляет просто-таки невероятные чудеса ловкости, чтобы не мешать нашему анонимному герою. И наоборот, как раз очень даже ему помогает.
Вот я специально нашел демонстрацию акробатики (и это ещё далеко не все, что она может!)
https://youtu.be/-4aqRiK1YsA?t=177
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)