Tagged: видео

23
Мар
2024

Если где-то закрывается дверь, значит это кому-нибудь не нужно!

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

Тут начинаются (как обычно) ограничения.

  1. В контроллере AZBK можно вывести на экран любую область его памяти, просто указав «экран начинается с такой-то страницы».
  2. В контроллере AZBK максимальная длина строки для экранного отображения — 512 байт. Для используего в Дейве видеорежима (256х192,  256 цветов) это байт на точку. Значит, рисовать «полотно» можно только кусками 512х512, а не каким-то там гигантским холстом.
  3. Скроллинг окна есть аппаратный, как горизонтальный так и вертикальный. Это прекрасно. Но он сворачивает окно в кольцо. Т.е., если мы двигаем окно влево, то справа вылезает начало этого же самого окна. Хорошие новости — размер окна может быть 512х512, а видимая часть у нас 256х192. Значит, мы можем протянуть 256 «новых» точек рулоном из невидимой части. Но после этого все равно в окно вползет левый край этого же, пусть и большого, окна.

Каким же образом двигаться по большому холсту? Можно в невидимой части дорисовывать новую обстановку. Но Макс (MaxiolLtd) предложил идею покруче: «У нас же море памяти! Можно сделать кучу страниц и оперировать ими!».

Т.е. мы делаем две страницы 512х512 таким образом, что вторая страница ПОВТОРЯЕТ половину первой. И тогда, когда горизонтальным скроллом мы втянем влево эти правые 256 точек, мы может сбросить счетчик рулона на ноль, а начало экрана для отображения переключить уже на вторую страницу 512х512. Ведь у нас эти два куска по 256 точек полностью совпадают. И таким макаром двигать можно бесконечно — половину вкручиваем, перключаемся на следующую страницу. Расход памяти дикий, олды бьются в истерике «это не наш метод», ну да и пофиг, развлекаемся 🙂

Коряво нарисую как выглядит «мегаэкран» в моем ремейке Дейва:

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

Скролл заработал весело, но чуть позже стало понятно, что везде есть подводные камни — если на пересекающихся частях нужно что-то изменить (открыли дверь, к примеру), то ведь и скопировать теперь надо эти изменения на ВСЕ пересекающиеся части. Итого может быть от 1 до 4 копий одного места.

Вот тут и начались развлечения с дверями. Дело в том, что эти виртуальные видеостраницы 512х512 тоже состоят из страниц, которые имеют фиксированный размер 10000(8) байт. Блиттер, конечно, лихо рисует на них, ему только адреса подкидывай. 24-битные. Но надо еще и все «соседские отношения» помнить — кто на ком стоял. Причем, размеры у лабиринтов у всех разные, окошек 512х512 может быть разное количество и по вертикали и по горизонтали. Поэтому двери у меня два или три дня появлялись непонятно где (неверно считались смещения на соседних страницах), потом вроде открываешь дверь, идешь от нее, а она у тебя за спиной закрывается! Страница включилась с неоткрытым вариантом. Ну и все в таком духе.

Записал видеоролик, залил в ютуб и потом там заметил, что на 1:31 там мелькает снова закрытая дверь! Начал думать как это снова могло произойти и понял, что не учел того, что дверь имеет размеры 2х3 тайла и при этом может стоять на границе аж четырех страниц! Т.е. левая часть в одном окне, правая часть в другом, а нижняя половина еще черт знает где.

Но сегодня я их добил! Теперь можно в эти шкафы что-то и поставить. Ролик исправлять уже не стал, пусть останется для истории:

 

15
Мар
2024

Уже похоже!

Недавно в эмуле GIDа появились «Точки остановки с условиями» — можно задать условие остановки, когда, к примеру, произойдет обращение к интересующей ячейке памяти по чтению или записи (на выбор). Крутая штука! Благодаря ей я нашел сейчас причину одного из глюков — время от времени скролл экрана уезжал неведомо куда. Оказалось, причина была в неверном развороте Дейва в падении. Эта процедура была расчитана на первоначальный вариант падения, а этих вариантов уже стало четыре. Как обычно возникает вопрос — как оно вообще работало? 🙂

GIDу огромное спасибо за шикарный инструмент разработки и отладки!

Итак, я добавил проверки на горизонтальные препятствия, коррекцию «полетов» при столкновении с этими препятствиями. Теперь Дейв уже не проходит сквозь стены и не пролетает. Поправил свойства некоторых объектов. Вообще, прикольный механизм придумали Ромеро с Кармаком, конечно, для обработки обстановки — у каждого тайла есть свойства «можно пройти объект справо налево», «можно пройти объект сверху вниз» и т.д. Обработка столкновений проще при этом. Но зато приходится эти свойства обдумывать и назначать.

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

13
Мар
2024

Потолки и стены

Дейв научился определять потолок. Ну и традиционное развлечение — найди край препятствия, ведь персонаж должен стоять на ящике ногами, а не краем спрайта, где ружье торчит. Квадратно-гнездовой метод тут не годится.

26
Фев
2024

Дейв научился ходить!

Сегодня Дейв перешел на новый уровень — это уже не разрозненные демки, а заработавший движок. Первые движения — разворот на месте и бег вправо-влево. Управление обрабатывается от джойстика и клавы. После того, как Дейв побежал по экрану, я попробовал добавить и горизонтальный скроллинг. Он заработал, но нужно регулировать зону «люфта», а также хитро менять смещения спрайтов Дейва, когда двигается слой фона, чтобы этот самый Дейв не дергался. Но главное, что он теперь управляется и готов учиться новым движениям!

 

25
Дек
2023

Еще немного, еще чуть-чуть…

Исправил кучу багов:

  • исправлен тот самый противный баг с помиранием во время удара
  • исправлен глюк с Призраком на границе экрана
  • растущая стена переставала расти, если Балбес успевал перейти в соседнее окно
  • донастроен артефакт Часы
  • обнаружено единственное на всю игру место, где можно залезть по канату, который кончается на верхней границе окна, теперь это работает

Добавлено:

  • демо и заставка теперь прерывается и с помощью джойстика
  • поддержка MKDOS
12
Дек
2023

Вот так начнешь рассматривать старинные портреты…

Вот так начнешь рассматривать старинные портреты… Оказывается, идею с выводом водопадов не постоянно, а путем однократного вывода и последующей анимацией потока только за счет переключения страниц экрана я так и не реализовал! Сегодня начал борьбу за общую оптимизацию и обнаружил это дело. Реализовал старую задумку, теперь водопады никак не влияют на общую скорость:

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

 

07
Дек
2023

Заставка+демо

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

19
Ноя
2023

Последние подарочки

Победил баги сегодня:

  • BUG: добавить звук огня в подвальных лабиринтах — добавил
  • BUG: подарки с жизнями и опытом не работают — теперь все работает, можно брать «мешки» с бонусами в виде очков, жизни, опыта
  • BUG: Балбес проваливается в 18-03, во втором через флаг в земле? — исправлено

Осталось:

BUG: кость + пуля = порча фона — это мне видится самым муторным
BUG: при отключенной музыке нет паузы после game over
BUG: нота сзади верхняя пролетела без урона
BUG: если Балбес получает толчок во время удара, то проваливается
BUG: мешок давит по новым координатам
BUG: скелет убит под землей?? boom был ниже!

 

18
Ноя
2023

Снова Тэд из будущего

Очередной прикол из серии «пусть об этом думает Тэд из будущего» — оказывается, после определения того, что Шериф верхом на глыбе доехал до потолка и должен быть раздавлен…. ничего не делается. Пришлось доделать.

Сегодня исправлено:

+BUG: шерифа давит мешком об потолок, но не давит. Потому что там и нет действия!
+BUG: скелет не запрыгивает? сцена 11-02, начало GOON DOCKS
+BUG: наискосок скелет летит странно
+BUG: увеличить угол нот, увеличить их скорость
+BUG: ноты при вопле выводить ближе
+BUG: скелет после появления в воздухе не сразу проваливается

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

Что осталось исправить:

BUG: Балбес проваливается в 18-03, во втором черем флаг в земле?
BUG: кость + пуля = порча фона
BUG: подарки с жизнями и опытом не работают
BUG: при отключенной музыке нет паузы после game over
BUG: нота сзади верхняя пролетела без урона
BUG: если Балбес получает толчок во время удара, то проваливается
BUG: добавить звук огня в подвальных лабиринтах
BUG: мешок иногда давит по новым координатам
BUG: скелет убит под землей?? boom был ниже!