Author: grf

08
Дек
2020

Да будет звук!

Задолбавшись обучать принца скучной науке падать в ямы и не лезть на стены, я решил отвлечься и попробовать добавить фоновое воспроизведение музыки на музыкальном процессоре AY-3-8910. Добрые люди на канале БКшников снабдили меня инфой и всякими исходниками проигрывателей, но застрял я на процессе загрузки этого самого файла с музыкой в память СМК-512. Все файлы данных принца читались отлично на нулевую страницу СМК, а вот музыку надо было уже грузить на другую. И тут при загрузке стало все виснуть, заполнять память и экран всяким мусором. Причем каждый раз приколы были разные. Пару раз даже загрузилось! Я уже и на эмулятор грешил, и на прошивку СМК и совместимость режимов памяти с БК10/11. оказалось все проще — грузить данные с винта можно только в нулевую страницу, потому что на ней и сам контроллер HDD хранит свою служебную область. А подключаешь другие страницы — все накрывается медным тазом. Так что надо грузить данные в какую-то БКшную область памяти,  а потом уже вливать уже в СМК.

Поборов проблему с СМК, я начал пытаться воспроизвести в принце музыку. Сначала, конечно, принц издавал нечленораздельные звуки, но Владимир ‘KUVO’ Кутяков подсказал в чем проблема и помог встроить свой блок воспроизведения, за что ему огромное спасибо!

Вопрос «насколько затормозится принц, если в фоне играть музыку», который периодически меня мучал, теперь прояснен 🙂 Можно возвращаться к всяким пилам, ямам и шипам…

07
Дек
2020

И животноводство!

Купил я как-то новые джинсы. Синие, классные. На рынке, в лихие 90-е. Оторвал от них всякие там бирки, нацепил и довольный пошел домой. Дело было часов в 11 утра, проходя мимо места работы Евгения Пашигорова, я решил зайти к нему, узнать новости из мира БК и попить чаю. Женя был на работе. Как всегда крутил ус, пил чай и делал вид, что работает как минимум над запуском ракеты с телетайпом на Марс, бурча под нос «Этой отверткой только жаб стрекать». Это его любимая фраза по поводу разных некачественных предметов, но чаще всего ее удостаивались отвертки и кусачки. Что такое «стрекать», я так и не выяснил, но однажды я его любимыми кусачками перекусил что-то типа мелкого гвоздя и узнал много нового о разных процессах, грозивших не только жабам.

Но к делу это не относится. В коридоре у него стоял велосипед «Турист», с системой переключения передач — круть. Женя на нем на работу ездил. Я же в последний раз катался на велике в детстве и захотелось мне заценить правдивость теории о том, что разучиться кататься на велосипеде невозможно.

Велосипед вынесли на улицу, я оседлал его, успешно тронулся и резво набрал скорость давя на все гашетки. заезд был недолгим — через 30 метров навстречу мне выехал уазик. Я попытался тормозить педалями, как в детстве — фиг там. Нажал на все ручки тормозов, что попались и совершил перелет через руль. Поднявшись с земли, я оценил потери — дыра на новых джинсах в районе колена и кровища на самом колене. Женя, конечно, угорал.

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

 

06
Дек
2020

Маленький шаг для принца…

Сегодня сделал несколько вещей:

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

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

06
Дек
2020

Продолжение начала начал

Мы разделили задачи — Женя начал писать редактор лабиринтов и движок принца, а я начал рисовать всю графику, которая была нужна для проекта. Рисовать приходилось вручную, поточечно. Никаких переносов графики — количество цветов и разрешение экрана не позволяли это сделать.
Как выглядело рисование в V003? Никаких тебе мышей — только клавиатура. Двигаешь курсор клавишами управления курсором, жмешь номер цвета 1, 2, 3 или 4. Ставится точка красного, зеленого, синего или черного цвета. И вот так рисуешь весь спрайт. Если ты где-то ошибся или вообще стер все — никаких Undo нет, рисуй заново. Если очистил буфер с запомненным спрайтом — тоже рисуй заново. Нарисовал спрайт, но оказалось, что надо сдвинуть его на одну точку влево-вправо для того, чтобы попал на границу байта? Ну, вы уже поняли…

Нарисовать спрайты это только полдела. Надо собрать из них движения. К примеру, принц прыгает через яму с места — это одно движение? Нет, это два движения: «начало прыжка и полет» и «приземление». Почему именно два? Потому что итог прыжка может быть разный — если яма небольшая, то принц приземляется на ноги. Если яма большая — он может в конце прыжка провалиться и зацепиться руками за край плиты. Если очень большая — вообще рухнет вниз. Еще в процессе прыжка его может запилить пила, уколоть стражник, кирпич может внезапно остановить его, если принц решил прыгнуть лбом в стену. Т.е. финалы могут быть разные, хотя начало всегда одно. Все эти финалы должны органично пристыковаться к началу. Значит, надо найти такой момент в движении, где можно его разделить на начало и конец. Автор этим заморачивался глобально, но нам было проще — мы могли это просто вычислить, заставляя принца прыгать туда-сюда и нажимая заветный стоп-кадр.
После того, как все спрайты готовы и движение изучено, нужно подобрать все смещения между спрайтами при выводе. Сначала я делал это вручную, выводя спрайты и записывая в тетрадку кучи цифр. Когда меня забрали в армию и этим продолжил заниматься Женя, он написал для этого специальную утилиту ASSEM, куда можно было загрузить спрайты и двигать каждый из них, проигрывая движение снова и снова. Когда движение начинало выглядеть органично — выгружалась готовая таблица.

Были, конечно, ошибки. Вот недавно я обнаружил, что одно из самых первых движений ‘начало бега’ надо разделить на два, чтобы был возможен короткий пробег и сразу остановка. Такие ошибки обнаруживались регулярно и приходилось все спрайты этого движения собирать заново в ДВА движения. Занятие весьма нудное. Но когда я пару лет назад прочитал книгу Jordan Mechner «The Making of Prince of Persia», я понял, что у него это был вообще глобальный треш))

Я нарисовал все спрайты обстановки, а Женя написал редактор лабиринтов. Потом я сделал почти все спрайты принца и поступил в институт. За отличную учебу меня забрали в армию, так что Женя пару лет занимался принцем один. За это время он собрал из нарисованных мной спрайтов движения и запустил принца в лабиринт. Когда я в мае или июне 94 года приехал в отпуск, он продемонстрировал мне принца, который бегал по лабиринту, прыгал, падал в ямы. Им можно было управлять, это не был мультик. Принц реагировал на команды и на обстановку. Это было офигенно. Нам показалось, что дело почти сделано, что это почти готовая игра)) Сейчас 2020 год, принц до сих пор не готов и вспоминать это смешно.

05
Дек
2020

Начало начал

С Евгением Пашигоровым я познакомился еще когда заканчивал школу. Я тогда писал первые программы на Бейсике, а он уже ваял на ассемблере. Он делал игру ‘Жизнь’ для БК0010. БКшка у него была с пленочной клавиатурой, я впервые такую увидел. У меня сначала БКшки своей не было, приходилось писать проги в кабинете информатики. Потом БК 0010-01 появилась и у нас с братом, благодаря родителям.

Какое-то время мы, конечно, рубились в игры. Но практически сразу начали писать программы, это было страшно интересно. Упершись в быстродействие Бейсика, начали учить ассемблер. Писали всякие каталогизаторы кассет, какие-то простые игрушки. Женя Пашигоров писал язык ЛОГО и всякие навороченные копировщики с повышенной скоростью записи.

Женя тогда работал инженером-электронщиком и легко разрабатывал всякие примочки для БК, тут же воплощая их в жизнь. Он подключил к БК телетайп, т.к. принтеров тогда доступных не было, а телетайпов у него на работе было море)) Так мы получили вывод текстов на печать. Оцифровка звука, модемы для обмена данными по телефонной линии, плата видеозахвата — чего он только не делал. И оно, что характерно, работало! Мне он напоминает Дока из трилогии «Назад в будущее», в том плане, что может сделать машину времени на транзисторах КТ315, наверное, а если добыть детали покруче… Он такой же седой, как Док)) Но Док слегка не в себе, а Женя всегда спокоен как танк, крутит ус и размышляет. Ему уже было лет 30, семья и дети, а я только закончил школу, работал оператором ЭВМ и носился с безумными идеями.

Одна такая идея (написать принца для БК) появилась после перехода на БК 11М и полного прохождения PC-версии этой игры. Я тогда даже и не подозревал, что Принц изначально был написан для Apple 2. Если бы знал — гораздо быстрее убедил бы Женю начать делать Принца для БК.
В версии для PC при нажатии клавиши ESC игра становится на паузу. Это очень удобно для изучения фаз анимации. Для начала я срисовал в тетрадку все фазы горящего факела. Потом нарисовал все эти фазы в БКшном графредакторе V003. Вообще-то он называется GRED, но на кассете исполняемый файл графредактора назывался V003, так и прижилось это название.
Я нарисовал фазы пламени, сделал из них демку горящего факела и увидел, что это хорошо. Потом добавил второй факел. Два факела горели отлично, но на пустом черном фоне смотрелись как-то странно. Показал эту демку Евгению. Особого впечатления на него это не произвело, по-моему.

Я решил дорисовать обстановку для «интерьера». Срисовал в тетрадку плиту, арку, кирпич, набрал их на БК. Попытался этими спрайтами нарисовать один экран подземелья и увидел, что все получается сплюснутым по вертикали. Разрешение экрана на БК другое и это сказалось. Пришлось спрайты изменить: сжать по горизонтали и растянуть по вертикали. Но автоматически сделать это не вышло — на плите получился кривой орнамент. Пришлось нарисовать элементы самостоятельно, но с сохранением похожести.

Теперь факелы горели в родной обстановке и смотрелось это интересней. Женя посмотрел, покрутил ус, как обычно, сказал что-то типа «ну, прикольно, но где принц?». Я решил срисовать какое-то движение принца и вставить его в эту демку. С помощью волшебной кнопки ESC фазы бега принца были срисованы в тетрадку и набраны в V003. В итоге в демке появился принц, который пробегал через экран слева направо. И был он тоже сплюснутым. Пришлось вручную исправлять все фазы принца, чтобы он не выглядел мультяшным героем, пострадавшим от промышленного пресса.

Таким образом, я срисовывал все новые движения (прыжок с места, висение на плите с качанием и залезанием наверх), делал из них демки и показывал Жене. Сначала он говорил, что я маньяк и смеялся. Потом крутил свой ус все более задумчиво и в какой-то момент критическая масса сработала — он прикинул объем спрайтов принца,  которые я уже сделал, и увидел, что в память БК 11М их не так уж нереально вместить. Тут уже пошло активное обсуждение как можно сэкономить память, как можно реализовать вывод на экран немигающих спрайтов… И лед тронулся!

05
Дек
2020

Двигаемся!

Много чего сегодня сделал:

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

Что осталось сделать из обработки препятствий:

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

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

Что вообще осталось доделать:

  • новый формат данных о стражниках, т.к. все-таки надо изначально задавать в какую сторону смотрит каждый стражник
  • в 8-м лабиринте сразу ДВА разных по интеллекту стражника, а пока что подразумевался только один алгоритм боя на лабиринт
  • в третьем лабиринте скелет вернуть на место и сделать все, что связано с его подлым возникновением
  • распилить движение начала бега на два, т.к. принц в оригинале может остановиться быстрей, чем у нас
  • сделать «левитацию»
  • реализовать кровищу на пиле?
  • перерисовать спрайты дворцов для другой палитры
  • звук на AY
  • исправить маски обломков и арки

Глобальные доработки, которые можно сделать:

  • сделать маски ко всем спрайтам принца и стражников, перестать их вычислять на лету и надеяться на ускорение
  • грузить сразу все спрайты в память СМК и больше не обращаться к диску при фехтовании

 

 

04
Дек
2020

Прыжки

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

Искал, искал ошибку — вроде все ок. Решил проверить длину прыжка в оригинале.

И вдруг:

Значит так и должно быть 🙂

P.S. AdamBazaroff подсказал, что так и должно быть — после прыжка принц делает шажок, потому в обратную сторону и не долетает. Что я могу сообщить по этому поводу? Ночью надо спать, а не править баги 🙂

03
Дек
2020

Начинаем приседания!

Приседания — это вам не просто так. Если игрок нажал клавишу вниз, это еще не значит, что принц должен просто присесть. Если он при этом стоит спиной на краю плиты, а сзади пусто — надо не садиться, а слезать. Если он стоит лицом к яме и на самом краю, то он тоже не должен садиться — он должен спрыгнуть вниз. А вот если не на самом краю, а чуть дальше от края — надо сесть. Но тут тоже есть нюанс: когда принц будет вставать, он наклонится над этой ямой и по его передним координатам определится пустота, но он не должен туда упасть, ведь под ногами есть опора. Но эта опора может и уйти из-под ног, если там падающий пол…

Вот сколько вариантов обработки простого нажатия кнопки «вниз»….

Но в целом, принц движется шустрее, чем на старом движке 🙂

28
Ноя
2020

И еще шаг

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

Долго не мог понять почему принц не хочет цепляться руками за опору при прыжке. И так и сяк крутил — вроде и опору видит и летит рядом. Чего ж не цепляется? Оказалось, все дело в счетчике высоты — если принц пролетел больше двух этажей, то он уже не должен цепляться за попавшуюся опору.  А счетчик показывал неверные данные.

Теперь цепляется 🙂

 

25
Ноя
2020

Понемногу учу принца всему заново

«Вчера его пигалица перемахнула через куст. Он всю ночь рычал от счастья.» Мультфильм «Что случилось с крокодилом».

Постепенно принц научился заново залезать, слезать, не бегать сквозь стены 🙂 Но впереди самое сложное — подбор шага на краю (который раньше был), и подбор шага перед ловушками (которого раньше не было). А также вечный источник глюков — падение. Это просто россыпь возможностей влететь в стену.

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

Но в итоге принц (пока что) бегает шустрей, чем при прежней системе.