Вход

Просмотр полной версии : River Raid на УКНЦ



BlaireCas
20.11.2020, 18:36
Начал "портировать" игру River Raid для УКНЦ.

Изначально была небольшая тестовая демка со скроллингом 50fps для проверки нормального конвертирования/отображения видеосигнала компьютера на современном видеомониторе/ТВ. Просто фигурки скроллились вниз и проверял плавность отображения.
Через какое-то время стало занятно сделать рандомные берега "речки" как в игре River Raid. А потом добавил кораблики и т.д...


https://i.imgur.com/t4MtNst.png

Ради истории:
Оригинал вышел в далеком 1982 году на "приставке" Atari 2600. От игры есть разобранный с комментариями код под вариант процессора MOS 6502 и TIA чип этого Atari. (https://github.com/johnidm/asm-atari-2600/blob/master/RiverRaid.asm). Вся игра в оригинале занимает 4 килобайта и довольствуется кажется 128-ю байтами ОЗУ.
Теоретически ее алгоритм формирования "берега речки" и прочего (кроме отображения/звука/хардварный check collision) можно портировать. Правда это будет некоторый гимор (команды типа SBC байтовые и прочая байтовая арифметика и работа с флагами).
Я не стал заморачиваться с портом, взял общую концепцию (и своровал некоторые спрайты). Поэтому у меня игра занимает вовсе не 4 килобайта, а целый вагон килобайт (прешифтованные спрайты, тупой код и т.д.)

Управление:
В принципе в самое игре описано.
Из того что не описано - К2 сделает рестарт с показом дебаговых циферок. Левая binary - скан коды кнопок нажатия и отжатия. Две циферки посредине - некоторое значение в у.е. процессорного времени по CPU и PPU которое осталось "лишним" до очередного прерывания вертикальной развертки экрана. Также по К2 самолет перестает "умирать". Можно использовать как тест 50Гц скроллинга пока настраивается телевизор. (еще раз К2 - возврат к "нормальной" игре)

Игрушка понемногу доделывается и осталось:
- багов еще добавить
- ускорение (стрелка вверх)
- мосты (не знаю важны-ли.. похоже не добавлю)

Вопросы на которые сразу можно ответить:
- Почему игра не полноцветная? Даже 8-ми цветов нет! Не то что 128...
+ (для предыдущей игры Krakout то-же самое) Мне лень заморачиваться с фреймбуферами, палитрами на каждую строку и рисовать лишнее в PPU. Бит в плане-0 который рисует только PPU всегда белого цвета чтобы не влиять на планы 1/2. Поэтому кроме белого остается 4 цвета. Я выбрал цвета те .. которые выбрал. 5 цветов (включая белый и черный, увы).
- Самолет "тормозит" на поворотах, но если держать кнопки и не отпускать - скорость на максимуме
+ "Ориджинал код" уж насколько смог его портировать с переносом байтовых операций. На оригинале атари самолет будет гонзать вправо влево примерно так-же (чуть иначе, но я постарался скопировать поведение). Единственно что не скопировано - даже при самом мелком нажатии вправо/влево на атари - самолет будет двигаться хотя-бы на один пиксель - у меня это нереализовано, поэтому "инерция"
- Ракеты в ориджинал могли быть "самонаводящиеся" (X-ракеты соответствует X-самолета)
+ Усложнил геймплей на УКНЦ, сделать можно, не вижу смысла, это скорее демо чем игра

Технически:
RIV.SAV банальный лоадер который считывает файл RIVBIN.DAT в котором код для двух процессоров. Сначала записывает его в планы ВОЗУ скрыв отображение. Потом раскидывает по двум процессорам и запускает вычистив все что было там до этого. Процессоры общаются между собой через команды CPU -> PPU без использования байтовых каналов обмена и прерываний. Тупо по ячейкам памяти CPU и по ожиданиям в циклах. Видеопамять скидывается на адреса >=100000 CPU (два плана) и >=40000 PPU план 0. Туда они и рисуют немного пожертвовав (сильно пожертвовав) доступным ОЗУ для исполнения кода. (спасибо соседнему треду, не знал что так можно). Но поскольку разрешение 320х288 - то вроде как не сильно критична потеря ОЗУ для исполняемого кода. Тем-более что оригинальное ВОЗУ можно использовать и дальше под прешифт спрайтов on-demand и видеобуфера в этой игре ненужные (игра очень маленькая) и т.д.

Поведение в эмуляторах:
UKNCBTL - не слишком парится с vsync и выдает 25 кадров/с (примерно). У вертолета не будет "вращаться винт". Также некоторые ноты музыки звучат "кривовато".
EmuStudio - в плане vsync получше, хотя странным образом скушало/размножило нижние стро.. UPD: Titus прояснил ситуацию, надо нажать LShift+Del
(на реальной УКНЦ вроде более-менее)

Сама игра и ее исходники:
(для компиляции исходников нужно будет доложить php и rt11.exe которые по понятным причинам я не добавляю. Компиляется последовательно 0_.. 1_.. 2_.. 3_... bat. Думаю программист быстро разберется. За код не ругать плз.)

78891
Для игры взять оттуда riv.dsk, в нем старт игры прописан в автозагрузке, сама игра это два файла RIV.SAV, RIVBIN.DAT которые внутри riv.dsk находятся.

Titus
20.11.2020, 18:57
EmuStudio - в этом плане получше, хотя странным образом "допоказывает" излишние строки в таблице строк ниже основного экрана (у меня таблица строк закольцована)
(на реальной УКНЦ вроде нормально)
Это потому что ты растягиваешь на весь экран.
В окне их не видно.
Это я сделал, потому что встретилась одна версия игры LAND, которая имела внизу экрана неотображаемые строки, и я решил сделать так, чтобы они тоже показывались. На реальной УКНЦ она бы их не показывала, разумеется.

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

Игра шикарно плавно работает на EmuStudio и на реальной УКНЦ! )

BlaireCas
20.11.2020, 19:02
Это потому что ты растягиваешь на весь экран.
Просто если в окошке - тогда происходит "недопоказ". Например перед стартом (после того как проскроллится заставочный кусок реки) - мост должен быть показан весь и под ним еще несколько строк.
Либо эмулятор староват у меня. (v0.15g).
Либо Windows-10 довольно странно себя ведет для твоего эмулятора. Вообщем я не особо считаю это за беду ибо Хобот уже мне выдал полезный совет про который я и сам позабыл - верхние и нижние строки не нужно учитывать ибо надо делать игры в расчете на overscan телевизоров. (Ну как синклер с бордюром).

https://i.imgur.com/4ZgQAiQ.png

Titus
20.11.2020, 19:04
Либо эмулятор староват у меня. (v0.15g).
Либо Windows-10 довольно странно себя ведет для твоего эмулятора. Вообщем я не особо считаю это за беду ибо Хобот уже мне выдал полезный совет про который я и сам позабыл - верхние и нижние строки не нужно учитывать ибо надо делать игры в расчете на overscan телевизоров. (Ну как синклер с бордюром).

LShift+Del переключит тебе режим нижних строк в окне.

Я думаю, что надо все строчки учитывать. На нормальных мониторах и нормальных конверторах все показывается верно.

BlaireCas
20.11.2020, 19:12
LShift+Del переключит
О! Да, оно самое. Теперь все ОК.

hobot
20.11.2020, 22:16
верхние и нижние строки
у меня на реале всё видать, вот так выглядит стартовый экран (надпись про fire на самом краю видимой области,
но вполне читаема)

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

Прогрел свою УК-НЦшку, повзрывал лодочки, заправки, вертолётики. При попадании в белый самолётик он останавливается, но стирается как то странно (такое впечатление, что в два прохода). Огромная благодарность, что не бросаете замечательный УК-НЦ без свежих релизов !!!

ZPilot
22.11.2020, 19:30
Еще на одном эмуляторе:
https://i.ibb.co/CHx7mGZ/20201122-192739.jpg

nzeemin
24.11.2020, 18:46
BlaireCas, там же в оригинале процедурная генерация рельефа для всех уровней, а у вас это всё развёрнуто хранится?
Пишут что в оригинале вся графика и код лежали в 4КБ.

https://github.com/johnidm/asm-atari-2600/blob/master/RiverRaid.asm

BlaireCas
26.11.2020, 17:36
BlaireCas, там же в оригинале процедурная генерация рельефа для всех уровней, а у вас это всё развёрнуто хранится?
Пишут что в оригинале вся графика и код лежали в 4КБ.

Я знаю, я разбирал код. Но портировать генерацию не стал. В оригинале хранятся "куски" (шаблоны) готовые берегов и половины острова. Рандомно выбирается очередной "кусок" и потом fine tune происходит иногда чтобы берега и остров подогнать друг к другу (чтобы не было больших выступов).
У меня происходит более "тупо" - выбирается очередной рандом куда пойдет берег, типа туда он и едет по две строки. Если позволяет место - выбирается рандомно делать-ли остров и тоже рандомная ширина. Без предварительных шаблонов. Поэтому у меня "тесновато" генерится рельеф реки если появляется остров.

(почему не стал банально портировать код атари... да ну его, для меня развлечение самому придумать, пусть я придумаю и хуже)

---

Кстати обновил игрушку. Все сложил в один архив (вместе с исходниками).
Сейчас относительно играбельно.
Нехватает - ускорения самолета, звуков.. вообщем пока еще доделывать буду.

BlaireCas
28.11.2020, 14:14
Приделал музыку начальную.
Итого остались звуки стрельбы/взрывов (с ними пока помучаться надо будет), ускорение самолета и думается на этом будет всё.

Titus
28.11.2020, 14:18
Итого остались звуки стрельбы/взрывов (с ними пока помучаться надо будет), ускорение самолета и думается на этом будет всё.
И бессмертие сделай опциональное)

BlaireCas
28.11.2020, 14:38
И бессмертие сделай опциональное)
Оно там есть. Кнопка К2 включить/выключить. Очки считатьcя не будут. Самолет будет стрелять/заправляться и т.д., но не гибнуть от столкновений.
(Я ее не вывел на экран, это типа дебаговый режим, нестандартный. Cобственно сделал для настройки конвертера этого OSSC чтобы крутился экран постоянно)

BlaireCas
29.11.2020, 14:35
Добавлены звуки (не все, нет звука заканчивающегося топлива). Да и те что добавил как-то стремновато звучат, но всё лучше чем ничего. Не спец я по pulse-width модуляции однобитной. Чисто теоретически в том-же audacity можно превратить любой звук в такую модуляцию, но УКНЦ не вытянет на полную катушку на ПП таймере в 2мкс. А вручную делать тот-же взрыв - надо иметь неплохой опыт в однобитных звуках. (либо стырить с какой-либо игрухи спектрумовской скажем). С атари стырить не вышло ибо там звуковой чип и оцифрованный оригинал имеет и сдвиги по амплитуде и громкость. Не удалось своровать простыми методами.

Вообщем думается на этом все. Более-менее играбельно вышло и так.

Titus
29.11.2020, 14:47
либо стырить с какой-либо игрухи спектрумовской скажем
На Спектруме огромное поле для обучения подобным методикам. Один раз разберешься, и потом во все свои 10 следующих игрушек будешь вставлять хорошие звуки)

ZPilot
29.11.2020, 23:49
Вообщем думается на этом все.
Надо поменять самолетик на кораблик, а то странно, что самолет не летает над берегом. :)

hobot
06.02.2021, 02:15
BlaireCas, у меня "СИТУАЦИЯ" )
На моей подключенной сейчас РМУшке (УК-НЦ), где на видео одной МС отсутствие есть, RIV после шкалы LOADING вовсе не выдаёт картинки, вообще...просто чёрный экран, если помните на "вылетевшей (https://zx-pk.ru/threads/32004-opros-i-obmen-informatsiej-po-zhivym-uk-nts.html?p=1099763&viewfull=1#post1099763)" машинке всё работало... такие дела.
Такая же ситуация с KRK увы... особенность этих программ? Поскольку другие ранее проверенные графические все в градациях рисуют...