PDA

Просмотр полной версии : Портирование Dangerous Rick



nzeemin
31.08.2021, 11:21
Всем доброго дня!
На днях я листал видео на ютьюбе и набрёл на довольно неплохую игрушку для компьютера Львов ПК-01 - Dangerous Rick.
Игра "по мотивам" Rick Dangerous, графика перерисована с CGA, уровни нарисованы свои.
Авторы - Zelya и Dimouse с форума old-games.ru
https://www.youtube.com/watch?v=lIBUUlxJ-KM&ab_channel=DimouseBlau - Level 2
https://www.youtube.com/watch?v=zHgvZg4_XWE&ab_channel=DimouseBlau - Level 3

Скриншоты игры на Львов, с эмулятора:

https://pic.maxiol.com/thumbs2/1630397104.1845257631.ricktitle.png (https://pic.maxiol.com/?v=1630397104.1845257631.ricktitle.png&dp=2) https://pic.maxiol.com/thumbs2/1630397072.1845257631.ricklevel1.png (https://pic.maxiol.com/?v=1630397072.1845257631.ricklevel1.png&dp=2)

На Львов тот же процессор ВМ80А, на меньшей частоте (2.5 МГц), те же размеры экрана, но другая организация памяти.
В целом выглядит как хорошая возможность портирования на Вектор.

Я попросил исходники у авторов игры, и Zelya их выложил в тот же день - спасибо огромное!
https://www.old-games.ru/forum/threads/dangerous-rick-novaja-igra-dlja-pk-01-lvov.64850/ - тема на форуме, аттач с исходниками на второй странице

В общем, я начал процесс портирования. Репо с кодом: https://github.com/nzeemin/vector06c-dangerick
Для начала, обработал код, так чтобы он собирался под TASM 3.2 (Windows).
Затем убрал обращения к портам.
Добавил стандартную для Вектора преамбулу - инициализация, обработчик прерывания, задание палитры.
Дальше адаптировал рисование тайлов и спрайтов к экрану Вектора.

Пока не знаю насколько быстро смогу доделать игру до рабочего состояния - я в процессе смены места работы, свободного времени будет мало.
И ещё, наверняка мне понадобится помощь в работе со звуком.

Текущие скриншоты на Векторе, с эмулятора:

https://pic.maxiol.com/thumbs2/1630450086.1845257631.202108319.png (https://pic.maxiol.com/?v=1630450086.1845257631.202108319.png&dp=2) https://pic.maxiol.com/thumbs2/1630398004.1845257631.202108304.png (https://pic.maxiol.com/?v=1630398004.1845257631.202108304.png&dp=2)

https://pic.maxiol.com/thumbs2/1630442358.1845257631.202108318.png (https://pic.maxiol.com/?v=1630442358.1845257631.202108318.png&dp=2) https://pic.maxiol.com/thumbs2/1630450190.1845257631.202108316.png (https://pic.maxiol.com/?v=1630450190.1845257631.202108316.png&dp=2) https://pic.maxiol.com/thumbs2/1630450260.1845257631.20210831c.png (https://pic.maxiol.com/?v=1630450260.1845257631.20210831c.png&dp=2) https://pic.maxiol.com/thumbs2/1630450285.1845257631.20210831d.png (https://pic.maxiol.com/?v=1630450285.1845257631.20210831d.png&dp=2)

Текущее состояние: есть играбельное превью, пока без звука.

jerri
31.08.2021, 12:03
nzeemin, А может использовать данные из спектрумской версии Rick 1?

ivagor
31.08.2021, 12:07
В оригинале под уровень использовали область начиная с адреса 0000h - на Векторе так не получится
Если очень-очень надо, то в принципе можно (примерно как в эксолоне). При старте привязываемся таймером к прерыванию и для опроса клавиатуры сверяемся с таймером (а если выбрать управление джойстиком, то и таймер не нужен). А палитру перепрограммировать тут вроде особо и не нужно.

nzeemin
31.08.2021, 12:20
nzeemin, А может использовать данные из спектрумской версии Rick 1?

Моя задумка - что сначала сделать порт 1:1 со Львов, под именем "Dangerous Rick".
А потом уже можно сделать более аутентичный оригинальному "Rick Dangerous", собрав лучшее с разных машин.

- - - Updated - - -

ivagor, там на титуле написана вам благодарность - это за код декомпрессора megalz?

CityAceE
31.08.2021, 12:24
Раз исходники есть, то сразу мелькнула мысль, что это возможно сделать и для Специалиста. Да, ivagor ? ;)

nzeemin
31.08.2021, 13:06
Если очень-очень надо, то в принципе можно (примерно как в эксолоне). При старте привязываемся таймером к прерыванию и для опроса клавиатуры сверяемся с таймером (а если выбрать управление джойстиком, то и таймер не нужен). А палитру перепрограммировать тут вроде особо и не нужно.

Если всё же использовать прерывания, с какого самого нижнего адреса можно свободно использовать память?

ivagor
31.08.2021, 13:19
это за код декомпрессора megalz?
Даже не знаю, я в то время сделал очень плохой распаковщик megalz для 8080, а хороший сделал b2m (или это все же было позже). Скорее дело в портированном биперном движке, но опять же он по современным меркам отстойный, потом я сделал практически нормальный. Но это я гадаю, надо смотреть, может там моего ничего и нет.

возможно сделать и для Специалиста. Да, @ivagor ?
Если вариант для вектора мне понравится :) и портирование на специалист будет казаться простым, то возможно попробую, если не будет других желающих.

- - - Добавлено - - -


Если всё же использовать прерывания, с какого самого нижнего адреса можно свободно использовать память?
Критичных участка традиционно 2:
1. 0000h-0002h - 3 ячейки на jmp по БЛК+СБР, но были программы, которые просто писали - не используйте для рестарта БЛК+СБР (F12) и тогда 0000-0002 можно задействовать для чего угодно. В этом случае еще можно предусмотреть для софтового рестарта комбинацию типа УС+СС+РУС/ЛАТ, чтобы пользователь не ощущал себя обделенным.
2. 0038h-003Ah - тоже 3 ячейки, но от их использования невозможно отказаться при разрешенных прерываниях.

PATHNK
31.08.2021, 13:29
Я попросил исходники у авторов игры
Это не авторы игры, это авторы порта.
Это Rick Dangerous 2 (https://en.wikipedia.org/wiki/Rick_Dangerous_2).


https://www.youtube.com/watch?v=f9h_t0_x2zY

Есть порт (http://www.bigorno.net/xrick/)1 части под "скрытым" названием XRick практически для всех современных ОС, включая Android (https://play.google.com/store/apps/details?id=net.xrick.sdl) с исходным кодом. Возможно это будет вам полезно.

nzeemin
31.08.2021, 13:37
Это не авторы игры, это авторы порта.


Чисто терминологический спор. По мне так это разные игры.

Zelya:


Общий антураж уровней взят из игры. По-моему, даже текст в заставках. Но все уровни нарисованы с нуля. Там даже, вроде, редактор уровней лежит с сорсами.
1,4 уровень рисовал я, 2,3 - Димаус (я только самое начала уровня 2 рисовал)

CityAceE
31.08.2021, 13:41
Если что, Zelya присутствует и на этом форуме. Возможно, он даже сможет помочь чем-то.

PATHNK
31.08.2021, 13:54
По мне так это разные игры.
Да как же разные, когда все спрайты и даже начальный текст совпадают?
Дело ваше, но по мне лучше делать порт с оригинала, а не порт порта.

ivagor
31.08.2021, 14:17
nzeemin, возможно проще будет разделить портирование на этапы и сначала добиться работы без переноса области 0000-..., а когда заработает, то уже и этим заняться. А на первом этапе как минимум 2 варианта:
1. Использовать джойстик, как упоминал выше.
2. Временно использовать конфиг вектора c z80, а там IM2 со всеми вытекающими плюшками.

nzeemin
31.08.2021, 16:21
nzeemin, возможно проще будет разделить портирование на этапы и сначала добиться работы без переноса области 0000-..., а когда заработает, то уже и этим заняться. А на первом этапе как минимум 2 варианта:
1. Использовать джойстик, как упоминал выше.
2. Временно использовать конфиг вектора c z80, а там IM2 со всеми вытекающими плюшками.

Придумал ещё такой вариант: пункт 1, но перед распаковкой на адрес 0000 делаем di, после распаковки восстанавливаем 3 байта 0038h-003Ah и делаем ei.

- - - Updated - - -


Дело ваше, но по мне лучше делать порт с оригинала, а не порт порта.

Конечно лучше всё и сразу. Но где деньги время взять?

ivagor
31.08.2021, 19:02
Что-то я стормозил, для специалиста эта графика совсем не подходит и просто так не конверснуть. Хотя подходит для эрика.

jerri
31.08.2021, 19:51
Что-то я стормозил, для специалиста эта графика совсем не подходит и просто так не конверснуть. Хотя подходит для эрика.

Для специалиста пойдет вот это

https://youtu.be/a9plTKlhWjg

Lethargeek
31.08.2021, 20:06
графон лучше драть с atari st
благо видеорежимы похожие

CityAceE
31.08.2021, 21:53
Что-то я стормозил, для специалиста эта графика совсем не подходит и просто так не конверснуть. Хотя подходит для эрика.
А что с ней не так? В том смысле, что на стандартном Специалисте возможен только один цвет в байте на чёрном фоне?

nzeemin
01.09.2021, 01:11
В аттаче первое превью. Пока без звука.
Можно попытаться пройти (но у меня не получилось).
На скринах тайлов жмите клавишу дольше чтобы сработала.
Управление - стрелки, РусЛат/СС/УС - стрелять. Джойстик-П тоже должен работать.

https://pic.maxiol.com/thumbs2/1630442358.1845257631.202108318.png (https://pic.maxiol.com/?v=1630442358.1845257631.202108318.png&dp=2)

- - - Updated - - -

Проверил что игра проходима с читами (когда враги вас не убивают 8-).
Есть некоторые шероховатости, но уже вполне играбельно.

ivagor
01.09.2021, 06:24
В том смысле, что на стандартном Специалисте возможен только один цвет в байте на чёрном фоне?
Да, а львовскому рику нужно 4 цвета/точку. Для специалиста подошла бы графика из спековского рика.

nzeemin
02.09.2021, 22:06
На каждом уровне игры по 8 экранов, и с точки зрения памяти, они расположены "горизонтально": сначала первая (верхняя) строка каждого из восьми экранов, затем все вторые строки и так далее. Распакованный уровень занимает 32 * 8 * 31 = 7936 байт.
Каждый уровень запакован отдельно, больше в игре ничего не запаковано. Теоретически, можно ещё сжать спрайты врагов - они свои на каждый уровень.

nzeemin
07.11.2021, 11:12
В аттаче второе превью.
Нашёл ошибку в конвертации спрайтов, переконвертировал все спрайты.

https://pic.maxiol.com/thumbs2/1636272807.1845267251.202111063.png (https://pic.maxiol.com/?v=1636272807.1845267251.202111063.png&dp=2)

nzeemin
29.07.2022, 16:26
svofski, прошу поместить пока preview2 версию игры в Базис как есть.
Как и с Asteroids - неизвестно когда у меня будет время и силы дописать игру, а играть то в принципе уже можно.

svofski
30.07.2022, 12:44
как есть
Поместил. Может быть написать чего-нибудь еще интересное про него?

parallelno
30.07.2022, 20:54
Расскажи пожалуйста как в этой игре вывод спрайтов организован и какие интересные оптимизации использованы.

reddie
30.07.2022, 22:37
как в этой игре вывод спрайтов организован и какие интересные оптимизации использованы
Желательно с техническими тонкостями навроде "как не попасть под ход луча", если таковое учтено.
То бишь какие процедуры куда рассованы по ходу вывода, что делается по прерыванию и т.д.
Если не оффтоп, думаю, всем изучающим будет интересно.

parallelno
31.07.2022, 10:11
Прошел первый экран примерно с 20 попытки. Далше не смог. Похоже я уже отвык от адского хардкора в старых играх :) Но игрушка сделана отлично. Красиво.

nzeemin
31.07.2022, 14:20
Расскажи пожалуйста как в этой игре вывод спрайтов организован и какие интересные оптимизации использованы.

По этой игре я мало что могу рассказать - для меня это только порт с компьютера Львов - см. ссылку в первом сообщении темы.

- - - Updated - - -


Поместил. Может быть написать чего-нибудь еще интересное про него?

Авторы: Zelya, Dimouse, ivagor, nzeemin

Dangerous Rick - платформенная аркада про отважного Рика, бороздящего инопланетные миры на пути к злодею по имени Fat Guy. Графика и сюжет были вчистую позаимствованы из Rick Dangerous II (1990, DOS) (версии для CGA), уровни же созданы с чистого листа.
Игра выпущена Zelya и Dimouse в 2015 году для компьютера Львов ПК-01 - см. https://www.old-games.ru/forum/threads/dangerous-rick-novaja-igra-dlja-pk-01-lvov.64850/

Репо с кодом порта под Вектор - https://github.com/nzeemin/vector06c-dangerick

ivagor
31.07.2022, 14:25
ivagor
тут лишний. С трудом вспомнил, что в оригинале вроде использовался портированный мной на 8080 музыкальный движок, а тут его, насколько понимаю, нет.

svofski
31.07.2022, 14:27
Я автором по таблицам оставил одного Никиту, а остальных в тексте.

reddie
31.07.2022, 14:29
Прошел первый экран примерно с 20 попытки. Далше не смог.

Да её без бессмертия вообще пройти невозможно, По-моему. На Спектруме первым делом читы врубал, потом играл уже =)
В таких играх путь прокладывается методом "зашёл, умер, понял, куда нажимать, повторил цикл", и так почти на каждом экране.

- - - Добавлено - - -


Прошел первый экран примерно с 20 попытки. Далше не смог.

Да её без бессмертия вообще пройти невозможно, По-моему. На Спектруме первым делом читы врубал, потом играл уже =)
В таких играх путь прокладывается методом "зашёл, умер, понял, куда нажимать, повторил цикл", и так почти на каждом экране.

svofski
31.07.2022, 14:50
Вы прям геймеры. Я смог дойти до пола первого уровня и подумал, что уже неплохо :)

nzeemin
05.08.2022, 23:13
Добрался несколько поработать над Dangerous Rick.
Пофиксил поддержку Джойстик-П, включил мелодии, но хрипит безбожно.

Видимо, мне нужен какой-то гайд по программированию звука под Вектор на КР580ВИ53.

parallelno
07.08.2022, 01:53
Постою в очереди на гайд :)

nzeemin, а какой проигрыватель мелодий ты используешь? :)

ivagor
07.08.2022, 07:05
Хрипит, т.к. при биперении разрешены прерывания, которые лезут в тот же порт и перебивают звук. Можно запретить прерывания на время проигрывания ноты. Или переделать звук на таймер.

nzeemin
07.08.2022, 13:11
Хрипит, т.к. при биперении разрешены прерывания, которые лезут в тот же порт и перебивают звук. Можно запретить прерывания на время проигрывания ноты. Или переделать звук на таймер.

Есть руководства или примеры проигрывания простейших мелодий на таймере?

- - - Updated - - -



nzeemin, а какой проигрыватель мелодий ты используешь? :)

Опять же - здесь прямой порт со Львов ПК-01, поэтому просто однобитный звук с заданной частотой и длительностью.
Для Вектора это слабо подходит.

ivagor
07.08.2022, 14:24
Необходимый и достаточный минимум есть в секретах вектора (http://sensi.org/scalar/ware/563/) Лебедева. Еще есть в vector-user (http://sensi.org/scalar/ware/572/) 13 заметка. Ну и в invector (http://sensi.org/scalar/ware/40/) 23 есть посчитанные делители, которые, на мой взгляд, проще посчитать скриптом самому.
Посмотрел исходники - действительно музыкальная процедура на базе моей, только внутренний цикл теперь сильно не тот и ноты были посчитаны для 2.22 МГц без торможения.