Вход

Просмотр полной версии : HWYENC



nzeemin
15.04.2017, 21:19
Портирование игрушки Highway Encounter с ZX Spectrum на УКНЦ.

https://img-fotki.yandex.ru/get/770851/7448436.a/0_ac619_2301c630_orig.png

https://img-fotki.yandex.ru/get/9495/7448436.a/0_ac613_b72c189b_orig.png


http://www.youtube.com/watch?v=YFid2H-5iIA

https://github.com/nzeemin/uknc-highwayencounter -- исходники
https://github.com/nzeemin/uknc-highwayencounter/releases -- релизы

По нажатию "5" показывает инфо-экран.
По нажатию "6" показывает демо.
По нажатию "7" переходит в игровой режим, управление "1"/"Q", "9"/"0" и Пробел, пауза Ctrl+P, выход Ctrl+C.

UPDATE 2018-01-21: Версия v62. Состояние -- играбельно, проходимо. Считаю проект законченым.
UPDATE 2024-02-24: Выложена версия v68: добавлен выбор палитры, ускорена на 10% по сравнению с v62.

http://zx-pk.ru/threads/27621-hwyenc.html?p=945374&viewfull=1#post945374 -- о внутреннем устройстве игры

Titus
15.04.2017, 21:31
Тоже с МС-0515?

nzeemin
15.04.2017, 21:48
Тоже с МС-0515?

А что, там такое тоже было? ;-)
Cам лопатил, неделя хардкорной работы.

- - - Updated - - -

И пара картинок на тему того как устроена работа игры изнутри.

Титульный экран.
Справа показана память -- это не экран, а его подготовленный образ.

https://img-fotki.yandex.ru/get/194835/7448436.9/0_a8fd3_50b1374_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/692179)

Игровой экран ещё интереснее -- используется ДВА образа экрана в памяти:

https://img-fotki.yandex.ru/get/56520/7448436.9/0_a8fd4_558d65d2_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/692180)

Titus
15.04.2017, 22:38
А что, там такое тоже было? ;-)
Cам лопатил, неделя хардкорной работы.
Не видел) Поэтому и спросил)
Будешь код с нуля писать, или придумал конвертер?

DJs3000
15.04.2017, 22:40
Мне интересно на что способна УКНЦ в плане динамики в играх)

Titus
15.04.2017, 23:02
Мне интересно на что способна УКНЦ в плане динамики в играх)
Если заточить движок грамотно под УКНЦ, то даже на что-то по типу Марио)

nzeemin
15.04.2017, 23:48
Не видел) Поэтому и спросил)
Будешь код с нуля писать, или придумал конвертер?

Перевожу построчно.

- - - Updated - - -


Мне интересно на что способна УКНЦ в плане динамики в играх)

Для динамики нужно под УКНЦ с нуля писать, либо серьёзно перерабатывать.
При портировании сохраняется реализация которая была на исходной платформе -- конечно в этом случае на УКНЦ будет тормозить.

DJs3000
16.04.2017, 12:18
nzeemin, кроме вас на УКНЦ наверное уже никто и не пишет) может есть смысл что-то с нуля своё написать? Возможно общими силами)

nzeemin
16.04.2017, 21:15
Поглядел видео на тубе игры оригинала - оригинально, этакая "головоломка+стрелялка".
Предвижу главную трудность реализации в особенности организации клавиатуры УК-НЦ.
На видео (возможно автор видео играет в эмуляторе?) кстати видно как плавает скорость
оригинальной игры в зависимости от кол-ва движ. объектов на экране.

hobot, а ты пробовал запускать то что я приаттачил?
Там видно что эффект работает в 1.5-2 раза медленнее оригинала.
Я главную сложность вижу в скорости игры. Если её не хватит и придётся "разрезать" логику на CPU и PPU -- то работы будет раза в два больше, и это ещё оптимистично.
Как в том анекдоте -- рытьё тоннеля займёт год или два, зависит от того встретятся ли строители.

OrionExt
16.04.2017, 21:33
nzeemin, респект! Пожелаю сил и времени довести проект до играбельного состояния на УКНЦ. Довилось в свое время посидеть за этими машинами. Даже игру тогда на бейсике написал для УКНЦ. Машинка по функционалу и скорости напоминала MSX (без графики). Запомнилась текстовым режимом с очень качественными шрифтами.

В то время понятное дело о начинке УКНЦ сведений в свободном доступе не было. В наше время ознакомился с составом и ужаснулся (wiki (https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D 0%B8%D0%BA%D0%B0_%D0%9C%D0%A1_0511)). Выражаясь сегодняшними терминами это "фейл" десятилетия советского компьютера строения.

Энтузиасту, взявшемуся за это дело (по сути, переписать код с нуля) большое уважение.

hobot
17.04.2017, 00:08
nzeemin, честно не запускал.
Объясню что я имею в виду - УК-НЦ не любит трёхкнопочные нажатия, а тут из за "изометрии" надо и направление задавать и стрелять. В описываемом мной Зел. движке были переменные $PRESS - среди них (перед баксом),
UP, DOWN, Left, Right - стрелки и был для шифта к примеру S$PRESS , которые были <> 0 если соответствующие клавиши были утоплены. Но это ещё нужно суметь написать. В принципе - это знаешь где получилось (что бы долго не копаться) в игре про Рыцаря с MSX.

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

OrionExt, то же мнение, что ж.

OrionExt
17.04.2017, 00:37
hobot.Добавлю (расшифрую).

Видимо у автором УКНЦ не было цели создать простой компьютер, а была цель реализовать…
К УКНЦ в вике (на первой строке) надо бы было добавить пояснения. Зачем нужно было так все усложнять. А то юное поколение с головой на плечах, этот ребус времени не разгадает. Хотя бы одну "правдоподобную" версию;)

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

Мне то все понятно (субъективно).

hobot
17.04.2017, 00:40
Зачем нужно было так все усложнять.
я с удовольствием (честно) подискутирую об этом в соотв. теме
например тут (почему бы нет?) - http://zx-pk.ru/threads/27059-i-snova-ms-0511.html
что бы тему Никите не засорять, лады?

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


Мне то все понятно (субъективно).
непонятно только, что вы назвали фэйлом, конкретно.

OrionExt
17.04.2017, 01:45
непонятно только, что вы назвали фэйлом, конкретно.
Цитируем задним постом……. А разве не так.

Согласен. Тут это обсуждать не стоит.

MacBuster
17.04.2017, 10:09
Удаление в знак протеста против действий MM

nzeemin
02.07.2017, 16:39
В эмулятор UKNCBTL добавил Sprite Viewer -- теперь можно визуально видеть что в памяти картинка правильная.

https://img-fotki.yandex.ru/get/244154/7448436.9/0_aa9e4_152923c8_XL.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/698852)

https://img-fotki.yandex.ru/get/231372/7448436.9/0_aa9f0_6f622901_XL.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/698864)

nzeemin
06.12.2017, 22:21
https://img-fotki.yandex.ru/get/893240/7448436.a/0_ac0e5_e6925a49_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/704741)

https://img-fotki.yandex.ru/get/893194/7448436.a/0_ac0e6_4e6bc7e4_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/704742)

https://img-fotki.yandex.ru/get/516062/7448436.a/0_ac0e7_7c9076e4_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/704743)

nzeemin
06.12.2017, 23:44
Можно спросить о том какие есть функции в этом режиме и как ими управлять?

В окне Sprite Viewer клавиши:
вверх/вниз -- сдвиг на один байт
Ctrl+вверх/вниз -- сдвиг на одну строку
вправо-влево -- сдвиг на одну страницу
[ ] -- управление шириной строки
также работает скролл мышью.

hobot
08.12.2017, 02:15
hobot, а ты пробовал запускать то что я приаттачил?
извиняюсь не слишком следил за этой темой, даже не увидел своего ответа.
На сегодняшний день ситуация с запусками на живой машинке такая:
1. последнее что запускал из твоих портов, Никит - это мальчик бегущий по крыше поезда, если помнишь там
из за севших батереек кривенькое "кое-как качество" avi удалось сделать )))
2. чисто по причинам бытовым предлагаю все запуски на реальной машинке (тесты) перенести на праздничные (правильнее на послепраздничные - рождественские(!) )
каникулы зимние или что там будет(?).

как-то так.


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

nzeemin
08.12.2017, 23:16
В аттаче новая версия HWYENC.SAV, пока неиграбельная.
Анимация в начале демо заработала как надо.
Более-менее заработал демо-режим (включается кнопкой 6 с главного экрана). Но вылетает в СТОП на 10-й зоне.
Но даже в таком виде это уже неплохо -- многое сделал.

hobot
08.12.2017, 23:35
Но даже в таком виде это уже неплохо -- многое сделал.
88 блоков !!! для локалки УК-НЦ немыслимый размер, и наверное будет ещё расти?
Только для РМП !!! )))

http://f23.ifotki_.info/org/e66c238338fb5bb931be2dbaf87c7c065a9a41295425265.pn g
Скрин из UKNCBTL.
Спектрумовская графика такая узнаваемая ) Но приятная изометрия ( с отражениями - тенями! )

nzeemin
09.12.2017, 02:42
Про большой размер. Примерно 8-10 Кбайт из этого это зарезервированное место под хранение двух экранов. Можно было бы это убрать из файла, если найти способ как объяснить компилятору и линковщику что мне будет нужно это место при работе, но в файл его включать не надо. Я такого способа не знаю.
Всё основное типа спрайтов, уровней итп уже сконвертировано и включено в программу, рост ещё конечно будет, но это уже только код, это относительно немного, до нескольких килобайт.

- - - Updated - - -

https://img-fotki.yandex.ru/get/9762/7448436.a/0_ac210_781b8aa3_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/705040)

Hunta
09.12.2017, 09:27
Можно было бы это убрать из файла, если найти способ как объяснить компилятору и линковщику что мне будет нужно это место при работе, но в файл его включать не надо. Я такого способа не знаю.
Вообще то в какой то теме я уже писал, как я это делал

nzeemin
29.12.2017, 17:15
Исправил несколько багов, связанных с движением и столкновениями -- это наиболее сложная часть игрушки, так что тут было много работы.
Теперь демо доходит до конца.

- - - Updated - - -


https://www.youtube.com/watch?v=YFid2H-5iIA

nzeemin
30.12.2017, 16:49
hobot, если будет возможность, было бы здорово замерить общее время демо на реальной машине -- например, от нажатия "6" до появления надписи на красном фоне.

hobot
30.12.2017, 22:18
hobot, если будет возможность будет и наверное весьма скоро, сделаю видео, а у видео есть тайминг воспроизведения, с наступающими Н.Г. праздниками и Рождеством ! )

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

плюс на простое там внизу экрана время игровое тикает можно его минуту поснимать и сравнить с эмулятором например

nzeemin
05.01.2018, 16:51
Вообще то в какой то теме я уже писал, как я это делал

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

MacBuster
05.01.2018, 17:13
Удаление в знак протеста против действий MM

Hunta
05.01.2018, 17:56
Вообще не хотелось бы танцевать с бубном ради этого
Никаких танцев с бубном - макросы плюс вызов процедуры для увеличения памяти программы. Правда, если программа с перекрытиями - тут понадобятся ещё указания компоновщику (насколько мне не изменят память).

nzeemin
10.01.2018, 17:42
hobot, ещё важный вопрос по реалу -- как игровой экран смотрится на ч/б мониторе?
Я опасаюсь того что зелёный цвет игровой области окажется слишком тёмным (в ч/б режиме на эмуляторе это сейчас именно так), тогда придётся делать игровую область жёлтой. И кстати у жёлтого преимущество в том что он не меняется от переключения RGB/GRB.

MacBuster
10.01.2018, 22:17
Удаление в знак протеста против действий MM

hobot
10.01.2018, 23:46
Я планирую перед началом игры уточнять какой монитор - ч/б или цветной
на УК-НЦ есть такой вариант цветного тетриса который, если указан ч\б, вместо цветов рисует масти карточные.



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

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

nzeemin
11.01.2018, 18:31
В аттаче версия с переделанными цветами, основная игровая область теперь жёлтая.

nzeemin
11.01.2018, 21:34
Теперь проверяю игрушку также и в EmuStudio:

https://img-fotki.yandex.ru/get/764457/7448436.a/0_ac4ca_5b113488_orig.png

nzeemin
12.01.2018, 04:14
Ладно, если я вам ещё не надоел...
В аттаче первое ИГРАБЕЛЬНОЕ демо.
С управлением была какая-то бага, и я пока пожертвовал красотой начальной анимации ради того чтобы управление заработало как надо -- позже починю.

Вход в игру -- "7".
Управление -- Q A O P и Пробел. да, коряво и не по-УКНЦшному, но пока вот так.

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

nzeemin
12.01.2018, 11:47
Что осталось доделать до релиза, в порядке приоритета:
- Движение Main Vorton -- разобраться с ошибкой которая пока заткнута, из-за этого начальная анимация пострадала
- При уничтожении Vorton или Auto-Vorton нужно стирать его с панели индикаторов
- Сделать индикацию Power
- Сделать индикацию движения Lasertron
- Доделать анимацию beyond Zone 0 при завершении игры
- Реализовать обработку Pause key
- Реализовать обработку Abort key
- Назначить управление на более удобные клавиши
- Транспорант о том что закончилось время -- сделать паузу с поглощением нажатий
- Title screen: при выводе надписи-заглавия проверять клавиатуру, быстро заканчивать если было нажатие

Titus
12.01.2018, 13:13
А ты сам код с Z80 как переписал на PDP11?

nzeemin
12.01.2018, 13:35
А ты сам код с Z80 как переписал на PDP11?

Вручную по-командно.
Вот моя шпаргалка:


A R0
BC R1
DE R2
HL R3
IX R4
IY R5
SP R6
PC R7

JR aaa BR aaa / JMP aaa
JR C, aaa BLO aaa
JR NC, aaa BHIS aaa
JR Z, aaa BEQ aaa
JR NZ, aaa BNE aaa

CP xx CMP R0, xxx
SRL xx ASR xxx


В следующий раз думаю надо уже делать парсер и полу-автоматический перевод.

Titus
12.01.2018, 13:40
Вручную по-командно.
Ну ты монстр) Это же сколько писанины)

nzeemin
12.01.2018, 13:48
Ну ты монстр) Это же сколько писанины)

Писанина здесь -- самая простая и приятная часть работы. По ходу писанины после нескольких строчек ещё компиляция, добавление недостающих меток.
После этого надо 2-3 раза подробно-досконально перечитать, исправить мелкие косяки.
Затем прошагать под отладчиком.
Самая адская часть работы -- это параллельная отладка, когда на одном экране EmuZWin в отладчике, на втором UKNCBTL, в Far-е открыт скомпилённый листинг (чтобы знать реальные адреса). И вот доходишь до места, потом шагаешь двумя отладчиками, сравниваешь изменения там и там, думаешь должно отличаться или нет -- в плане времени и мыслительных усилий это адище, но без было бы ещё тяжелее.

Самые частые ошибки:
1. Забыл поставить #, получилось обращение к адресу вместо непосредственного значения.
2. Перепутал местами операнды -- они зеркально на Z80 и PDP11.
3. Сделал словную операцию вместо байтовой -- забыл поставить B.

nzeemin
12.01.2018, 17:51
Кто-нибудь пробовал играть?
Пожелания/рекомендации?

Mission Time -- сейчас за отведённое время я успеваю дойти максимум до 8 зоны, стоит ли его увеличивать?

Какие клавиши хотелось бы для движения (ускорение/замедление, поворот влево/вправо, огонь)? для паузы? для выхода из текущей игры?
как вариант -- "1" и "Q", стрелки влево-вправо, пробел -- подходит как под клаву УКНЦ, так и PC

shattered
12.01.2018, 21:52
Кто-нибудь пробовал играть?
Пожелания/рекомендации?

God mode :)

hobot
13.01.2018, 01:13
Кто-нибудь пробовал играть?
Пожелания/рекомендации?

Первое с чем столкнулся на живой машине при попытке запуска
любого из опубликованных релизов - ругань системы на нехватку памяти )

Ладно, допустим для игры конфиг системы подберётся - так что это ерунда.
Сделал для живой три SAV файла -
1 и 2 = это Зелёный и Жёлтый основной - что бы яркость оценить
вот две фотки

GREEN
http://f23.ifotki_.info/thumb/80f801705b536598a0cdcc349f7766075a9a40298454045.jp g (http://i-fotki.info/23/80f801705b536598a0cdcc349f7766075a9a40298454045.jp g.html)

YELLOW
http://f23.ifotki_.info/thumb/de50f43b8166e7ac44d1497971ef75395a9a40298454045.jp g (http://i-fotki.info/23/de50f43b8166e7ac44d1497971ef75395a9a40298454045.jp g.html)

И тут я подумал - а какая у меня собственно в данный момент плата то подключена GRB или RGB ? )))
Поскольку у меня только градации как определить не знаю.

Видео делал только ДЕМО режим в играбельной версии, но перед там как делать видео
пощупал управление, поездил, пострелял. Честно - разницы в скорости по сравнению с
UKNCBTL в режиме 100% эмуляции практически не почуствовал, управление хоть и не
удобное, но чуткое. По управлению надо просто по расположению кнопок ( у спектрума
расположение кнопок позволяет управлять указанными алфавитными комфортно) - исходить из этого.

Так. Видео заливаю на площадку сайта, хотя звук удалил всё равно громоздкий файл получился,
перезальёшь его на ю-туб? Я тогда его снесу (ок).

(*сценарий и графика для этой игры и многих подобных игр на спектруме всегда у меня вызывали
смешанные чувства.)

про управление!!! Помнишь ралли с БК0010 где вертолёт и мотоциклист? Вот как то так надо разложить, ИМХО

nzeemin
13.01.2018, 01:38
hobot, спасибо огромное!


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

- - - Updated - - -


Первое с чем столкнулся на живой машине при попытке запуска
любого из опубликованных релизов - ругань системы на нехватку памяти )

Помогает сделать SET SL OFF
Если не помогло -- посмотреть SH MEM что там ещё висит в памяти, убрать лишнее из STARTS.COM
Следующие версии буду выкладывать сразу готовой дискетой, с подготовленным конфигом.

- - - Updated - - -


И тут я подумал - а какая у меня собственно в данный момент плата то подключена GRB или RGB ? )))
Поскольку у меня только градации как определить не знаю.

В данном случае это не важно, ты гонял на реале версию с жёлтым игровым полем, а жёлтый выглядит одинаково в обеих схемах.

- - - Updated - - -


Видео делал только ДЕМО режим в играбельной версии, но перед там как делать видео
пощупал управление, поездил, пострелял. Честно - разницы в скорости по сравнению с
UKNCBTL в режиме 100% эмуляции практически не почуствовал, управление хоть и не
удобное, но чуткое.

По ощущениям-то как -- играбельно? или в морг?


про управление!!! Помнишь ралли с БК0010 где вертолёт и мотоциклист? Вот как то так надо разложить, ИМХО

Вообще не представляю. Предложи какие клавиши назначить?

Shadow Maker
13.01.2018, 01:52
Самые частые ошибки:
1. Забыл поставить #, получилось обращение к адресу вместо непосредственного значения.
2. Перепутал местами операнды -- они зеркально на Z80 и PDP11.
3. Сделал словную операцию вместо байтовой -- забыл поставить B.
Блин, лучше бы ты и правда парсер с автоконвертором написал. Сразу бы избежал всех таких ошибок.

nzeemin
13.01.2018, 02:03
Блин, лучше бы ты и правда парсер с автоконвертором написал. Сразу бы избежал всех таких ошибок.

Чтобы написать правильный парсер/конвертер, нужно сначала самому руку набить.
Парсер/конвертер это круто, но это плюс много времени на его написание, оправдается только если ещё пару программ переносить.

И там не всё так линейно, конвертировать надо по кусочкам. Например, нет смысла конвертировать куски где идёт работа с атрибутами экрана -- эти части надо полностью переписывать вручную.

hobot
13.01.2018, 02:12
В данном случае это не важно, ты гонял на реале версию с жёлтым игровым полем, я про фотки - красный там вряд ли - он бы темнее смотрелся.


По ощущениям-то как -- играбельно? или в морг?
это очень "спектрум" игра. Для меня конечно не слишком интересна как игра, но как ещё одна игра для УК-НЦ интересно. Просто вопрос к авторам спектрума - где и откуда они берут такой уровень "абстракции" для создания игр и графики??? Что они курят там? Где они видели такой "поезд", такое "оружие" и почему там бочки? А кто такие "одноглазики". Жанр игры "пазл" с ограниченным временем на уровень или на всё прохождение? Знаешь на что похожа это игра (я только сейчас понял) на порезанный и покромсаный на спрайты АРКАНОИД из которого сделали
изометрический "бронепоезд" с "танком" в виде точилки карандашной - отсыпьте и мне, спектрум-авторы??????? )))

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


Вообще не представляю. Предложи какие клавиши назначить?
Ну вот кнопки управления со спектрума на спектруме расположены примерно как Ф-Я и [] у УК-НЦ.
А пробел для "пли" - это классика.

Shadow Maker
13.01.2018, 02:13
Чтобы написать правильный парсер/конвертер, нужно сначала самому руку набить.
Парсер/конвертер это круто, но это плюс много времени на его написание, оправдается только если ещё пару программ переносить.

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

hobot
13.01.2018, 02:16
а в патруле с БК0010(ралли), там 1,2 и 9,0 управление стрельба пробел.

nzeemin
13.01.2018, 02:34
это очень "спектрум" игра. Для меня конечно не слишком интересна как игра, но как ещё одна игра для УК-НЦ интересно. Просто вопрос к авторам спектрума - где и откуда они берут такой уровень "абстракции" для создания игр и графики??? Что они курят там? Где они видели такой "поезд", такое "оружие" и почему там бочки? А кто такие "одноглазики". Жанр игры "пазл" с ограниченным временем на уровень или на всё прохождение? Знаешь на что похожа это игра (я только сейчас понял) на порезанный и покромсаный на спрайты АРКАНОИД из которого сделали
изометрический "бронепоезд" с "танком" в виде точилки карандашной - отсыпьте и мне, спектрум-авторы??????? )))

В данном случае это конкретный автор -- Costa Panayi. И эта игра выпускалась не только для Спектрума: http://www.mobygames.com/game/highway-encounter/screenshots
Ещё известная игра Vortex -- Tornado Low Level.
Позже у этого автора ещё был HATE, с диагональным скроллингом всего игрового экрана: http://www.mobygames.com/game/hate-hostile-all-terrain-encounter/screenshots

- - - Updated - - -


Жанр игры "пазл" с ограниченным временем на уровень или на всё прохождение?

Время на всё прохождение, сейчас оно 20 минут, но это слишком жёстко, я его увеличу примерно до 50 минут.
Сложность тут не в лимите времени обычно, а в том чтобы до конца дотянуть.

hobot
13.01.2018, 03:44
И эта игра выпускалась не только для Спектрума:
о ну вот и MSX снова нарисовался там среди платформ.
А теперь и на УК-НЦ ! )


В данном случае это конкретный автор -- Costa Panayi.
Ну вот, а ты говоришь "в морг", наоборот "не попса" - если автор жив, можно ему копию эмулятора с игрой подарить )
Пусть порадуется )

hobot
13.01.2018, 08:16
Ну вот, а ты говоришь "в морг"

https://pic.maxiol.com/thumbs/2018011305.png (https://pic.maxiol.com/?v=2018011305.png)

:redface:

https://pic.maxiol.com/thumbs/201801ltl.png (https://pic.maxiol.com/?v=201801ltl.png)

(вах! Titus за эти скрины меня снова будет воспитывать )

Titus
13.01.2018, 08:48
И эта игра выпускалась не только для Спектрума:
На другие платформы была конверсия со Спека. Оригинал был именно на нем, что видно по заточенности всей графики под особенности Спека.

Oleg N. Cher
13.01.2018, 12:59
Время на всё прохождение, сейчас оно 20 минут, но это слишком жёстко, я его увеличу примерно до 50 минут.А как в спектрумной версии 20 минут хватает?

nzeemin
13.01.2018, 13:22
А как в спектрумной версии 20 минут хватает?

Там 49 минут примерно, я померял вчера.

- - - Updated - - -


https://pic.maxiol.com/thumbs/201801ltl.png (https://pic.maxiol.com/?v=201801ltl.png)


В принципе, можно использовать место под теневые экраны для размещения заставки, показать её один раз и перейти в главное меню.

MacBuster
13.01.2018, 16:09
Удаление в знак протеста против действий MM

nzeemin
13.01.2018, 17:51
Новая версия, теперь в виде дискеты.

- Лимит времени увеличен примерно до 50 минут
- Управление переделано на "1"/"Q", "9"/"0", Пробел
- Индикация Power, индикация движения Lasertron
- Сделана часть финальной анимации

hobot
13.01.2018, 22:14
Там 49 минут примерно, я померял вчера.
нужен наверное всё таки режим "практика" где время не идёт ?

nzeemin
13.01.2018, 22:23
нужен наверное всё таки лимит "практика" где время не идёт ?

Тут уже просили God Mode.
Моё мнение такое -- старые игры были сложными. И они должны были быть сложными.
Потому что ты не мог пойти и купить ещё одну. Тебе приходилось ждать, пока ещё одна появится, пока ещё одну напишут.

hobot
13.01.2018, 22:30
В принципе, можно использовать место под теневые экраны для размещения заставки, показать её один раз и перейти в главное меню. можно один раз показать при первой загрузке через starts.com - дёшево и сердито )

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


Моё мнение такое -- старые игры были сложными. И они должны были быть сложными. это так, но вот в этой игре (https://www.old-games.ru/game/1549.html)режим "практики" вполне вписался, но я не настаиваю.

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


И они должны были быть сложными.
кстати говоря УК-НЦ версия тетриса "стакан не закрашенные фигурки вид сверху" как раз пример усложнённого геймплея!

nzeemin
14.01.2018, 01:56
Так, дальше у нас рубрика "нас не спрашивали -- мы отвечаем".
О внутреннем устройстве игры.

Сначала очевидное.
Вы управляете Vorton, всего их пять, текущий с белой шапкой это Main Vorton, остальные это Auto-Vorton, все они толкают вперёд Lasertron, который нужно довести до конца зоны 0.
Мир игры разбит на зоны, всего их 31., визуально они нумеруются 30..0, внутри наоборот 0..30 и больше.

Мир игры описывается в виде записей длиной 16 байт, всего их 260 (с адреса 7B00). Это все объекты всех зон -- таблица игрового мира.
Поля каждой записи объекта:
; +$00 -- горизонтальное смещение объекта; FE -- пустая запись, FF -- конец таблицы
; +$01,+$02 -- позиция объекта
; +$03,+$04 -- смещение объекта; это значение плюс смещение текущей зоны ($8F03) даёт адрес на теневом экране
; +$05 -- базовый номер спрайта -- индекс в таблице 7A00
; +$06 -- паттерн движения: 000 = Vorton, 006 = Fire, 012 = Block, 026 = Flat blocker, 032 = Barrel
; +$07 -- направление движения, копия из (IX+$0С) AND $07, значения 0..7
; +$08 -- флаги движения; 0 = останов, 1 = движение; bit 7 = 1: взрыв
; +$09 -- горизонтальное смещение (только биты 2-3)
; +$0A -- фаза спрайта, смещение от $8F00: 015,017,020,021,022,023
; +$0B -- номер точки продолжения по таблице $9000
; +$0C -- начальное направление движения, копируется в +$07
; +$0D,+$0E,+$0F -- начальные значения для +$00,+$01,+$02
Объекты мира -- это препятствия и враги.

Дальше, есть блок игровых объектов с которыми мы работаем сейчас, формат записей тот же что и выше.
Начинается он по адресу 8A00, сначала идут 5 Vortons, затем Lasertron, затем три fireball (выстрелы/пули).
Затем за этим блоком из девяти зафиксированных игровых объектов идут текущие игровые объекты, числом до 44 записей.
При смене текущей зоны обновляется и набор текущих игровых объектов -- перебираются все объекты игрового мира, выбираются только те которые вблизи текущей зоны, с некоторым порогом. Поэтому получается что объекты мира "живут" только когда они находятся внутри текущей зоны или вблизи её.
При помещении в таблицу текущих объектов, копируются 14 байт записи, в остальные два байта записывается адрес откуда взята запись в игровом мире. При переходе в другую зону (пересоздание списка текущих объектов), текущие записи копируются обратно по этому сохранённому адресу -- возвращаются в общую таблицу игрового мира.

Отрисовка.
В памяти держится два теневых экрана, оба 1 бит на пиксель (чёрно-белые). Первый теневой экран это фон, рисунок зоны без объектов. Этот экран формируется один раз при заходе в зону, меняется только при смене зоны. Но в этот экран выводятся плоские площадки-препятствия: они не двигаются и не могут загораживать другие объекты, поэтому их можно рисовать на фоне.
Второй теневой экран это копия первого, но поверх ещё рисуются спрайты объектов. Спрайты имеют размер 24x24 пикселей, каждый спрайт имеет маску.
При отрисовке перебираются все текущие игровые объекты (включая Vortons, Lasertron и выстрелы). Сначала по адресу 8D52 собирается список объектов -- гориз.смещение + адрес записи, причём эта таблица собирается сортированной от дальних объектов к ближним -- сделано для того чтобы при отрисовке спрайты правильно наложились друг на друга. Объекты не попадающие в экран не попадают в эту таблицу. После составления таблицы сразу выполняется рисование спрайтов на втором теневом экране, при этом в отдельной таблице отмечаются знакоместа в которые попал спрайт (таблица флагов отрисовки, байт на знакоместо 8x8).
Следующий шаг -- отрисовка второго теневого экрана на реальный экран. Причём полностью он рисуется только один раз при входе в зону, после этого отрисовка опирается на таблицу флагов отрисовки, т.е. выводим только то что реально изменилось.
И последний шаг отрисовки -- восстановление второго теневого экрана, т.е. стирание спрайтов. Это делается копированием знакомест 8x8 с первого теневого экрана, опираясь на таблицу флагов отрисовки, т.е. тоже восстанавливается только то что изменялось.
Сама отрисовка спрайтов выполняется с горизонтальной точностью в 2 пиксела -- есть 4 процедуры отрисовки спрайтов, со смещениями +4, +2, 0, -2. Т.е. точность движения объектов по вертикали -- 1 пиксел, по горизонтали 2 пиксела.

Движение и столкновения объектов.
Пробегаем по таблице текущих игровых объектов, сравнивая записи каждый-с-каждым. Если выявили столкновение, делается такая штука. Берётся значение паттерна движения обоих объектов (поле +$06), они складываются, полученное значение используется как индекс в таблице адресов продолжений -- просто происходит переход по указанному в таблице адресу продолжения. Например, для статичных препятствий все адреса продолжений одинаковы, по ним код который говорит что объект должен остановится. Или например, у "солнышка" при столкновении с препятствием получаем адрес продолжения, где направление движения меняется на противоположное.
Движение объектов обрабатывается вместе с расчётом столкновений, если нет столкновений, то отрабатывается то что указано байтом "паттерн движения" в записи объекта. Обычно это просто движение без изменений в текущем направлении, но есть и необычные паттерны, например "взять случайное число и с вероятностью 10/256 повернуть влево или вправо".

В таблице объекта есть два байта про спрайт -- базовый номер спрайта, плюс смещение фазы спрайта. Реальный номер спрайта получается так. Берём смещение фазы спрайта, добавляем адрес 8F00 -- получаем адрес где лежит фаза спайта, это значение складываем с базовым номером спрайта, получаем индекс в таблице 7A00, где уже лежит реальный адрес спрайта. Что это даёт? во-первых, фазу спрайта по 8F00+смещение можно крутить -- и там есть несколько таких переменных, которые крутятся по-разному. Во-вторых, базовый номер спрайта задаётся отдельно -- можно иметь разные по виду объекты, у которых фаза крутится одинаково.

Что сделано отлично:
- Идея с общим миром в 260 записей из которого выбирается набор в максимум 44 текущих записи + 9 фиксированных записей. Причём мир легко восстанавливается в исходное состояние из тех же самых записей -- очень эффективно.
- Отрисовка с двумя теневыми экранами плюс таблицей флагов отрисовки -- получилась довольно быстрой.
- 9 фиксированых записи игровых объектов + 44 переменных идут одни за другим -- однородная таблица игровых объектов, что упрощает логику работы с объектами и отрисовки. Начало этого списка хранится в переменной 8F01. Смысл тут в том, что когда Main Vorton умирает, то просто сдвигается адрес начала таблицы в 8F01.
- Все переменные собраны в один блок по адресу 8F00, инициализация всех переменных при старте игры выполняется копированием всего блока целиком из блока констант.
- Расчёт столкновений через таблицу адресов продолжений -- это круто, прям магия.

- - - Updated - - -

Набор спрайтов:
https://raw.githubusercontent.com/nzeemin/uknc-highwayencounter/master/sprites.png

- - - Updated - - -

Реальный экран и два теневых экрана:

https://img-fotki.yandex.ru/get/56520/7448436.9/0_a8fd4_558d65d2_orig.png (https://fotki.yandex.ru/next/users/nzeemin/album/95562/view/692180)

Titus
14.01.2018, 02:13
Реальный экран и два теневых экрана:
Два теневых зачем? Да еще такой неровной формы краев?

nzeemin
14.01.2018, 13:22
Два теневых зачем? Да еще такой неровной формы краев?

Мне кажется, я описал зачем.
Частичное перекрытие этих двух экранов, очевидно, для экономии памяти.

shattered
14.01.2018, 16:44
Тут уже просили God Mode.
Моё мнение такое -- старые игры были сложными. И они должны были быть сложными.
Потому что ты не мог пойти и купить ещё одну. Тебе приходилось ждать, пока ещё одна появится, пока ещё одну напишут.

О, будут еще игры? :)

MacBuster
14.01.2018, 17:42
Удаление в знак протеста против действий MM

goodboy
14.01.2018, 17:52
О внутреннем устройстве игры.
а этот момент как обыграли ?



loop LD A,R
SLL A
LD HL,(36609)
LD A,(36631)
LD C,A
JR NC,loop
LD A,(HL)

shattered
14.01.2018, 17:54
Это вы как такой вывод сделали из фразы о том что старые игры были сложными и при портировании должны такими оставаться?

А вы вдумайтесь.

nzeemin
14.01.2018, 18:06
а этот момент как обыграли ?



loop LD A,R
SLL A
LD HL,(36609)
LD A,(36631)
LD C,A
JR NC,loop
LD A,(HL)

Пока никак, я убрал все задержки которые нашёл.
И всё равно пока порт работает примерно в 1.5 раза медленнее оригинала.

- - - Updated - - -

Кстати, понравился код Costa Panayi.
Ошибку в оригинальном коде нашёл только одну:


; We come here after we drawn ZONE digits
; First, we select objects from $7B00 table to $8A90 table
L93B7: MOV #L7B00, R4 ; 93B7 LD IX,$7B00 global objects table
MOV #L8A90, R2 ; 93BB LD DE,$8A90 current zone objects
MOV #44., R5 ; 93BE LD A,$2C max number of objects to select
; 93C0 EX AF,AF'
L93C1: MOVB (R4), R0 ; 93C1 LD A,(IX+$00) <
BIC #177400, R0 ; |
...
; 93EC INC DE
; 93ED EX AF,AF'
DEC R5 ; 93EE DEC A reached max records?
; 93EF EX AF,AF'
BEQ L93FD ; 93F0 JR Z,$93FD yes => jump

Это начало цикла, обратите внимание на запись $2C в регистр A.
Затем далее делается DEC A, но сразу после этого мы убираем результат операции через EX AF,AF'.
В результате проверка JR Z бессмысленна.
Но думаю что число текущих объектов никогда не превышает 2C (44 dec), поэтому эта ошибка не важна.

goodboy
14.01.2018, 19:06
Ошибку в оригинальном коде нашёл только одну

LD HL,23296
LD DE,23295
LD A,(46287)
LD (HL),A
LD BC,768
LDDR

на спеке аттрибуты лежат в области 22528,768
тут затирается лишний байт

nzeemin
14.01.2018, 23:14
Могу точно сказать что игра проходима.
Прошёл на эмуляторе EmuStudio v0.12f

hobot
15.01.2018, 00:48
Могу точно сказать что игра проходима.
Прошёл на эмуляторе EmuStudio v0.12f
речь о последнем релизе в виде дискеты? если да предлагаю сделать его примерно так (написал в ЛС)
(поскольку в эмуляторе главное игра!) можно конечно превратить (со временем) в сборник игр
от nzeemin )

упс! Никита у тебя ЛС выключены, хотел поделиться техн. информацией по оформлению релиза с игрой.

Titus
15.01.2018, 02:14
Прошёл на эмуляторе EmuStudio v0.12f
А разве чем-то отличается от UKNCBTL?

hobot
15.01.2018, 02:55
хотел поделиться упс. чего то покрутил так и этак не работает пока так как я хотел запустить, нахрапом сбоит RTшка ))) Пусть пока будет аккуратный авторский системный диск с игрой.

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

так получилось
просьба к Никите пощупать такой вариант релиз-конд. 5.5
http://archive.pdp-11.org.ru/vid/hwe55rc.dsk - ссылка строго временная.

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

что то SH.SYS от form'a не завёлся - пока я не понял почему, но использовал старый "проверенный" JS.SYS

hobot
16.01.2018, 22:12
http://f23.ifotki_.info/org/864e40ebb933b5a927a6951d271232ef5a9a40298789553.pn g

nzeemin, только сейчас понял что мне "не давало покоя" )
Как ты ухитрился, фирменным игровым шрифтом накатать ? Может сделаем такой шрифт
среди прочих на выбор для RT-11? Там наверное кириллицы нет, увы.

И ещё вопрос - собираюсь сделать репост по текущему релизу 5.5 на игровом форуме -
думаю ты не будешь против?

nzeemin
16.01.2018, 22:28
Как ты ухитрился, фирменным игровым шрифтом накатать ? Может сделаем такой шрифт
среди прочих на выбор для RT-11? Там наверное кириллицы нет, увы.
Это один из трёх шрифтов реализованых в игрушке, подготовил текст и вызвал процедуру печати, вроде бы ничего сложного.
И он очень мелкий и плохочитаемый, не думаю что RT-11 будет с ним хорошо.


И ещё вопрос - собираюсь сделать репост по текущему релизу 5.5 на игровом форуме -
думаю ты не будешь против?
Ну так вроде бы кто тебе мешает. Но это ещё конечно не финальная версия, пока времени нет заниматься, работать надо.
Только это не 5.5, а 55 -- это количество коммитов в репозиторий на гитхабе.

- - - Updated - - -


А разве чем-то отличается от UKNCBTL?

EmuStudio несколько быстрее реального УКНЦ, наверное в 1.2-1.4 раза примерно.
UKNCBTL -- со скоростью реала или немного медленнее.

hobot
16.01.2018, 22:42
Только это не 5.5, а 55 -- это количество коммитов в репозиторий на гитхабе.
понял, у меня там в посте все ссылки в авторскую (в эту тему) тему по сути, новость как релиз-кандидат = проходимая версия, поскольку новость о разработке(работе по переносу игры) я уже там постил совсем недавно )

и ещё момент, вот ты руками по шпоре переделывал ассемблер 1 в ассемблер 2 - это уже обсуждалось, но ведь на УК-НЦ (под RT-11) в пакете программирования к Си = есть ассемблер Z80, я пару раз писал о нём на форуме =
неужели совсем бесполезная вещь?

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


EmuStudio
ИМХО: если только с точки зрения скорости эмуляции сравнивать, главное отличие
у UKNCBTL - регулировка дискретная весьма
у EmuStudio - плавная регулировка скорости

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

да вот пост об игре на игровом https://www.old-games.ru/forum/threads/novye-igry-dlja-staryx-kompjuterov.31941/page-9#post-1444355
пока не буду развивать, кому интересно там уже знает где брать и где подробности (новость всё ещё видно в заголовках на форуме там)

nzeemin
16.01.2018, 22:43
и ещё момент, вот ты руками по шпоре переделывал ассемблер 1 в ассемблер 2 - это уже обсуждалось, но ведь на УК-НЦ (под RT-11) в пакете программирования к Си = есть ассемблер Z80, я пару раз писал о нём на форуме =
неужели совсем бесполезная вещь?

А чем тут поможет Ассемблер в Z80? Тут наоборот дизассемблируется код Z80, потом покомандно заменяется на код для PDP-11.
Уже выше обсуждали с Shadow Maker -- здесь нужно написать парсер, который возьмёт текст на ассемблере Z80 (он получается дизассемблированием), построчно разберёт его в команды, и построчно же заменит на команды PDP-11. Это позволит выполнить часть рутинной работы быстрее, ну и сделать меньше ошибок в процессе.

Titus
16.01.2018, 22:58
EmuStudio несколько быстрее реального УКНЦ, наверное в 1.2-1.4 раза примерно.
Возможно, это потому, что я привязываюсь к кадровой развертке, а она у большинства пользователей не менее 60Гц, а на УКНЦ нужно 50Гц.
Хотя есть и другие причины.

nzeemin
17.01.2018, 14:28
Вообще же говоря про ре-компиляцию с одного процессора на другой, у меня в закладках давно лежит вот такая статья:
Andrew Kelley -- Statically Recompiling NES Games into Native Executables with LLVM and Go
http://andrewkelley.me/post/jamulator.html
Чувак разбирает код для NES (процессор 6502), делает из него LLVM IR код, и затем компилит в x86 код.
Это очень круто, намного круче чем то что я тут демонстрирую.

Titus
17.01.2018, 14:58
Вообще же говоря про ре-компиляцию с одного процессора на другой, у меня в закладках давно лежит вот такая статья:
Рекомпиляция известна давным давно, и тут нет ничего нового.
Вопрос в качестве рекомпиляции с одного проца на другой.
Я тоже думал про авторекомпилятор с Z80 на PDP11. В общем, в целом вполне осуществимо даже в реалиях не очень шустрой УКНЦ.

MacBuster
17.01.2018, 21:50
Удаление в знак протеста против действий MM

Oleg N. Cher
19.01.2018, 12:06
nzeemin, мега-респект за проделанную работу! Всю кропотливость и трудоёмкость переноса игры с одной ретро-платформы на другую, совсем непохожую на неё, поймёт только наверно тот, кто занимался чем-либо подобным. Помню, огромное впечатление произвела рекомпиляция игр MSX для DOS, была такая тема.

Меня даже слегка огорчает, что параллельно на этих глубоких знаниях про устройство игры не делается порт HWYENC на каком-либо языке высокого уровня для гр.библиотеки SDL, которая даёт выход практически на все "большие" платформы.

Позволь пожелать дальнейших успехов, я с большим интересом читаю эту тему.

Также интересуюсь планами на будущее, есть ли мысли портировать ещё игры на УК-НЦ? Может можно как-то задействовать для этой работы собранный Vslav'ом компилятор Си для PDP-11 (+ низкоуровневые подпрограммы на асме ессно).

nzeemin
19.01.2018, 19:34
Oleg N. Cher, спасибо за поддержку!


Меня даже слегка огорчает, что параллельно на этих глубоких знаниях про устройство игры не делается порт HWYENC на каком-либо языке высокого уровня для гр.библиотеки SDL, которая даёт выход практически на все "большие" платформы.

Понять бы ещё зачем. Ремейки игры уже давно есть.


Также интересуюсь планами на будущее, есть ли мысли портировать ещё игры на УК-НЦ? Может можно как-то задействовать для этой работы собранный Vslav'ом компилятор Си для PDP-11 (+ низкоуровневые подпрограммы на асме ессно).

Сначала этот порт надо доделать, дальше посмотрим что будет.
Как тут поможет компилятор Си, во всяком случае в моей работе, я пока не очень вижу.

nzeemin
20.01.2018, 01:50
Исправлена главная ошибка с начальной анимацией.
Доделана индикация Power и движения Lasertron, сделано стирание убитых Vortons с индикатора.

Осталось доделать:
- Анимация beyond Zone 0 при завершении игры
- Режим паузы
- Возможность завершения игры с выходом в меню
- Title screen: при выводе надписи-заглавия проверять клавиатуру, быстро заканчивать если было нажатие

hobot
20.01.2018, 07:00
HWYENC v59

результат запуска последней сборки игры в RT-11 v5.4G
на ЖД УК-НЦ в эмуляторе, как видно на картинке ругани
на недостаток памяти нет, но стартовый экран трапнулся,
как только цвет переключился с жёлтого)


http://f23.ifotki_.info/org/1320e31e1c4f593df78d786f53a8a8695a9a40299080775.pn g

nzeemin
20.01.2018, 12:26
hobot, похоже что при заходе в программу изменения цветов не хватило стека, он залез на код и испортил его.
В следующей версии увеличу стек.

nzeemin
20.01.2018, 15:38
В этой версии:
- Стек увеличен
- Режим паузы по нажатию Ctrl+P, возврат по любой клавише
- Выход из текущей игры по нажатию Ctrl+C

Осталось доделать анимацию в конце игры.

Oleg N. Cher
20.01.2018, 21:24
Понять бы ещё зачем. Ремейки игры уже давно есть.Вывод алгоритма игры из горы циферок и условностей ретро-платформы на алгоритм в наглядном виде на ЯВУ. Для его последующего изучения будущими поколениями. Хотя конечно вопрос философский. Ну а ещё - как молитва богу кроссплатформенности. ;-)


Как тут поможет компилятор Си, во всяком случае в моей работе, я пока не очень вижу.Если игра, например, логическая, и памяти хватает. Если покажу игру на Обероне, оттранслированную в Си, прикинете насколько её трудно будет перетащить на УК-НЦ?

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

Никита, такой вопрос. Какова причина невозможности сделать деревья зелёным цветом?

http://i.piccy_.info/i9/25f2cfb93781aafeb2269bb333017de0/1516472152/32058/1214670/HWYENC.png

В заставке порта на УК-НЦ есть зелёный цвет. Не подумайте, что придираюсь, просто интересно насколько этот момент принципиален. (Кстати, как более правильно: УК-НЦ или УКНЦ?)

Собираетесь ли делать звук?

nzeemin
20.01.2018, 21:44
Сделано некое подобие финальной анимации.
В этой версии уже сделано всё что собирался сделать. (Вообще удивляюсь что я до этого момента дошёл.)
Пока дальнейших улучшений не планирую, разве что баги исправить если таковые найдутся.

Итого, отличия порта от оригинала:
- Более слабая графика в плане цветов
- Медленнее примерно в 1,5 раза (и вряд ли получится сколько-нибудь прилично ускорить, если не переделывать на вывод экрана через ПП)
- Нет звука
- Финальная анимация упрощена
- Нет обновления High Score и таблицы рекордов

https://img-fotki.yandex.ru/get/9495/7448436.a/0_ac613_b72c189b_orig.png

- - - Updated - - -


Никита, такой вопрос. Какова причина невозможности сделать деревья зелёным цветом?
Можно сделать, но конечно возиться надо, уже не хочу. И ещё на некоторых УКНЦ они будут красными -- на части машин отличается цвет как RGB/GRB.


(Кстати, как более правильно: УК-НЦ или УКНЦ?)
Это холивар.


Собираетесь ли делать звук?
Нет. Опять же можно, но возни реально много.
Звук на УКНЦ делается через периферийный процессор. Это нужно туда отправить свою программу через канал обмена между процессорами и обращаться к ней из ЦП сделай то сделай это. Пока у меня мало наработок на эту тему, соответственно, времени уйдёт много.

Titus
20.01.2018, 21:45
И ещё на некоторых УКНЦ они будут красными -- на части машин отличается цвет как RGB/GRB.
Чего проще - спрашивать перед игрой RGB у вас или GRB. Или вообще B/W.

Кстати, можешь задействовать в игре расширенную палитру. Это будет первая игра, которая ее использует)

nzeemin
20.01.2018, 22:05
Так, тут пошли финальные титры.

Спасибо всем кто поддерживал в ходе портирования, без вашей поддержки я бы давно на это забил.
Особая благодарность hobot за проверку на реале.

Инструменты которые использовал:
- skoolkit-5.4 на начальном этапе для декомпиляции оригинальной игры, разобраться что к чему, из полученного HTML потом копировал по кусочкам исходный код для Z80.
- EmuZWin и его отладчик, для того чтобы понять как работает оригинал, и для параллельной отладки.
- UKNCBTL, специально для этого порта сделал вьювер спрайтов и несколько доделал отладчик.
- Visual Studio 2013 для работы над UKNCBTL и для написания на C# небольшой утилиты SpriteRotate с целью подготовки спрайтов и прочих массивов, взятых из дампа оригинала.
- Эмулятор RT11 для консоли Windows от Patron, постоянно использую для компиляции и линковки.
- EmuStudio от Titus для тестирования.

В целом затраты времени -- примерно человеко-месяц, плюс-минус дни.

- - - Updated - - -

Финальная сцена:
https://img-fotki.yandex.ru/get/962950/7448436.a/0_ac614_97a9290e_orig.png

nzeemin
21.01.2018, 01:22
Вот ещё один порт той же игры, на PMD 85, завершён в 2016 году:
https://pmd85.borik.net/wiki/Highway_Encounter
Проблемы те же -- скорость примерно в 2 раза ниже.

hobot
21.01.2018, 10:35
В этой версии:
- Стек увеличен (http://zx-pk.ru/attachment.php?attachmentid=63756&d=1516473318)

версию 62 перетащу на живую машинку обязательно!
Огромная благодарность, nzeemin, что не бросает УК-НЦ без игровых релизов, но , что самое главное!, выбирает хитовые (вроде lode runner (https://www.old-games.ru/forum/attachments/lode_runner_uknc_trilogy-rar.117892/)) или остроумные проекты (вроде HWE). Данный релиз стал очень приятным сюрпризом для всех пользователей УК-НЦ.

По поводу вылета до увеличени стека - подтверждаю теперь полёт нормальный !!!


http://f23.ifotki_.info/org/b55ab588cc2b056705d8d6565b30728e5a9a40299179839.pn g


Good game :redface:

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


Финальная сцена:
http://zx-pk.ru/threads/27621-hwyenc.html?p=946446&viewfull=1#post946446

hobot
21.01.2018, 23:35
вариант версии 62 с заставкой на игровом форуме
https://www.old-games.ru/forum/threads/ehmuljatory-uknc-i-dvk.50279/page-5#post-1446225

hobot
22.01.2018, 06:53
nzeemin,
вопрос в связи с данным релизом :
не ошибусь если с БК0010 проще портировать (поскольку ассемблер родственный УК-НЦ),
хотя время ушло примерно столько же ?

nzeemin
22.01.2018, 11:05
[MENTION=935]не ошибусь если с БК0010 проще портировать (поскольку ассемблер родственный УК-НЦ),
хотя время ушло примерно столько же ?

Конечно с БК проще портировать, изменяется только способ вывода на экран, и ещё биты в спрайтах повёрнуты в другую сторону.
На портирование с ZX Spectrum времени уходит намного больше, раза в полтора-два.

Полученный HWYENC имеет смысл портировать дальше уже только на более быструю машину, например, Немигу -- но там же пользователей практически нет.

MacBuster
22.01.2018, 21:17
Удаление в знак протеста против действий MM

Titus
22.01.2018, 21:48
Пара замечаньечков к игре:

Скальный ландшафт желательно инвертировать, т.к. из-за отсутствия атрибутной раскраски, видна ступенчатая состыковка с остальным ландшафтов.

А вообще, хорошо игру бы раскрасить, хотя бы сделать 2 битплана, а не один.

Кстати, на моем эмуле она работает быстро, как на спектруме) В данном случае ускоренная работа эмулятора скомпенсировала несколько замедленный относительно спектрума движок)

MacBuster
22.01.2018, 22:00
Удаление в знак протеста против действий MM

Titus
22.01.2018, 22:33
Голосуем! Даешь 2 битплана (4 цвета). А еще лучше 3 битплана (8 цветов)!

shattered
22.01.2018, 22:40
И пятилетку за 3 года.

MacBuster
22.01.2018, 22:45
Удаление в знак протеста против действий MM

Titus
23.01.2018, 03:40
Ага, и перевод игры в разряд пошаговой стратегии с 5-минутным ожиданием ответных действий противника...
Не усугубляй) Оптимальный код - наше все.
Пример тому - эмулятор БК для УКНЦ, который я подпатчил в местах преобразования экранов, и он стал значительно быстрее.

MacBuster
23.01.2018, 09:23
Удаление в знак протеста против действий MM

Titus
23.01.2018, 10:33
Я реалист на 110%. Пока не видел «оптимального кода» в играх, который позволял бы им работать быстро.

На УКНЦ или вообще?

hobot
23.01.2018, 14:52
Я реалист на 110%. Пока не видел «оптимального кода» в играх, который позволял бы им работать быстро. и много ли вы видели исходников УК-НЦ игр? все "вменяемые" написанные не школьниками на бейсике игры для УК-НЦ работают настолько быстро, насколько быстро позволяет платформа.

Есть ещё пример порта игры про рыцаря с MSX и пакеты "игрушка-1 и 2" от ИТО, где со скоростью более чем всё в порядке, а родные проекты заведомо "без претензий".

Словом действительно не понятно, что вы имели в виду???

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


и перевод игры в разряд пошаговой стратегии
да вот этот жанр на УК-НЦ совсем не представлен (ну кроме логических настольных и карточных).
Что меня лично огорчает, самому писать с нуля был опыт "ИГРА ТУРКИ 1.0", к сожалению печальная участь постигла проект - 1. он так и не дорос до написания ИИ (можно было играть против живого соперника),
2. размер исполняемого файла был максимального для запуска объёма;
как выход были планы игру с ИИ делать отдельным файлом с отдельными ресурсами.
Сейчас даже доказательств существования игры у меня нет, графика была там очень самобытная (спрайты 2-х цветные)
вся разработка шла на живой УК-НЦ (редактор спрайтов и ПО).

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

может быть про игры лучше в теме "обсуждение про игры (http://zx-pk.ru/threads/20593-obsuzhdaem-igry-(uk-nts-dvk-bk-nemiga-i-dr-).html)" обсуждать?

спасибо.

MacBuster
23.01.2018, 20:50
Удаление в знак протеста против действий MM

Titus
23.01.2018, 22:29
Конкретно на УКНЦ. Всё какое-то недостаточно продуманное. То ли в спешке написано, то ли на старом Си писали.
Думаю, что ввиду малочисленности программистов пишущих под УКНЦ, а так же сложности ее архитектуры, процент профессиональных оптимизирующих кодеров там был минимален.
Но думаю, что оптимальные кодерские работы были. Взять хотя бы те же игры, приведенные Hobot'ом, типа Рыцаря.

hobot
24.01.2018, 02:32
то ли на старом Си писали.
macro-11 есть такой язык.
На Си писалось конечно, но в большинстве случаев авторы явно указывали об этом
и почти всегда это были не игры ) (* за редким исключением!)

И что значит "на старом", а на каком Си они по вашему под RT-11 должны были писать,
особенно в те года?

Чаще писали на Фортране (совсем старые проекты), Дековском (РафОС) Бейсике и
связке Паскаль + макровставки.


Взять хотя бы те же игры, приведенные Hobot'ом, типа Рыцаря.
Ув. доктор - тут по поводу этих игр есть мнение, что на самом деле - там в качестве загрузчика
что вроде MSX эмулятора, а основная часть кода портированных игр практически без изменений
работала - отсюда и плавность картинки и прочие радости, но вот сам геймплей рыцаря немного
отличается от MSX , однако это не значит, что писали с нуля. Порт есть порт. Вспомни какая плавная
анимация у Арканоида?

SPION.SAV - не оптимально написан? (Первый игровой проект от Высотина П. "проба пера"!),
кстати говоря эксклюзив - такой шпион только на УК-НЦ (если ошибаюсь поправляйте).
Ай да про игрушки трепаться в тему "Обсуждаем игрушки!" товарищи ) Это будет правильней )


(да увлеклись всё же!!! последняя ссылка и пост по теме уполз за горизонт
http://zx-pk.ru/threads/27621-hwyenc.html?p=946442&viewfull=1#post946442)

Titus
24.01.2018, 07:19
Ув. доктор - тут по поводу этих игр есть мнение, что на самом деле - там в качестве загрузчика
что вроде MSX эмулятора
Судя по скорости, не может там быть никакого эмулятора) Z80->PDP11 на УКНЦ в реальном времени не пройдет.

MacBuster
24.01.2018, 10:27
Удаление в знак протеста против действий MM

ilynxy
24.01.2018, 12:46
Ну почему, если не привязываться к архитектуре, то выполнение только команд процессора сводится к использованию индексной адресации и последовательнстям действий типа:
При портировании с Z80 несколько проблем:
1) неоптимальный доступ к памяти, потому что на исходном процессоре адресация в основном байтовая или словная невыровненному адресу. Особенно это печально при байтовой записи в память: разработчики процессора ВМ2 решили не делать цикл DATAOB и MOVB вместо одного цикла доступа к шине делает два (DATAI - modify byte - DATAO). Накладные расходы при загрузке байта в регистр (знаковое расширение, что решается, например, комбинацией CLR Rn/BISB src, Rn). Тут же чтение/запись слова по невырвненному адресу (MOVB ea -> SWAB -> MOVB ea+1): особенно печальна запись -- из-за отсутствия DATAOB на шине будет четыре цикла вместо двух + плюс фетчинг и декодинг трёх-четырёх команд вместо одной.
2) косвенная адресация при обращении к видеобуферу и такие же проблемы с байтовой адресацией.
3) команды блочного копирования LDIR сотоварищи
Z80 реально фетчит и декодирует каждый раз (пока BC != 0) LDIR и затем выполняет два шинных цикла, то есть LDIR выглядит для исполнительно устройства как (READ BUS <fetch LDIR>, <decode/exec LDIR>, READ BUS, WRITE BUS) x N.
если заменять это просто на

MOVB (Rs)+, (Rd)+
SOB Rc, . - 2 то это будет неоптимально и с точки зрения доступа к памяти (отстутствие цикла DATAOB) и с точки зрения выполнения: каждый раз выполняется ещё и SOB, который по времени составляет приблизительно треть от MOVB. Тут поможет аккуратный loop unrolling и, если заведомо известно выравнивание адресов или возможность его изменить, замена MOVB на MOV.
Например, тупое


; Rc = Rc / 2
1$:
MOVB (Rs)+, (Rd)+
MOVB (Rs)+, (Rd)+
SOB Rc, 1$Даст прирост процентов на 20 (в зависимости от ситуации). Если ещё на x2 unroll'ить, то ещё 10-15% можно отыграть, x8 unroll даст почти 1.5 раза прироста по сравнению с x1. А если есть возможность заменить на MOV (Rs)+, (Rd)+ то почти в два раза сразу.


Никита проделал офигительный объём работы, стоит ему отлить памятник только потому, что оно вообще работает. Дело то за малым: берём исходники и модифицируем код, чтобы логика осталась прежней, а код был оптимален с точки зрения целевого процессора. =)

Titus
24.01.2018, 15:14
Ну почему, если не привязываться к архитектуре, то выполнение только команд процессора сводится к использованию индексной адресации и последовательнстям действий типа:
Нельзя не привязываться к архитектуре, если речь идет о конкретно эмуляции Z80 на PDP11.
И она будет как минимум в 5-10 раз медленнее, чем реальный Z80.
Если же делать рекомпиляцию, причем грамотную, то там можно добиться где-то 1/2 скорости Z80.
Ну а потом если пройтись по этому ручками, то для некоторых игр можно и получить скорость аналогичную Z80.

Oleg N. Cher
24.01.2018, 19:49
Никита, а вот демка демонстрирует кучу цветов (визуально даже больше 8). Она использует ПП?

https://www.youtube.com/watch?v=CEeEQDM43cM
По поводу деревьев другого цвета. Где-то тут на форуме встречал высказывание hobot'а в таком духе, что 90% УКНЦ-шек имеют вывод GRB, около 3% RGB, остальные монохром (у нас в школе как раз были монохром). Думаю, хорошо было бы сделать в меню игры выбор GRB/RGB, притом GRB по умолчанию, как более часто встречающийся. Ну и цветные деревья. А ещё - стилизовать под Спектрум цвета в игровой статистике POWER/SCORE, TIME/HIGH. Думаю, 3-х цветов (жёлтый, красный, зелёный) для этого вполне достаточно, можно не выходить на ПП.

(там не только деревья другим цветом, всё обстоит несколько сложнее, чем я думал)

http://i.piccy_.info/i9/b01433679e0d88c3a33ea53dd07b4785/1516812391/11500/1214670/HWYENC2.png

Ещё мечтаю, что когда-нить Никита выключит надпись ЛАТ на экране =) Ну, чтобы уж совсем!

nzeemin
24.01.2018, 20:19
Никита, а вот демка демонстрирует кучу цветов (визуально даже больше 8). Она использует ПП?

Если память мне не отказывает (укоризненно смотрю в ТО), то добраться до плана 0 из ЦП напрямую невозможно.

Вообще на УКНЦ ограничение -- 8 цветов на одну строку, полный набор цветов намного больше, см. соответствующую тему.
Реально же, во многих машинах даже 8 основных цветов сделаны неправильно, в значительной части перепутаны красный и зелёный.
(И опять же, задать свой набор цветов в каждой строке можно только через ПП -- в его памяти лежит display list.)

По этим причинам я принёс в жертву ту цветовую схему которая мне лично казалась красивой (зелёное игровое поле), чтобы на всех трёх вариантах машин (RGB, GRB, BW) смотрелось более-менее ОК.


Думаю, хорошо было бы сделать в меню игры выбор GRB/RGB, притом GRB по умолчанию, как более часто встречающийся. Ну и цветные деревья.

Это значит, что при выборе схемы нужно патчить код примерно в 5-6 местах.
Можно, но не особо интересно.
В целом, я уже потратил на этот проект времени минимум в 1,5 раза больше чем собирался, время кончилось.
Код открыт, где лежит известно, любой может взять и доработать как хочется.

- - - Updated - - -


При портировании с Z80 несколько проблем:

Анализ очень правильный.
Проблема скорости игры во многом это проблема байтовых обращений к памяти. Например:
- Первый и второй "теневые" экраны разнесены друг от друга на нечётное количество байт. Поэтому копировать первый во второй пословно не получится.
- Несколько словных значений в записях объектов выровнены по нечётному адресу -- запись и чтение вместо одной команды делаются за 4-5 команд.
Также лучшей оптимизации можно достичь за счёт индексного доступа к полям объектов. Например, при анализе столкновений обращение к одной записи делается через IX+nn, а ко второй через HL -- и переведено на MACRO11 также, чтобы сделать нормально нужно ооочень аккуратно всё порефакторить.

MacBuster
24.01.2018, 21:16
Удаление в знак протеста против действий MM

nzeemin
24.01.2018, 22:10
Всего 8 штатных цветов.

Мы в общем тоже так думали. Тут на форуме есть утилита TSPAL.SAV от Titus.
Но опять же, нельзя полагаться что на всех экземплярах УКНЦ это правильно распаяно, скорее всего нет.

https://raw.githubusercontent.com/nzeemin/ukncbtl-testbench/master/data/test16_01.bmp

http://zx-pk.ru/threads/20686-mnogo-tsvetov-na-uknts!.html -- тема про цвета

http://zx-pk.ru/threads/20686-mnogo-tsvetov-na-uknts!.html?p=570009&viewfull=1#post570009 -- всего 53 уникальных цвета

MacBuster
24.01.2018, 22:22
Удаление в знак протеста против действий MM

Titus
24.01.2018, 23:46
Да, я запускал это тест на всех своих исправных платах и часть из них показывает левую часть экрана в ч/б.
И где скриншоты с этих нескольких плат?

MacBuster
25.01.2018, 10:35
Удаление в знак протеста против действий MM

Titus
25.01.2018, 11:12
Я же делал для той темы фото.

Если ты про этот, то это скорее проблема в твоем адаптере или телевизоре.

http://s017.radikal.ru/i409/1603/e3/5af160e65da2.png

MacBuster
25.01.2018, 22:27
Удаление в знак протеста против действий MM

Titus
26.01.2018, 00:30
Да, про этот. Но результат повторяется как без адаптера, так и со всеми опробованными адаптерами. И с разными мониторами и ТВ. Но это уже не про игру.
Мы можем немножко поофтопить, потом если что перенесут в тему про цвета.

Этот эффект проявляется только у тебя. Ни у меня, ни у Alex_K его не было на живых машинках. Это очень странно.

MacBuster
26.01.2018, 01:31
Удаление в знак протеста против действий MM

Titus
26.01.2018, 15:53
Думаю дело в разнице между 1515ХМ1 и 1515ХМ2.
Ты имеешь в виду ту ХМ, в которой таймер и контроллер клавиатуры? Он-то тут каким боком?
Впрочем, ты можешь запустить на них мой тест таймера, который определяет, ХМ1 там или ХМ2, и проверить.
Сколько у тебя машин?

randomizer
23.07.2018, 17:41
Пример тому - эмулятор БК для УКНЦ, который я подпатчил в местах преобразования экранов, и он стал значительно быстрее.
Подскажите, а где можно найти подпатченую версию эмулятора?

Titus
23.07.2018, 18:41
Подскажите, а где можно найти подпатченую версию эмулятора?
Читаем тему отсюда (http://zx-pk.ru/threads/3546-igry-na-uknts.html?p=433035&viewfull=1#post433035).

sebastian9922
05.10.2020, 02:17
При попытке запустить игру появилась ошибка: "нет доступной памяти". Как это исправить ?. Включите картинку из загрузочной памяти и ошибку.
https://i.ibb.co/sy7btyq/7e17580f-3c9e-48ae-891c-9f28c2ee1b72.jpg (https://ibb.co/m6pbS64)
https://i.ibb.co/Wg76Hy4/2424d2b0-52b5-4f7d-b0a3-7c5dc73a2af8.jpg (https://ibb.co/Rzt9g0k)
https://i.ibb.co/rsJkhZH/b70aada1-4522-4a1c-8627-b1c933b59e5b.jpg (https://ibb.co/8cVMwj9)

hobot
05.10.2020, 02:40
Как это исправить
проще для запуска игры создать .COМ, а в вашей системе уже в существующем стартовом файле можете смело поправить строки SE USR SWAP (вместо NOSWAP), и SE EXIT SWAP - поскольку отмена свопинга актуальна была при работе с дискетами на каком-нибудь НГМД-6022, так же выгружайте SL.SYS командой SE SL OFF, после этого игра должна запускаться. И в целом для игрушек лучше использовать RT11SJ монитор версии 5.0 (например отличный вариант из поставки УК-НЦ от СЭМЗ!) - особенно для новичков, проблем с запуском практически не будет и меньше вопросов будет возникать, не ленитесь читать форум - тут уже всё много раз спрошено, отвечено и описано.

nzeemin
05.10.2020, 02:41
При попытке запустить игру появилась ошибка: "нет доступной памяти". Как это исправить ?. Включите картинку из загрузочной памяти и ошибку.


И вам доброго дня.
Да, игра занимает много места - нужно чтобы память была посвободнее при запуске.
Попробуйте выгрузить SL через SET SL OFF, если не поможет то посмотреть что можно убрать из STARTS.COM.

sebastian9922
05.10.2020, 04:22
И вам доброго дня.
Да, игра занимает много места - нужно чтобы память была посвободнее при запуске.
Попробуйте выгрузить SL через SET SL OFF, если не поможет то посмотреть что можно убрать из STARTS.COM.

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

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


проще для запуска игры создать .COМ, а в вашей системе уже в существующем стартовом файле можете смело поправить строки SE USR SWAP (вместо NOSWAP), и SE EXIT SWAP - поскольку отмена свопинга актуальна была при работе с дискетами на каком-нибудь НГМД-6022, так же выгружайте SL.SYS командой SE SL OFF, после этого игра должна запускаться. И в целом для игрушек лучше использовать RT11SJ монитор версии 5.0 (например отличный вариант из поставки УК-НЦ от СЭМЗ!) - особенно для новичков, проблем с запуском практически не будет и меньше вопросов будет возникать, не ленитесь читать форум - тут уже всё много раз спрошено, отвечено и описано.

Большое вам спасибо за информацию, у меня есть RT11, включенный в образ по умолчанию для Контроллер псевдодиска, закончил паять его только вчера и починил компьютер, начал использовать RT-11 и читать всю возможную информацию с форума. Потратьте больше времени, чтобы понять, используя переводчик также.

nzeemin
05.10.2020, 04:34
Извини, не хочу быть вежливым. Использование онлайн-переводчика для этого и большое вам спасибо за объяснение и помощь теперь работает :). Также отличная игра это, наверное, лучшая игра в этой компьютерной библиотеке.


Отлично, и спасибо вам за интерес и добрые слова.
Feel free to use English on the forum, most of us understands it and we know how to use translator tools too :-)

nzeemin
24.02.2024, 00:37
Поработал сегодня над оптимизацией этой старой (уже классической!) игрушки.
Удалось ускорить примерно на 7%, в основном за счёт разворачивания циклов.
Время измеряю как Uptime по эмулятору, от начала демо до появления надписи после зоны 0.
Версия v62 проходит демо за 154 секунды, текущая версия за 143 секунды.
На реале должно быть ещё немного быстрее.

Ссылка для скачивания образа диска: https://github.com/nzeemin/uknc-highwayencounter/releases/download/hwyenc_v67/hwyenc67.dsk.zip

nzeemin
24.02.2024, 23:28
Потратил ещё вечер, добавил в HWYENC выбор одной из 4-х палитр, плюс ещё чуть ускорил, теперь на 10% быстрее чем v62.

Скачать: https://github.com/nzeemin/uknc-highwayencounter/releases/download/hwyenc_v69/hwyenc68.dsk.zip

BlaireCas
25.02.2024, 14:52
Могу добавить что еще из очень полезных вещей сделано управление стрелками, что позволило пройти игрушку.
https://i.imgur.com/zQnrDWv.jpeg

Titus
25.02.2024, 15:14
Эта игра сама просится сделаться многоцветной)