Вход

Просмотр полной версии : King's Bounty: Попытка перенести KB с PC(DOS) на Специалист



aspgnom
18.07.2025, 23:17
Привет всем. Я тут новенький, а так старенький 8-бит электронщик/программист. Первый собранный комп был "Специалист".
Мою любовь и боль. Как все помнят сборка на мгтф и половина горелых микросхем с ес-1020.Сборка и отладка заняла почти 2 года.
Потом быстрая пересадка на IBM PC и я на больше чем 30 лет забыл про 8-битный мир. Потом увидел статьи CityAceE и ностальжи
вернуло меня на путь истинный.
Посмотрев на попытку CityAceE переписать с Атари tony захотелось самому перенести какую то игру. Выбор пал на King's Bounty 1990 года под DOS(PC). Окунувшись в проект я так
увлекся что трачу на это все свое свободное время(когда глаза позволяют.)
https://pic.maxiol.com/thumbs2/1752865006.94636015.emu80qtkqszjrleua.png (https://pic.maxiol.com/?v=1752865006.94636015.emu80qtkqszjrleua.png&dp=2)
https://pic.maxiol.com/thumbs2/1752865924.94636015.emu80qtbpau5ximk7.png (https://pic.maxiol.com/?v=1752865924.94636015.emu80qtbpau5ximk7.png&dp=2)
С начала попробовал конвертировать обе заставки игры. Контроль режима 2 цвета на полоску в восемь точек(байт) из которых один черный вручную оказался очень трудоемок,
пришлось написать утилитку на Python-e которая контролировала корректность цветов. Конвертация изображения на удивление заняла много времени. Я совсем не художник и мне
было трудно дорисовывать элементы которые конвертировать не удалось.

Разобравшись с заставками дело перешло на карту уровня. Пришлось нарисовать заготовку редактора уровня на том же Python-е.
https://pic.maxiol.com/thumbs2/1752866522.94636015.pythonyq68wfpisc.png (https://pic.maxiol.com/?v=1752866522.94636015.pythonyq68wfpisc.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866864.94636015.pythonazovmoojju.png (https://pic.maxiol.com/?v=1752866864.94636015.pythonazovmoojju.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866813.94636015.pythonsyqomj9dd7.png (https://pic.maxiol.com/?v=1752866813.94636015.pythonsyqomj9dd7.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866894.94636015.pythonyxz8sswxqb.png (https://pic.maxiol.com/?v=1752866894.94636015.pythonyxz8sswxqb.png&dp=2)
Ввод даже в редактор уровня занял почти 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/1752869217.94636015.emu80qtfvlvi4unjp.png (https://pic.maxiol.com/?v=1752869217.94636015.emu80qtfvlvi4unjp.png&dp=2)
https://pic.maxiol.com/thumbs2/1752869333.94636015.emu80qtump3k4os9u.png (https://pic.maxiol.com/?v=1752869333.94636015.emu80qtump3k4os9u.png&dp=2)

Сейчас идет добавление интерактивности элементам карты. Перерисовал штатный фонт чтоб он содержал русские буквы и уместился в 1 кб.
Разработка продолжается. Пока на этом все.

CityAceE
19.07.2025, 08:39
Отлично! Спасибо за подробности, о которых ты до этого не рассказывал. Игра выглядит довольно интересно! Сразу даже и не скажешь, что это стандартный Специалист с восьмицветомцветом. Очень надеюсь, что твоего энтузиазма хватит, чтобы довести эту работу до финала ;)

По-моему ты ни разу не упоминал ассемблер, в котором пишешь. Это SJAsmPlus?

aspgnom
19.07.2025, 09:39
Первый что нашел меня вполне удовлетворял - Retro Assembler V2022.1. Правда недавно наткнулся , что по документации он может работать с любой кодировкой, а по факту
там всего 3-4 кодировки работают и utf-8. Из за этого файл с текстом в 1251 программа считывает с SD.

anarchyman
26.07.2025, 20:17
aspgnom, Шикарнейший проект. KB - одна из моих любимейших игр была для DOS. Более того сейчас готовлю тоже проект (достаточно глобальный) связанный с King's Bounty.
(скоро я сделаю анонс).
Вопрос такой: а сейчас (на данном этапе) - вся механика, рандом и условный ИИ - это самописно, или реверс (дизасм) DOS версии, адаптированной под 8bit cpu?
В любом случае буду с огромным интересом наблюдать за прогрессом! Если ведете что-то вроде "дневника разработчика" - так же было бы интересно ознакомиться.
Желаю успехов в проекте, и главное сил довести его до конца.
У меня Специалист на данный момент доступен только через эмулятор - но если нужно будет содействие какое то для тестирования - я всегда буду рад помочь в этом проекте.

parallelno
29.07.2025, 05:37
Классно!!! Удачи и сил чтобы доделать.
Я тоже использую retro assembler для своего проекта. Понаделал кучку полезных макросов. Если интересно, могу поделиться, правда у меня код в мнемониках i8080.

aspgnom
29.07.2025, 13:29
Код в мнемониках i8080 - это достоинство, а не недостаток. Нужна вся арифметика, чтоб не изобретать велосипед.