PDA

Просмотр полной версии : "Revival of life" для YRGB 2020



metamorpho
16.09.2020, 20:29
Привет всем!!

Уже примерно недели 2-3 делаю свою первую игру для ZX Spectrum 48.
Если успею то буду с этой игрой участвовать в "Yandex Retro Games Battle 2020" :)
Однако осталось 60 дней.

Название игры (возможно изменится): "Revival of life" ("Возрождение жизни")

Это будет платформер с плавным скроллингом (на один пиксель) во все стороны.
На данный момент некая основа сделана (видео прилагается).
Дальше планирую оформить боковые рамки, а также прикрутить "гравитацию" для главного героя.

В этой теме буду отражать прогресс создания игры (хотя бы раз в неделю).
Также наверняка у меня возникнут некоторые вопросы, которые буду здесь спрашивать у знатоков ZX Spectrum.

Для создания игры использую:
набор текста - Visual Studio Code
ассемблер - sjasm
эмулятор - UnrealSpeccy
конвертация картинок для вставки в ассемблерный текст - ZXPaintbrush
для музыки планирую использовать - Beepola


https://youtu.be/jinQAU6ydj8

Bedazzle
17.09.2020, 09:34
Неплохое начало!

DenisGrachev
20.09.2020, 15:52
Клёвый старт. Keep a good work!

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

metamorpho
20.09.2020, 17:50
......... лучше тестить не только в анриле. Он не умеет медленную память классики, могут потом нежданные тормоза вылезти!

Спасибо за совет!!

metamorpho
29.09.2020, 22:42
Сделана рамка экрана. Сделал плавное появление элементов со всех краёв экрана.
Сделана гравитация и "полёт" главного героя.


https://youtu.be/ul3U5AF6YGs

ALKO
01.10.2020, 12:42
Хороший двежок.
Когда персонаж шагает, кого-то он мне напоминает...кого-то дендишного.

char
01.10.2020, 16:32
когда с пропеллером - пусть ручками махает, а то слишком статичный )

Bedazzle
01.10.2020, 17:17
когда с пропеллером - пусть ручками махает, а то слишком статичный )

Ещё можно глазами зыркать, или моргать. :)

metamorpho
01.10.2020, 20:25
когда с пропеллером - пусть ручками махает, а то слишком статичный )


Ещё можно глазами зыркать, или моргать. :)

char, Bedazzle спасибо за идею, попробую сделать.

metamorpho
02.11.2020, 13:09
Поделитесь у кого-нибудь были проблемы с Visual Studio Code ?
Например у меня проблема: отключаю ничего не значащую команду - всё работает. Включаю ничего не значащую команду - работает с ошибкой.

Lethargeek
02.11.2020, 13:16
даже если сама данная команда ничего практического не делает, её включение может, например, код или структуры данных сдвигать и портить

metamorpho
02.11.2020, 13:17
В чём может быть проблема вот такой записи:

ld a,69
ld (hromokey1bas+1),a
.......
.........
hromokey1bas:
ld a,71

Black Cat / Era CG
02.11.2020, 13:21
а ошибка-то какая? и что в качестве асма? Pasmo что ли?

metamorpho
02.11.2020, 13:27
даже если сама данная команда ничего практического не делает, её включение может, например, код или структуры данных сдвигать и портить


Если у меня нет привязки к определённым ячейкам памяти, то как может испортиться код или структыра данных - они же по идее динамически должны настраиваться каждый раз по новому ?

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


а ошибка-то какая? и что в качестве асма? Pasmo что ли?

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

sjasm

Black Cat / Era CG
02.11.2020, 13:36
Ну тогда у вас где-то в логике просто ошибка. Значит не такая она и незначащая, эта ld a,69... среда тут точно ни при чем.

Lethargeek
02.11.2020, 13:44
Если у меня нет привязки к определённым ячейкам памяти, то как может испортиться код или структыра данных - они же по идее динамически должны настраиваться каждый раз по новому ?
например, где-нибудь inc l вместо inc hl попадает на границу куска 256 байт

а вообще сделай снап перед проблемным моментом, влепи бряки и проверь трассировкой

metamorpho
02.11.2020, 16:18
push hl
;ld a,68
pop hl
--------->работает нормально

push hl
ld a,68
pop hl
--------->работает неправильно

;push hl
ld a,68
;pop hl
--------->работает нормально

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

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

Нашёл в чём проблема, но не понял почему она возникает. Проблема насколько я понял в нехватке памяти.
Я отключил некоторую графику (данные в формате db 1,2,3,4...) и в итоге всё заработало как нужно.
При подключении графики программа работает неправильно.

Не пойму почему так происходит, поскольку запас памяти у меня ещё есть.

Моя программа определяется так:
org 24500
ld sp,61440 ; (#F000)
.......

После трансляции выдаёт следующие данные:

> start: 0x5FB4, 24500 bytes (начало кода)
> total: 0x5E0F, 24079 bytes (всего код занимает)

Выходит что:
#BDC3 (48579) - верхняя точка программы

----------------------------------------------------------
Далее пришла идея поменять в конце кода местами include

было:
include "include\rumdata.asm" ; информационные данные и графика
include "include\rumdata2.asm" ; информационные данные и графика
include "include\podprog.asm" ; различные подпрограммы (код)

стало:
include "include\podprog.asm" ; различные подпрограммы (код)
include "include\rumdata.asm" ; информационные данные и графика
include "include\rumdata2.asm" ; информационные данные и графика

И снова я подключил всю графику.
И всё заработало.

Однако есть подозрения что теперь на "края" данных "заползает" то что портило "края" кода подпрограммы. Но пока этого не видно.

Bedazzle
02.11.2020, 16:29
И снова я подключил всю графику.
И всё заработало.

Однако есть подозрения что теперь на "края" данных "заползает" то что портило "края" кода подпрограммы. Но пока этого не видно.

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

goodboy
02.11.2020, 17:36
org 24500
ld sp,61440 ; (#F000)

стек обычно ставят перед основной программой sp=24500; так ты точно будешь уверен что он не наползёт на данные

metamorpho
02.11.2020, 17:50
Я нашёл причину. Оказывается "пересечение интересов" происходило по вине программы (про которую я забыл) построения таблицы для векторов прерываний, которая строит их с адреса #be00 (+256), а верхняя точка моей программы #BDC3, отсюда и проблемы были.



стек обычно ставят перед основной программой sp=24500; так ты точно будешь уверен что он не наползёт на данные

goodboy, спасибо за совет!!

goodboy
02.11.2020, 18:03
только учти если стек устанавливаем (например в загрузчике) в бейсике, то надо ставить на 1 меньше.
в твоём случае clear 24499:load""code

ssmirnov
13.11.2020, 13:55
Хорошее начало! Респект!
Буду с интересом следить за прогрессом. :)

Игра планируется 48К или 128К ?
По какому принципу реализовано обрезание тайлов по бокам, где они, по идее, должны наезжать на рамку?

metamorpho
14.11.2020, 21:25
Хорошее начало! Респект! Буду с интересом следить за прогрессом. :)
Игра планируется 48К или 128К ? По какому принципу реализовано обрезание тайлов по бокам, где они, по идее, должны наезжать на рамку?

Спасибо!!
Игра делается на 48К
"Обрезание тайлов по бокам" - каждый блок нарисован со сдвигом на N точек и выводится рядом с рамкой (получается что на рамку не наезжает).
Метод не самый интересный т.к. на каждый блок уходит много памяти для графики, но это более менее быстро выводится.

metamorpho
24.11.2020, 15:10
Вот некоторые итоги разработки моей первой (эксперементальной) игры для ZX Spectrum 48.
По замыслу игры главному герою (частичка-лучик солнца) нужно было "разморозить" скованные льдом поляны (платформы).
Это должно выражаться в изменении цвета платформы после прохождения по ним персонажа.
Цель разработки было поэксперементировать с плавным (сдвиг на 1 точку) скроллингом для ZX Spectrum 48.
Хотелось выяснить возможную скорость скроллинга, а также как будет смотреться попиксельный скроллинг при разном цвете рядом стоящих объектов.
Уже до разработки знающие этот вопрос подсказали, что если цвет разный, то при скроллинге всё будет смотреться не очень.
Что собственно и подтвердилось на практике (смотрите видео).

О скорости - код написаный мной не очень оптимизирован, поэтому если на экране много платформ, то всё достаточно сильно замедлялось (см. видео).
О памяти - поскольку использовался метод в котором графика полностью подготовленная (уже со сдвигом влево и вправо на N точек), то память быстро исчезала при добавлении новых объектов. Таким образом в игру получиться включить только очень ограниченное число объектов,
что (для ZX Spectrum 48) сильно сужает разнообразие геймплея и многообразие окружающего мира....

Также хотелось (если бы результат создания игры был более успешным) успеть на конкурс "Yandex Retro Games Battle 2020". Но похоже я слишком поздно начал делать эту игру, поскольку очень много нового пришлось осваивать и разрабатывать (время уходило не туда). Ну да ладно, на следующий конкурс (если он будет) подойду более основательно.

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


https://www.youtube.com/watch?v=PrpLT2NIFIs&feature=youtu.be

NEO SPECTRUMAN
24.11.2020, 15:30
. Ну да ладно, на следующий конкурс (если он будет) подойду более основательно.
так еще есть один унылый конкурс который идет прямо сейчас
но там уже тоже сроки подходят к концу

https://zx-pk.ru/threads/31212-tvoya-igra-6.html
неделя осталась

metamorpho
24.11.2020, 15:44
Да, неделька маловато....вот бы ещё месяц в запасе был, тогда можно было бы успеть.

Кстати странно - насколько я понял довольно много делают для Спектрума игр, а тут аж два конкурса, а желающих поучаствовать очень мало.
В чём секрет ситуации ?

jerri
24.11.2020, 16:10
Да, неделька маловато....вот бы ещё месяц в запасе был, тогда можно было бы успеть.

Кстати странно - насколько я понял довольно много делают для Спектрума игр, а тут аж два конкурса, а желающих поучаствовать очень мало.
В чём секрет ситуации ?

Просто посмотри прошлогодние итоги конкурса.

goodboy
24.11.2020, 17:12
аж два конкурса, а желающих поучаствовать очень мало. В чём секрет ситуации ?
а откуда такая статистика ?

jerri
24.11.2020, 18:11
а откуда такая статистика ?

ну я например знаю что 3 человека участвовавших в прошлом году в этом не учавствуют

Stl75
24.11.2020, 18:28
Кстати странно - насколько я понял довольно много делают для Спектрума игр, а тут аж два конкурса, а желающих поучаствовать очень мало.
В чём секрет ситуации ?

На Спектруме было много западных игр...
Многие игры не разрабатывали, а ломали готовое...

А то, что делали сами - это вне критики???
На vtrd.in - много поделок есть...

metamorpho
24.11.2020, 18:50
а откуда такая статистика ?

Два конкурса с хорошими призами - "Твоя игра 6" и "Yandex Retro Games Battle 2020"

Заявленные игры на "Yandex Retro Games Battle 2020" (если я правильно понимаю) вот здесь
https://idpixel.ru/news/retrogamesbattle2020/
Их всего шесть, не считая моей т.к. я не успел сделать свою.

Заявленные игры на "Твоя игра 6" вот здесь (если я правильно понимаю)
http://ti6.club/%D0%BF%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D 1%81%D1%82%D0%B8/
Трудно понять сколько их, но если считать то что видно, то совсем немного.

Исходя из этой инфомации, на мой взгляд, довольно мало участников.

NEO SPECTRUMAN
24.11.2020, 19:08
Заявленные игры на "Yandex Retro Games Battle 2020" (если я правильно понимаю) вот здесь
ну это наверно кто сами захотели засветить раньше времени или уже было готовое

а так согласно русскому менталитету
80% должны прислать поделия за 15 минут до дедлайна :v2_lol:
(ну а там еще и в последний день и всякие приключения происходят
и комп зависает и свет тушат и бесплатная софтварь, который ты планировал что то быстренько доделать, становится ВНЕЗАПНО триальной и перестает работать итд итп)

Dwa83
25.11.2020, 15:55
Исходя из этой инфомации, на мой взгляд, довольно мало участников.
Не факт, я свою сдал, и на идпиксель отдал инфу - молчёк. Судя по цитате:

Новостной поток не иссякает ни на сутки, а времени и сил хватает далеко не на всё. Для развития сайту нужны новые авторы.
Видимо им не хватает времени.

ssmirnov
26.11.2020, 18:23
Как дела с игрой? :)

metamorpho
26.11.2020, 19:50
Как дела с игрой? :)

см. пост #24

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

michellekg
27.11.2020, 15:12
Не факт, я свою сдал, и на идпиксель отдал инфу - молчёк. Судя по цитате:
О какой игре речь? Про всё, что мне присылали, я писал. Мог что-то замотаться и забыть, но вроде не.

ssmirnov
28.11.2020, 01:26
Да, всё верно! Надо будет искать баланс между скоростью работы кода, расходом памяти, и количеством хранящейся в памяти "сдвинутой" графики. Либо универсально и медленно, либо максимально быстро и неэффективно по памяти. Думаю, для каждой игры можно найти золотую серединку.

Еще мысль: подобные движки могут (должны) учитывать ограничения и особенности отдельно взятой игры. И для другой игры этот же движок может не подойти. Таким образом, можно написать (цитата) насколько возможно быстрый и экономный скроллинг. А потом можно будет сделать еще быстрее, если учесть ограничения геймплея, и тем самым где-то упроситить/оптимизировать код.

Пример: если шаг вывода спрайта по вертикали сделать 2px вместо 1px, это может ускорить процедуру вывода спрайта. За счёт того, что down_hl будет выполняться только по чётным строкам. А по нечётным - inc h, в лоб.
Другой пример: если есть склеенные тайлы/спрайты, то для их вывода можно написать отдельную процедуру, которая напечатает в экран сразу оба. За счёт этого экономится кол-во вызовов down_hl, ровно по количеству таких тайлов/спрайтов.

metamorpho
28.11.2020, 14:01
Да, всё верно! Надо будет искать баланс ....
Еще мысль: подобные движки могут (должны) учитывать ограничения и особенности отдельно взятой игры....
Пример: если шаг вывода спрайта по вертикали сделать 2px вместо 1px, это может ускорить процедуру вывода спрайта. За счёт того, что down_hl будет выполняться только по чётным строкам. А по нечётным - inc h, в лоб.
Другой пример: если есть склеенные тайлы/спрайты, то для их вывода можно написать отдельную процедуру, которая напечатает в экран сразу оба. За счёт этого экономится кол-во вызовов down_hl, ровно по количеству таких тайлов/спрайтов.

Спасибо, за полезные советы !!

ssmirnov
04.12.2020, 16:37
Спасибо, за полезные советы !!

Я тоже сейчас взялся переделывать и рефакторить свой движок.

У меня две основные идеи.
Первая в том, что скроллинг только горизонтальный и только вправо.
И вторая: всё должно укладываться в 1 фрейм. Это максимум 25 единичных тайлов/блоков или около 90 тайлов/блоков, связанных в цепочки одинаковых.

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

ssmirnov
19.01.2021, 22:16
Привет!
Как дела с игрой? :)

metamorpho
26.01.2021, 20:50
Привет!
Как дела с игрой? :)

Привет!!

После выхода "Wonderful Dizzy" и "Delta's Shadow" появилось вдохновение написать нечто подобное.
Поэтому на данный момент проект - создания игры с попиксельным скроллингом - временно заморожен (но в планах есть возвращение к этом проекту).

Сейчас же думаю что создавать. Шедевр в стиле Dizzy или же шедевр в космическо-футуристическом стиле ?

jerri
26.01.2021, 22:18
metamorpho, Пищи тетрис, не заморачивайся..

metamorpho
26.01.2021, 22:24
metamorpho, Пищи тетрис, не заморачивайся..

jerri, если это совет, то обоснуй..
если это юмор, то я его не понял..
если это что-то другое, то зря..

jerri
26.01.2021, 23:56
jerri, если это совет, то обоснуй..
если это юмор, то я его не понял..
если это что-то другое, то зря..

Я видел с каким упорством ты писал игру для вектора. Получилось очень неплохо.
Я видел как ты писал "Revival of life" - колобок с пропеллером это весьма оригинально.

А сейчас ты спрашиваешь у коммунити совет - что тебе писать. Совершенно напрасно.
Здесь на двух форумчан по три мнения.

Если посмотреть отечественные игры 90х годов то можно увидеть десятки простейших игр.
Вирусы, Тетрисы, Арканоиды, Колорбалсы. Разные люди писали их на спек пачками.
Ктото на этом и остановился. Ктото развивался и писал более серьезные проекты.

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

Вот я и говорю возьми проект попроще.
Или доработай идею.

metamorpho
27.01.2021, 20:25
jerri, я понял твою мысль.
Вопрос про то какую игру мне делать - это я как бы сам себе задаю этот вопрос, а не кому-либо. Надо мне было более правильно написать эту мысль. :)
На Спектруме достаточно много ограничений, а попиксельный скроллинг в игре это очень большие заморочки и дополнительные ограничения - но это не отменяет мой план написать такую игру, т.к. мне хочется создать такой код.
Но на данный момент мне хочется в "сжатые" сроки (2-3 месяца) полностью сделать качественную игру, поэтому я и выбираю то что попроще, а именно игра без попиксельного скроллинга (в стиле Dizzy или космическо-футуристическом стиле). Вскоре опубликую новую тему и эксперимент начнётся.