King's Bounty: Попытка перенести KB с PC(DOS) на Специалист
Привет всем. Я тут новенький, а так старенький 8-бит электронщик/программист. Первый собранный комп был "Специалист".
Мою любовь и боль. Как все помнят сборка на мгтф и половина горелых микросхем с ес-1020.Сборка и отладка заняла почти 2 года.
Потом быстрая пересадка на IBM PC и я на больше чем 30 лет забыл про 8-битный мир. Потом увидел статьи CityAceE и ностальжи
вернуло меня на путь истинный.
Посмотрев на попытку CityAceE переписать с Атари tony захотелось самому перенести какую то игру. Выбор пал на King's Bounty 1990 года под DOS(PC). Окунувшись в проект я так
увлекся что трачу на это все свое свободное время(когда глаза позволяют.)
https://pic.maxiol.com/thumbs2/17528...kqszjrleua.png
https://pic.maxiol.com/thumbs2/17528...bpau5ximk7.png
С начала попробовал конвертировать обе заставки игры. Контроль режима 2 цвета на полоску в восемь точек(байт) из которых один черный вручную оказался очень трудоемок,
пришлось написать утилитку на Python-e которая контролировала корректность цветов. Конвертация изображения на удивление заняла много времени. Я совсем не художник и мне
было трудно дорисовывать элементы которые конвертировать не удалось.
Разобравшись с заставками дело перешло на карту уровня. Пришлось нарисовать заготовку редактора уровня на том же Python-е.
https://pic.maxiol.com/thumbs2/17528...yq68wfpisc.png
https://pic.maxiol.com/thumbs2/17528...azovmoojju.png
https://pic.maxiol.com/thumbs2/17528...syqomj9dd7.png
https://pic.maxiol.com/thumbs2/17528...yxz8sswxqb.png
Ввод даже в редактор уровня занял почти 2 дня. Пришлось одновременно играть в игру.
А дальше началось самое интересное. В игре игрок остается в центре экрана и скролится вся область видимости на карту. Это и так непосильная задача(очистка экрана с использованием команд работы со стеком занимает порядка 70000 тактов с разверткой цикла на 64 push) для Специалиста(при выводе по спрайтово и используя маски наложения вывод залетает за 250000 тактов), так и размер блока спрайтов залезает за 30кб. Здесь я застрял почти на 3 месяца. Попытка сжать спрайты и разархивировать на лету(zx0) привело к падению отображения до 1750000 тактов.1 fps меня
не устраивал и началась оптимизация. Первым делом перестал перерисовывать спрайты которые совпадает со спрайтом в предыдущим положении игрока. Заменил процедуру вывода трех спрайтов
(вода, трава, песок) на простую заливку. Все это дало 1250000 тактов на кадр. Подумывал копировать область экрана с места на место, но в связи с тем что атрибут цвета не читается с экрана придется атрибуты хранить отдельно, а памяти и так не хватало. Потом Viktor Pykhonin дорисовал в свой эмулятор(Emu80) поддержку SD и жизнь заиграла новыми красками. Отказался от сжатия.
Создал что то типа ассоциативного кеша(памяти на все спрайты 32 кб все равно не хватало). Отвел под него 10кб а недостающие спрайты подкачивал. Таким образом довел отображение кадра от
100000 тактов до 450000 когда в кеш не попадаем. На этой оптимизации мои мозги(на данный момент) закончились и я вернулся к игре
Сделал перемещение по карте игрока и коллизии столкновений. Реверс изображения героя сделал через таблицу. Параллельно перерисовываю оставшийся контент от игры(ох много его там)
https://pic.maxiol.com/thumbs2/17528...fvlvi4unjp.png
https://pic.maxiol.com/thumbs2/17528...ump3k4os9u.png
Сейчас идет добавление интерактивности элементам карты. Перерисовал штатный фонт чтоб он содержал русские буквы и уместился в 1 кб.
Разработка продолжается. Пока на этом все.