PDA

Просмотр полной версии : Batty для ПК Специалист



CityAceE
13.08.2020, 17:20
Пока только главное меню:

https://pic.maxiol.com/images2/1597328540.90460257.2.png https://pic.maxiol.com/images2/1597328512.90460257.1.png

Зато со звуком и все нужные кнопки работают :) Меню полнофункционально, устанавливает все нужные переменные и подготавливает игру к запуску. Но 0 пока запускает только di:halt (зависание).

Честно говоря, понятия не имею как я буду дальше переносить код, когда вовсю будут использоваться дополнительные регистровые пары и сложные команды Z80. А вот меню как будто бы специально для i8080 писалось. Навскидку из Z80-специфичного встречалось: JR, DJNZ, BIT и LD (nn),DE, что-то ещё несложное. Экран довольно легко преобразовал. Звук тоже, но там нужно ещё задержки подрегулировать - я поставил на глаз. Для клавиатуры написал свою процедуру.

Пока очень пугают регистровые пары IX и IY, на которые в игре вся логика завязана. Бегло погуглил на предмет готовых рецептов переноса кода с Z80 на i8080, но вообще ничего не нашёл. Будем потом тут вместе придумывать как со всем этим бороться :)

Исходники здесь (https://github.com/CityAceE/BATTY_specialist).

zx_
16.08.2020, 18:04
CityAceE, очень похожая история началась совсем рядом
https://zx-pk.ru/threads/32131-daungrejd-kompyutera-quot-leningrad-quot.html?p=1076967#post1076967

CityAceE
17.09.2020, 13:57
Вот так оно будет выглядеть:

https://pic.maxiol.com/images2/1600337250.3280329097.batty3.png

Отсутствуют тени, создаваемые градациями яркости. Обрамление игрового поля также пострадало по той же причине. Также всё плохо с кирпичами из-за невозможности использовать цвет бумаги отличным от чёрного. Не устаю восхищаться талантов автора оригинальной игры и тем, как умело и грамотно он все продумал в плане графики. Одни кирпичи чего только стоят!

CityAceE
19.09.2020, 20:22
Решил процесс переноса игры разбить на два этапа. На первом этапе хочу полностью адаптировать игру к архитектуре Специалиста (память, экран, клавиатура, звук и т.д.) без адаптации кода с Z80 на i8080. Я начал было делать одновременный перенос (см. первое сообщение), но столкнулся со сложностями - не всегда было понятно в чём проблема, то ли в неверном переносе кода с одного процессора на другой, то ли я допускаю ошибки касательно архитектуры Специалиста.

Как только разграничил всё на этапы, то работа сразу пошла веселее. Пока ещё нахожусь на первом этапе, но в игру уже можно поиграть.

Проблемы:

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

2. Звук. Он есть, но в оригинальной игре он завязан на прерывания, которых на Специалисте нет. Надеюсь, что в дальнейшем получится это побороть.

3. Скорость. Задержка в игре организована конструкцией ei:halt:di, которая встречается в нескольких местах. Пока я на эти места влепил холостые циклы и задержку выбрал вообще от фонаря. Если же убрать какую-либо задержку, то играть невозможно из-за очень высокой скорости. Это хорошо - значит есть какой-то запас по скорости для перевода на более медленный i8080. Я опасался, что из-за замены halt на холостой цикл может пострадать равномерность, но если и появилась какая-то неравномерность, то в мне глаза она не бросилась. Также не вижу и тиринга, который мог возникнуть при отказе от halt.

А вот, собственно, текущий прогресс:


https://youtu.be/BSv21MnddXo

CityAceE
20.09.2020, 16:51
Сижу туплю - не могу понять что не так. Прикручиваю к игре управление от клавиатуры, как на ZX Spectrum:
ВЛЕВО и ВПРАВО - кнопки ряда ФЫВА через одну.
ОГОНЬ - копки рядов ЙЦУК и ЯЧСМ

При нажатии кнопок по отдельности всё работает как задумано. Но как только зажимаю ОГОНЬ, то каретка или влево не едет, или вправо, в зависимости от того какую именно клавишу ОГОНЬ зажимаю. Может кто-то свежим взглядом посмотрит и увидит, что не так?



keyboard_ctrl:
xor a
ld c,a
ld a,#82
ld (#ff03),a ; Переключаем ВВ55 на чтение рядов
ld a,(#ff01)
cpl
ld h,a
and %00010000 ; Проверка ряда ФЫВАПРОЛДЖЭ
jp z,keyboard_ctrl_2 ; Уходим, если ни одна клавиша ряда не нажата

; Опрос ВПРАВО
ld a,#91
ld (#ff03),a ; Переключаем ВВ55 на чтение столбцов
ld a,($ff02) ; Проверка столбцов ФЫВА
cpl
ld d,a
and %00000101
ld b,a
ld a,($ff00) ; Проверка столбцов ПРОЛДЖЭ
cpl
ld e,a
and %01010101
or b
jp z,keyboard_ctrl_1
inc c

keyboard_ctrl_1:
; Опрос ВЛЕВО
ld a,d
and %00001010
ld b,a
ld a,e
and %10101010
or b
jp z,keyboard_ctrl_2
ld a,c
or %00010
ld c,a

keyboard_ctrl_2:
; Опрос ОГОНЬ
ld a,h ; Проверка рядов ЙЦУК и ЯЧСМ
and %00101000
jp z,LA1DB_7
ld a,c
or %10000
ld c,a

LA1DB_7:
LD A,C
LA1DB_71:
LD (ctrl_btns_pressed),A
RET

; Состояние нажатых кнопок джойстика и управления
; Bit 0 - вправо
; Bit 1 - влево
; Bit 2 -
; Bit 3 -
; Bit 4 - огонь
ctrl_btns_pressed:
DEFB $06


О том, как работает клавиатура Специалиста я написал здесь (https://zx-pk.ru/entries/293-klaviatura-pk-spetsialist-s-tochki-zreniya-programmista.html).

Cursor и Interface II реализовал. И там одновременное нажатие огня и наплавленный работает корректно. Причем во всех случаях всё сводится к формированию переменной ctrl_btns_pressed. Так что скорее всего проблема именно где-то в процедуре, которую я привёл выше.

ivagor
20.09.2020, 18:50
Для полного счастья надо после
ld a,#91
ld (#ff03),a
добавить
ld a,00101000b
ld (0ff01h),a

Хотя для пользователей emu (и для пользователей emu80 не включивших йцукен) счастье не будет полным.

CityAceE
20.09.2020, 19:02
добавить
ld a,00101000b
ld (0ff01h),a
Огромное спасибо! Работает! Сам бы точно не догадался. Но и сейчас особо не могу понять почему не работало ранее и почему работает сейчас :(


для пользователей emu80 не включивших йцукен

У меня конечная цель - запуск игры на реальном железе. И соответственно опрос клавиш делаю не по раскладке, а по реальной матрице клавиатуры. А для эмуляторов с раскладкой QWERTY есть управление от Cursor и Interface II, которые от раскладки не зависят.

ivagor
20.09.2020, 19:29
почему не работало ранее и почему работает сейчас
Без "добавки" при детекте направлений нельзя отличить Ф от Я и Й, Ы от Ч и Ц и т.д.

Сейчас большинство новодельных реалов с контроллерами PS2, интересно как там с раскладками.

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

Для большей корректности (вдруг пользователь начнет совсем левые кнопки давить) лучше заменить ld a,00101000b на ld a,11101111b

CityAceE
20.09.2020, 19:42
Для большей корректности (вдруг пользователь начнет совсем левые кнопки давить) лучше заменить ld a,00101000b на ld a,11101111b
Да, я начал анализировать суть работы того, что ты предложил, и пришёл к тому же выводу. Хотел об этом написать, а ты уже успел добавить корректировку, чем подтвердил, что я правильно думал.
По этой же аналогии внёс такие же изменения и в остальные типы управления. А то при тестировании выяснилось, что на Cursor мог влиять Interface II и наоборот.

CityAceE
02.10.2020, 10:48
Хочу поделиться информацией о том, как у меня продвигается дело. У меня сейчас очень мало свободного времени, но, когда оно появляется, то я стараюсь тратить его на Batty. Пытаюсь адаптировать к Специалисту и параллельно продолжаю разбирать дизассемблер оригинальной игры. В процессе адаптации на новую платформу начинают проясняться моменты, которые при анализе листинга оставались неясными - я всё это комментирую в листинге.

Я решил всё-таки сначала сделать самую жирную версию, которая в точности будет соответствовать оригиналу. Это возможно на Специалисте-МХ, так как его графические возможности позволяют полностью передавать графику ZX. После получения такой версии буду её упрощать под остальное железо. К тому же, такую версию, как мне кажется, будет проще перенести, например, на Вектор. Вот так игра сейчас выглядит на Специалист-МХ. То есть 1:1, как на Спектруме.

https://pic.maxiol.com/images2/1601624299.1531953296.battyspec.png

Изначально я старался вносить минимум изменений в код и логику игры и её движка. То есть я использовал и формат графики, и формат теневого буфера, какими они были в оригинальной игре. А в оригинальной игре всё хранится построчно. Я всё это оставил, как есть, и просто в процессе вывода на экран Специалиста преобразовывал всё на лету. Однако, как только я взялся за поддержку цвета, то понял, что при таком подходе цвет будет отжирать слишком много ресурсов. И есть подозрение, что при дальнейшем переводе кода на более медленный процессор i8080 всё просто встанет колом. Поэтому я решил все перелопатить и сделать хранение и вывод в столбик, по аналогии с экраном Специалиста. Изначально мне показалось, что с этим не возникнет сложностей. Однако я сижу уже больше недели, и у меня не получается добиться положительно результата. Оказалось, что почти вся игра завязана на такое хранение. Буквально во всех местах есть какие-то участки, в которых идёт расчёт на линейное расположение графики. Начиная от рисования обрамления кирпичей, и заканчивая бегающими по каретке точками.

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

Тут же почему-то счёт первого игрока начал отображаться на месте счёта второго. А я в эту процедуру даже не лазил. Проблема возникла сразу после переработки процедуры рисования цифр счёта. Причём что любопытно, проблема проявляется через один запуск, то есть, если проиграть и запустить игру заново, счёт будет отображаться корректно, а потом он будет снова с проблемой. Я бегло глянул, попытался найти причину, но пока тоже отложил.

Ну и сейчас завис на адовой процедуре выбивания кирпича. Это какая-то огромная процедура! Она самая большая во всей игре. Логику работы понять не удаётся, а не понимая логики сложно переработать вывод графики. Мне удалось лишь сделать восстановление цвета под выбитым кирпичом, но всё остальное пока никак. И вообще сейчас из-за этого всё поломалось и перестало играться: экран портится, доиграть раунд до конца сейчас не удаётся.

В общем, проблем с таким хранением возникло слишком много. Какие-то удаётся побороть, а какие-то пока нет. Энтузиазм потихоньку угасает. Если окончательно угаснет, то вернусь к варианту линейного хранения графики.

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

CityAceE
12.10.2020, 21:01
Но вдруг откуда ни возьмись за движущимся спрайтами появился шлейф.
Это я забыл про ещё две процедуры для сохранения и восстановления объектов из буфера на экран.


Тут же почему-то счёт первого игрока начал отображаться на месте счёта второго.
Потому что автор как-то странно определял какой игрок был последним - первый или второй. А определял он игрока по экранном адресу вывода цифры счёта. И если адрес был не как у первого игрока, то игроки обменивались при запуске. А так как при смене адресации всё перестало совпадать, то и обмен происходил после каждого запуска игры.


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


И вообще сейчас из-за этого всё поломалось и перестало играться: экран портится, доиграть раунд до конца сейчас не удаётся.
Я конкретно завис на баге, когда я умирал прижавшись к правому краю и всё потом вешалось. Думал уже всё бросить. А оказалось, что виной всему была тень от одной из искр. Она выходила за пределы буфера. В случае с линейной адресацией эта тень просто попадала на следующую линию с противоположной стороны приходясь на бортик, а в моём случае с организацией в столбик эта тень переходила на следующий столбик, то есть за пределы буфера и портила данные.

Вроде всё, что нашёл я поборол. Даже прошёл игру полностью с бесконечными жизнями. Но я проходил версию, когда некоторые буферы поместил в экранную область для визуального контроля. А сейчас я всё спрятал в пользовательское ОЗУ. Надеюсь, что это ничего не нарушит.

Скорость по-прежнему никак не трогал. Неравномерность движения без возможности использовать halt, как на Спектруме всё-таки видна. Наверное, это как-то можно побороть, но я пока не думал в эту сторону.

Таким образом, первый этап я завершил - получил работоспособную версию на 16 цветов для компьютера Специалист-МХ Турбо (с Z80). Предлагаю всем заинтересованным лицам посмотреть и погонять её.

Честно говоря, не знаю теперь хватит ли моего энтузиазма для перевода кода с Z80 на i8080. Формально задача выполнена - Batty на Специалисте теперь есть. Но у меня была цель запустить игру на моём реальном Лике, а там нет ни цвета, ни тем более Z80.

ivagor
13.10.2020, 17:00
CityAceE, поздравляю! Ты проделал большую работу и довел до рабочего состояния, и не просто рабочего а вполне играбельного, это очень здорово.

CityAceE
13.10.2020, 19:03
ivagor, большое спасибо! Твоё мнение для меня имеет очень большое значение.

Следующим этапом планирую заняться редуцированием цветов. А то сейчас, несмотря на мои изначальные попытки сделать универсальную версию с условной компиляцией, версия для обычного Специалиста, но с процессором Z80, перестала работать корректно - на экране какой-то мусор из кирпичей и прочие артефакты. Наверняка какая-нибудь мелочь, но тоже потребует времени. Большее опасение вызывает полностью ч/б версия, так как то, что получается при отключенном цвете, выглядит, прямо скажем, так себе (см. ниже). Собственно, в это можно поиграть, если запустить версию из предыдущего моего сообщения на обычном Специалисте+Z80. Наверное, стоит подумать над текстурами для кирпичей или что-то вроде того.

https://pic.maxiol.com/images2/1602604719.1604655705.batty3.png

Ну и потом стОит всё-таки собраться с духом и адаптировать всё под i8080. А вот эта задача будет уже посерьёзнее. Мало того, что там всё завязано на регистры IX и IY, так ещё и свободной памяти сейчас осталось в районе 768 байт. Но, с памятью можно выкрутиться, задействовав экранное ОЗУ и закрасив эту область в чёрный цвет. А вот с IX и IY пока думаю, что можно придумать. Дело в том, что каждый спрайт на экране - это объект со своими свойствами (координатами, текущим адресом на экране, применённым бонусом, адресом графики и т.д.) и обращение к каждому этому свойству идёт через регистры IX или IY с нужным смещением. Пока лучшее, что придумалось - это перед каждым обращением к любой процедуре, работающей с таким объектом, просто копировать эти свойства в жёстко заданную область памяти, а если там что-то в результате работы процедуры поменялось, эти свойства копировать обратно. Ну и, соответственно, потом вместо индексных регистров со смещением просто обращаться к абсолютным адресам. Мне кажется, что так будет быстрее, чем городить какой-то огород из кучи проверок и переходов.

goodboy
13.10.2020, 19:19
с IX и IY пока думаю, что можно придумать.
мне на спеке (в муз.плейерах для AY) встречалась более быстрая альтернатива индексным регистрам.
таблицы выравнены #XX00 ; H=#XX ; L=смещение

..............
случайно наткнулся
...«Арханоид» — классический арканоид, в котором роль кубиков выполняют здания, разрушенные по инициативе властей в период с 1991 по 2015 год, то есть при Лужкове и Собянине. Для сбора информации издание использовало несколько источников, включая сайты «Архнадзор», «Москва, которой нет» и ряд федеральных СМИ.

В игре есть 10 уровней, каждый из которых соответствует одному из районов Москвы: например, Арбат, Якиманка, Замоскворечье. При уничтожении здания (кирпичика) отображается его название и год разрушения.

Игрок может разблокировать фотографии зданий во встроенной энциклопедии, ловя бонусы при помощи подвижной платформы. За уничтожение некоторых «зданий» полагаются «достижения»: например, «кран», «парковки», «лужковская кепка».

CityAceE
13.10.2020, 19:31
таблицы выравнены #XX00 ; H=#XX ; L=смещение
Спасибо, это отличный вариант! Однако я пока не уверен, что это возможно будет применить, как раз из-за ограничения по памяти, так как на каждый объект при таком варианте нужно будет отводить по 256 байт. Но я обязательно буду рассматривать этот вариант в числе приоритетных решений.

goodboy
13.10.2020, 20:15
на каждый объект при таком варианте нужно будет отводить по 256 байт
тут надо смотреть на размер.
если например таблица занимает байт 40, то за ними можно разместить код (до начала след.таблицы)

ivagor
15.10.2020, 07:08
планирую заняться редуцированием цветов
Поверхностно глянул и на первый взгляд специалистовские цвета требуют
1. Сменить адрес порта
2. Модифицировать таблицы преобразования цвета и константы
3. Инвертировать кирпичи
Скорее всего основной код не требует модификации и источник артефактов и мусора непонятен

CityAceE
15.10.2020, 18:06
ivagor, не всё так просто...


1. Сменить адрес порта
Это я учитывал и сразу делал условную компиляцию в зависимости от модели.


2. Модифицировать таблицы преобразования цвета и константы
Никаких констант там под это дело нет, только жёстко заданные цвета кирпичей. И их я поменял.


3. Инвертировать кирпичи
Тоже сделал. И в итоге вот что получилось:

https://pic.maxiol.com/images2/1602773503.1604655705.batty31.png https://pic.maxiol.com/images2/1602774332.1604655705.batty32.png


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

Во-вторых, как я уже писал ранее, там есть адова процедура выбивания кирпичей, она обводит линией кирпичи. А так как кирпичи инвертированы, то всё делается не так, как было задумано. Так что нужно будет туда тоже лезть. И, судя по всему, есть ещё и другие места, потому что после проигрывания анимации переливания кирпичей их края тоже выглядят не так, как было изначально. Это видно на скриншоте: разница между соединением красных (поле анимации) и фиолетовых кирпичей.


источник артефактов и мусора непонятен
С этим я быстро разобрался и решил. Я, в принципе, сразу предполагал откуда растут ноги. Для обычного Специалиста я исключил подпрограмму рисования тени под кирпичом, а оказалось, что остальной код полагался на изменённые этой подпрограммой регистры.

ivagor
15.10.2020, 18:55
Понятно, значит есть подводные камни


Никаких констант там под это дело нет
Константами я назвал например как по адресам 466E 4675

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

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

Возможно для универсальной версии, которая условной компиляцией перенастраивается под MX или 8c лучше (но не проще) сделать инверсию кирпичей (кроме черных) уже в MX версии переставив местами цвета фона и изображения.

CityAceE
15.10.2020, 22:39
Насчет черных кирпичей оригинального ничего не скажу, там скорее всего единственный вариант - оставить их без инверсии с белыми границами.
Там всё дело в том, что для всех кирпичей используется один спрайт, который просто при выводе раскрашивается. Видимо под чёрный нужно будет делать отдельный инверсный спрайт.

Что-то я намаялся в этими кирпичами. Никак не получатся сделать красиво используя только два цвета, один из которых чёрный. Вот так выглядит отдельностоящий кирпич на Спектруме и Специалисте МХ:

https://pic.maxiol.com/images2/1602792068.1604655705.brik.png

А несколько кирпичей уже выглядят так:

https://pic.maxiol.com/images2/1602792338.1604655705.briks.png https://pic.maxiol.com/images2/1602792573.1604655705.briks2.png

Спрашивается, как сделать так, чтобы оно в обоих случаях выглядело хорошо, если один из цветов всегда чёрный?

HardWareMan
16.10.2020, 06:05
Используй дизеринг, Люк!

CityAceE
16.10.2020, 08:32
Спрашивается, как сделать так, чтобы оно в обоих случаях выглядело хорошо, если один из цветов всегда чёрный?
После экспериментов, решил остановиться на варианте, когда левая и верхняя сторона обволятся "белым" (цветом фона раунда), а правая и нижняя сторона обводятся чёрным:

https://pic.maxiol.com/images2/1602825827.1604655705.briks3.png

И выглядеть в игре это будет так:

https://pic.maxiol.com/images2/1602826136.1604655705.batty33.png

Но тут возникла проблема с выбиваемыми кирпичами. Теперь между ними то щербина цвета поля, то, чёрная точка, так как по существующему алгоритму окантовка всегда чёрная и он не учитывает какую сторону рисовать первой, чтобы не было указанных недочётов.

ivagor
16.10.2020, 08:58
В последнем варианте 8c для меня кирпичи выглядят вдавленными. Интересно, что даже в ч/б варианте (текущем, где кирпичи черные) они выглядят выпуклыми.

CityAceE
16.10.2020, 09:36
кирпичи выглядят вдавленными
Да, есть такое. Я на это тоже сразу обратил внимание. Но от этого никуда не деться, если полоска на кирпиче будет чёрной, так как она выглядит, как тень от бортика. А в ч/б варианте наоборот - белая полоса выглядит, как блик на выпуклой чёрной поверхности. Совсем отказаться от этих полосок на кирпичах не получится, так как в массиве кирпичей они являются разделителями между соседними кирпичами

ivagor
16.10.2020, 10:20
Совсем не художник, поэтому мне бы помолчать. Но написать хочется, ногами прошу сразу не пинать.
Очень дешевый вариант - оставить кирпичи черными и менять цвет окантовки. Тут еще есть возможность увеличить (внутрь) по крайней мере на точку сверху и сбоку толщину окантовки. Плюсы такого варианта - простота переделки и сохранение выпуклости.
Еще есть (без сочетания с "дешевым" вариантом) возможность делать верхнюю окантовку белой, но что это дает без белой боковой - скорее ничего.

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

По художественной части ничего умного придумать не могу, зато вспомнил еще одну околоспециалистовскую платформу, на которой в бате можно сделать кирпичи с нормальной окантовкой - эрик SYR-ALEX с модификацией 8c. Но тут свои трудности - в emu не поддерживается "комбинированный" видеорежим SYR-ALEX (там или только классический эрик или эрик 8c). Т.е. фактически это была бы версия игрушки только для реала SYR-ALEX.

SYR-ALEX
16.10.2020, 15:46
По художественной части ничего умного придумать не могу, зато вспомнил еще одну околоспециалистовскую платформу, на которой в бате можно сделать кирпичи с нормальной окантовкой - эрик SYR-ALEX с модификацией 8c. Но тут свои трудности - в emu не поддерживается "комбинированный" видеорежим SYR-ALEX (там или только классический эрик или эрик 8c). Т.е. фактически это была бы версия игрушки только для реала SYR-ALEX.

В эмуле только один из режимов ,на реале можно режимы смешивать . Пишите демку . Видео отчёт предоставлю .

CityAceE
16.10.2020, 22:07
оставить кирпичи черными и менять цвет окантовки
Думал тоже над таким вариантом, но это будет уже не та Batty, которую мы знаем. Хотя вот решил проверить, как это будет выглядеть:

https://pic.maxiol.com/images2/1602875147.1604655705.battyinverse1.png

https://pic.maxiol.com/images2/1602875171.1604655705.battyinverse2.png https://pic.maxiol.com/images2/1602875191.1604655705.battyinverse3.png

При таком варианте вообще нет ниаких заморочек с окантовками и т.д. - всё работает, как и в оригинальной игре. Вот только внешний вид страдает...


Пишите демку .
До демки ещё очень далеко, и то, если руки дойдут. Там основная работа по переносу кода с одного процессора на другой.

ivagor
17.10.2020, 06:52
Хотя вот решил проверить, как это будет выглядеть
Может еще попробуешь

Тут еще есть возможность увеличить (внутрь) по крайней мере на точку сверху и сбоку толщину окантовки
?


Там основная работа по переносу кода с одного процессора на другой.
Ты, как понимаю, о классическом специалисте, а в эрике то z80

Shumadan
17.10.2020, 10:13
я занимаюсь графическим дизайном, но не программист. А кирпичи лучше сделать так. Есть эффект объема и реализовано всего двумя цветами.

Titus
17.10.2020, 10:17
При таком варианте вообще нет ниаких заморочек с окантовками и т.д. - всё работает, как и в оригинальной игре. Вот только внешний вид страдает...
Черные кирпичи - не айс.

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


я занимаюсь графическим дизайном, но не программист. А кирпичи лучше сделать так. Есть эффект объема и реализовано всего двумя цветами.
Можно, но менее красиво. Шахматная штриховка уже порядком поднадоела.

CityAceE
17.10.2020, 10:51
Может еще попробуешь
Там накладывается проблема с обработкой сторон вокруг кирпичей. Придётся лезть в логику этой непростой процедуры. Так как если кирпич инверсный (относительно оригинала), то при выбивании кирпича внутри соседнего будет рисоваться дополнительная линия.


в emu не поддерживается "комбинированный" видеорежим SYR-ALEX (там или только классический эрик или эрик 8c). Т.е. фактически это была бы версия игрушки только для реала SYR-ALEX.
Ещё раз перечитал всю тему про Эрик, чтобы разобраться с цветом. Но в итоге так и не понял как при одновременном использовании цветовой схемы Эрика (довольно ресурсоёмкой при использовании) и классической схемы 8с получить аналог цветов Спектрума. По большому счёту, сейчас основной затык в корректной отрисовкой кирпичей, потому что для всего остального чёрной бумаги достаточно, а без теней обойтись вполне можно. Насколько я понял, нужно будет использовать стандартный режим 8с для всей игры, плюс как-то, используя цветовой режим Эрика добавить и цвет фона. Причём у Эрика цвет фона может быть только одним из 4-х цветов. Или же нужно дополнительно в режиме Эрика рисовать пикселями одним из 8-ми цветов в дополнительном экранном ОЗУ (#D000) то, что в основном режиме является фоном?


А кирпичи лучше сделать так.
Спасибо за этот вариант! Дополнительная чёрная линия снизу и справа создают эффект отсутствующей тени. Вот так это выглядит в игре:

https://pic.maxiol.com/images2/1602920976.1604655705.b1.png

https://pic.maxiol.com/images2/1602921000.1604655705.b2.png https://pic.maxiol.com/images2/1602921024.1604655705.b3.png

Чёрные кирпичи при таком раскладе будут выглядеть белыми :)

ivagor
17.10.2020, 11:55
так и не понял как при одновременном использовании цветовой схемы Эрика (довольно ресурсоёмкой при использовании) и классической схемы 8с получить аналог цветов Спектрума
Полного аналога цветов спектрума не получится, я писал только про обводку (без теней). Кирпичи инвертируем (кроме черных, черные в плоскости 9000-BFFF надо сделать полностью черными), т.е. тело цветное и черная обводка (в плоскости 9000-BFFF). А в плоскости D000-FFFF можно нарисовать белую обводку.


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

Shumadan
17.10.2020, 13:33
если так?

ivagor
17.10.2020, 13:38
Или все же изменить логику их обработки и сделать просто черными
Сразу не сообразил, как раз можно не делать индивидуальной обработки черных кирпичей, а просто нарисовать стандартный кирпич с черным цветом чернил

NEO SPECTRUMAN
17.10.2020, 17:43
https://jpegshare.net/images/58/5b/585b550be50b07fc153faf9458501702.png

а можно было бы попробовать сделать такую же тень как от ракетки (выступающую на столько же пикселей вправо и влево и тоже шахматкой)

Shumadan
17.10.2020, 17:49
а можно было бы попробовать сделать такую же тень как от ракетки (выступающую на столько же пикселей вправо и влево и тоже шахматкой)

Ракетку и мяч бы выделить цветом, если это возможно. Я бы отрисовал их заново.

NEO SPECTRUMAN
17.10.2020, 18:01
https://jpegshare.net/images/79/d9/79d94cfacee45ec811368b9bb5778e5d.png

еще бы от стенок правильную тень и вообще было бы щикарно

CityAceE
17.10.2020, 21:31
Сделал индивидуальную обработку чёрных кирпичей. На мой взгляд, стало гораздо лучше и теперь уже более-менее похоже на оригинал:

https://pic.maxiol.com/images2/1602959479.1604655705.bat2.png

https://pic.maxiol.com/images2/1602959507.1604655705.bat3.png

Желающие могут поэкспериментировать со спрайтами кирпичей самостоятельно.

Адрес spr_brik_1 в текущей сборке: 0x4772



; Спрайт: кирпич, кадр 1
spr_brik_1:
DEFB $FF,$FE,$D5,#54,$AA,$AA,$D5,$54
DEFB $AA,$AA,$D5,$54,$AA,$AA,$00,$00

; Спрайт: кирпич, кадр 2
spr_brik_2:
DEFB $00,$02,$00,$02,$00,$02,$00,$02
DEFB $00,$02,$00,$06,$00,$FE,$00,$00

; Спрайт: кирпич, кадр 3
spr_brik_3:
DEFB $00,$02,$00,$02,$00,$06,$00,$06
DEFB $00,$06,$00,$0E,$0F,$FE,$00,$00

; Спрайт: кирпич, кадр 4
spr_brik_4:
DEFB $00,$02,$00,$02,$00,$06,$00,$06
DEFB $00,$0E,$00,$3E,$FF,$FE,$00,$00

; Спрайт: кирпич, кадр 5
spr_brik_5:
DEFB $FF,$FE,$FF,$FE,$FF,$FE,$FF,$FE
DEFB $FF,$FE,$FF,$FE,$FF,$FE,$00,$00

; Спрайт: кирпич, кадр 6
spr_brik_6:
DEFB $00,$02,$00,$02,$00,$02,$00,$06
DEFB $00,$06,$00,$0E,$01,$FE,$00,$00

; Спрайт: кирпич, кадр 7
spr_brik_7:
DEFB $00,$02,$00,$02,$00,$06,$00,$06
DEFB $00,$06,$00,$0E,$FF,$FE,$00,$00

; Спрайт: отдельно чёрный кирпич
spr_brik_black:
DEFB $FF,$FE,$80,$00,$80,$00,$80,$00
DEFB $80,$00,$80,$00,$80,$00,$00,$00


Я тестировал игру на эмуляторе Emu80. Необходимый конфиг эмулятора Специалиста с Z80 я выкладывал здесь (https://zx-pk.ru/threads/26438-spetsialist-emulyatsiya.html?p=1080688&viewfull=1#post1080688).

В процессе отладки я запускаю игру с помощью такой команды, чтобы сразу запускалась нужная конфигурация компьютера:


.\Emu80qt\Emu80qt.exe batty.rks -sz


Ну а вот, собственно, первый публичный билд. Было бы здорово, если бы кто-то его запустил на реальном Специалисте с процессором Z80.

P.S. В игру я встроил чит. В главном меню нужно одновременно нажать несколько клавиш. Интересно, кто-нибудь догадается какие именно клавиши необходимо нажать? ;)

CityAceE
17.10.2020, 21:47
Сразу не сообразил, как раз можно не делать индивидуальной обработки черных кирпичей, а просто нарисовать стандартный кирпич с черным цветом чернил
Так, к сожалению, не получится. При таком подходе кирпичи будут полностью чёрными без каких-либо рисок.


Ракетку и мяч бы выделить цветом, если это возможно.
Увы, ничего хорошего из этого не получится. Каретка движется с дискретностью 4 пикселя - в это полбайта. Если её красить в отдельный цвет, то на некоторых фазах цвет будет вылазить за пределы спрайта. То же касается и шарика.


еще бы от стенок правильную тень и вообще было бы щикарно
Теоретически можно подумать над тем, чтобы вместо гашения яркости знакоместа, на этом же месте накладывать сетку по XOR'у.

Проверил также игру с этим (https://zx-pk.ru/threads/29363-vozrozhdenie-quot-erika-quot.html?p=1055679&viewfull=1#post1055679) конфигом на эмуляторе Emu. Работает! Так что хотел бы попросить SYR-ALEX попробовать запустить игру на своём Эрике.

ivagor
18.10.2020, 06:02
Так, к сожалению, не получится. При таком подходе кирпичи будут полностью чёрными без каких-либо рисок.
Это было предложение применительно к эрику с "комбинированным" режимом в расчете на обводку в другой плоскости

ivagor
18.10.2020, 12:36
Кстати, эрик в "комбинированном" режиме позволяет рисовать двухцветные (черный фон + белый в плоскости D000-FFFF) спрайты в произвольном положении, но есть две проблемы:
1. Надо переделывать вывод спрайтов на двухплоскостной
2. Нельзя отладить в эмуляторе, а вслепую сложно

CityAceE
18.10.2020, 13:05
Нельзя отладить в эмуляторе, а вслепую сложно
Это для меня самое главное препятствие для такой реализации. Может быть кто-то и может в голове весь код прокручивать, явно представляя как всё будет работать на устройстве, но у меня так не получается. У меня наоборот куча ошибок на ровном месте.

SYR-ALEX
18.10.2020, 22:17
Так что хотел бы попросить SYR-ALEX попробовать запустить игру на своём Эрике.

Всегда пожалуйста

https://youtu.be/wKUp1O9cWaw
Тоже самое на СЯБРе с Z80 2,5 МГц .

https://youtu.be/sMuNso1GCrs
За качество видео извиняюсь .

CityAceE
18.10.2020, 22:57
SYR-ALEX, большое спасибо! Очень радостно видеть, что оно запустилось и работает не реальном железе! Конечно, от скорости процессора многое зависит. Это видно отчётливо. Боюсь предположить, что же тогда будет в итоге на i8080 с его 2 MHz'ами и общим огородом вместо быстрых команд Z80, если всё-таки удастся под него игру переписать?

И ещё не услышал звук на Сябре. Он там вообще был?

SYR-ALEX
19.10.2020, 12:37
Да конечно звук есть и на ЭРИКе и на СЯБРе . Это старый тапок на андройде живёт своей жизнью .

CityAceE
19.10.2020, 13:41
Да конечно звук есть и на ЭРИКе и на СЯБРе
Спасибо, за информацию!


Конечно, от скорости процессора многое зависит. ivagor, а у тебя нет каких-нибудь мыслей, к чему можно было бы в теории привязаться на Специалисте, чтобы скорость игры была фиксированной при любой тактовой частоте CPU? Видимо, можно только вручную игру настраивать при первом запуске.

ivagor
19.10.2020, 14:17
Для классического специалиста оригинальных идей у меня нет. Можно сделать примерно аналогично эксолону - оценить сколько тактов кушает каждый активный объект и тормозить (или не тормозить) соответственно. Для MX и SP580 (и еще какого-то, вроде микрон-2, надо уточнить) можно тормозить по таймеру, но т.к. ВИ53 очень любят не ставить в реалы, то желательно детектить наличие таймера и если его нет, то переключаться на предыдущий вариант. А вот в своем эрике SYR-ALEX добавил не только восьмицвет, но и прерывания (в emu не поддерживаются, поэтому опять проблема с отладкой).

Чтобы два раза не вставать сразу спрошу - у тебя самого чит нормально включается? Возможно это зависит от клавиатуры, моя столько клавиш сразу не переваривает, пришлось включить через отладчик.

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

Пропустил часть мысли - да, если таймера и прерываний нет, то разве что выбирать частоту проца в меню.

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

Еще один момент. Не разбирался как SYR-ALEX сделал в сябре с мапером MX и процессорной платой с нестандартной (для специалистов) частотой (2.5, 2.76), возможно там и таймер тактируется нестандартной частотой.

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

Ну и еще один вариант детекта. Кое-кого (например эрик, SP580) можно детектить по сигнатурам в пзу, хотя это не очень здорово.

CityAceE
19.10.2020, 20:57
Чтобы два раза не вставать сразу спрошу - у тебя самого чит нормально включается? Возможно это зависит от клавиатуры, моя столько клавиш сразу не переваривает, пришлось включить через отладчик.
Да, безусловно, у меня всё работает. Причём мне пришлось помучиться, чтобы это три ряда клавиш друг за другом опрашивались и нормально отрабатывались. Но в итоге всё работает стабильно. Проверено и на USB-клавиатуре, и на ноутбучной. Если что, то я всё отлаживаю под Emu80, а я знаю, что ты любишь emu. Может ещё от эмулятора зависит? Для меня у Emu80 есть жирнющий плюс - это его отладчик. Хотя если бы там была возможность ставить breakpoint'ы ещё хотя бы по содержимому памяти, то это сэкономило бы мне уйму времени.


Для классического специалиста оригинальных идей у меня нет.
Грустно, что ты подтвердил мои предположения. Автор Специалиста вряд ли мог думать, что процессор в его компьютере будет работать на другой частоте, а тем более, что туда будут ставить вообще другой процессор. И, конечно, привязываться к таймеру совсем не хотелось бы, так как таймер - это всё-таки больше экзотика, типа Z80 в качестве CPU. Тем удивительнее, что SYR-ALEX смог прогнать игру аж на двух клонах разных с таким процессором. Сигнатуры тоже не выход. Уж лучше, действительно, при старте запрашивать тип процессора и его часоту.

ivagor
20.10.2020, 05:59
Если что, то я всё отлаживаю под Emu80, а я знаю, что ты любишь emu. Может ещё от эмулятора зависит? Для меня у Emu80 есть жирнющий плюс - это его отладчик. Хотя если бы там была возможность ставить breakpoint'ы ещё хотя бы по содержимому памяти, то это сэкономило бы мне уйму времени.
Batty пробовал в emu, но для очистки совести потом попробовал нажать в (своем) тесте клавиатуры эту комбинацию клавиш в emu80 - результат аналогичный. Скорее всего дело именно в клавиатуре.
Мне emu как раз нравится отладчиком (не только, но это один из главных плюсов). В нем есть бряки по доступу к памяти и портам, в emu80 их вроде не было, но там свои фишки.


Уж лучше, действительно, при старте запрашивать тип процессора и его часоту.
Если подумать о реалах, то проблемы почти и нет (как, увы, и реалов с z80). Штатный опрос клавиатуры не приспособлен под большие частоты, поэтому вполне можно ориентироваться на 2-2.5 МГц. Единственное исключение - эрик SYR-ALEXа, но он такой (с поддержкой 8c) один и его можно однозначно определить по поддержке прерываний. И его "эффективная" частота (хотя я и не люблю этот термин) примерно 3.2-3.3 МГц, т.е. не очень далеко от 2.5.

ivagor
20.10.2020, 09:45
Пропустил при первом прочтении. Если с частотой действительно сложно, то с определением типа процессора нет никаких проблем.

SYR-ALEX
20.10.2020, 12:09
Что то Вы забыли о МХ2 , он тоже может работать на Z80.

ivagor
20.10.2020, 14:07
Просто я не помню, чтобы кто-то из собравших MX2 писал, что у него вариант с z80

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

Смутно припоминаю, что вроде fifan писал что-то про z80. Или что он собрал какой-то вариант специалиста с z80, или что не видит в этом смысла или что собрал и не видит смысла. Извините, если перепутал.

OrionExt
20.10.2020, 15:58
Ну, это круто, если это перерастет из скриншота.

З.ы. Беда. Беда. Строили Ракету, Да не Достроили. И ХОРОШО, ...

p.s 2 Понятно. С Z80 развлекаемся. В целом Орион-128(Z80) с экраном в 32кб нормально себя чувствовал на игрухах ZX:v2_devil:

zx_
17.01.2021, 22:28
Batty для Ориона был есть
http://zvzd3d.ru/Orion128/Orion128Main.html#YaBATTY

если под 8080 - мож чем поможет

CityAceE
17.01.2021, 22:55
Batty для Ориона был есть
Это на та Batty. Я ранее в теме про неё писал.

CityAceE
12.03.2024, 10:40
Выложил свои наработки на GitHub (https://github.com/CityAceE/BATTY_specialist).