Category: Prince of Persia

10
Ноя
2020

Оптимизация

Оптимизировал копирование со скрытого экрана на видимый — развернул цикл копирования и сделал самомодифицирующийся код этого самого цикла по совету Manwe Sands. В зависимости от ширины копируемого куска, исполняется нужное количество итераций цикла. Код  sob r2 как раз и изменяю:

 

 

 

 

 

 

 

 

Для теста просто запустил секундомер и пробежал три экрана на старой версии и на новой. Выигрыш 1 секунда 🙂

Вообще надо попробовать обойтись без копирования — переключать экраны. Сейчас просто пустой экран используется как чистый фон, но есть мысль как от этого избавиться: раз копирование у меня все равно в одном месте сделано, то что мешает в этом месте тупо переключить экраны, раз уже все выведено и подготовлено к копированию? А восстанавливать фон на втором экране уже. Завтра попробую.

 

 

 

 

09
Ноя
2020

Комментарии

Помнится, Женя все время мне говорил «Пиши комментарии в коде! Потом ведь фиг разберешься!», а я ему отвечал «Да и так все понятно, чего тут комментировать?». И вот теперь:

 

 

 

Что, блин, за «случай МакФлай»?? Что это значит, еклмн? Вернуться бы в прошлое и дать себе подзатыльник!

P.S. Случай mcfly оказался ситуацией, когда одна падающая плита падает на другую «нестабильную» плиту.

 

09
Ноя
2020

Баги, баги…

Борьба с багами продолжается. Любимые грабли — выход за пределы экрана и затирание страницы со 100000. В 11м лабиринте куча падающих плит на границе экрана, вот там оно и вылезло. Нашел где, осталось исправить 🙂

Эти летающие плиты «еще со времен Ганди нас ненавидят» (с) Раджеш Кутраппали.

 

08
Ноя
2020

Слишком точная копия

Разбираюсь с тем, как должен вести себя принц, упавший на «ненадежные» плиты, которые рушатся. Если у принца последняя жизнь и он теряет ее при падении, то принц переходит в состояние «помер». А плита-то активирована и потом падает. И принц остается висеть в воздухе.

Стал смотреть, как этот вопрос решен в оригинале, и вдруг:

И что, блин, делать? 🙂

 

07
Ноя
2020

Двумя багами меньше!

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

А в качестве видео — вот как работает переворачивающий кувшин 🙂

07
Ноя
2020

Как я впервые прошел принца

Игрушка «Prince of Persia» появилась у нас в 1991 году, как раз когда я закончил школу и устроился на работу. Уже не помню, почему я сразу не пошел в институт, наверное хотел «год отдохнуть» или что-то типа этого. А может пропустил срок подачи документов. В общем, устроился я оператором ЭВМ в железнодорожную организацию. Задачи были стандартные для того времени — починка компов, установка всяких программ под DOS, как максимум начальство хотело, чтобы бухгалтерия перешла на расчет зарплаты на компах. Для таких вещей тогда было популярно писать программы на Foxbase, Foxpro, Clipper.

На работе мы, конечно, рубились в игры в свободные часы, но не могу сказать, что это было часто. Как ни странно, приходилось работать 🙂  Выглядело это примерно как в сериале It Crowd, реально ))

И вот однажды, начальство решило послать двоих из нас на «курсы программистов» в город Рязань. Преподнесено это было именно так, мы с Диманом сразу согласились. Странно было, почему именно Рязань, ну да фиг с ним, Рязань так Рязань. Мы оба только закончили школу в этом (1991) году и тут нас командируют на другой конец страны из Хабаровского края в Рязань.  Ни один из нас до этого не был в Москве, а добираться предстояло через нее. Приключение же, йяхуу!!

Интернета не было в природе, как попасть из Москвы в Рязань и вообще как перемещаться по этой Москве — неясно, ну да разберемся на месте. Получили командировочные удостоверения, билетные требования на самолеты-поезда и отправились. Приехали в Хабаровск, сели в самолет, прилетели в Москву. Приехали на Казанский вокзал, нашли поезд до Рязани, сели в поезд и капец…. В Москве 5 часов дня, а по нашему-то времени уже полночь. Пока мы доехали до Рязани, уже было почти 8 вечера, а по нашим часам уже третий час ночи. Засыпали на ходу, хотелось уже найти эту общагу, куда нас должны были заселить, и упасть. Хорошо, что она оказалась недалеко от вокзала. Заселились, упали, вырубились.

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

Тут выяснилось, что им пришла новая партия компов, штук 10 или больше PC с процами 486, вроде бы. Оказалось, что в этой организации принято новые компы перед вводом в эксплуатацию просто включать и гонять дней 10 на предмет выявления глюков. Компы все расставили на столы в отдельном помещении и решили нас туда загнать, чтобы не маячили перед глазами )) Дали нам ответственное поручение гонять любые игры на этих компах и на глаза не попадаться. Шикарные курсы.

Таким образом, остаток командировки мы с утра до вечера играли во что только нашли. Я лично рубился в Принца, отрываясь только на обед. Так как возможности записаться не было, приходилось снова и снова проходить все с начала. Постепенно первые лабиринты уже вообще на автомате проходились. Когда в 4-м лабиринте из зеркала выскочил Двойник, это было прям неожиданно. До этого игра была просто бродилкой, хоть и с офигенской анимацией. Тут вдруг появился какой-то интерес. В 5-м лабиринте Двойник появился снова и подло выпил кувшин с дополнительной жизнью. Начинал бесить. В 6-м я регулярно дох, уж больно этот толстый стражник хорошо фехтовал. Но со временем я выяснил, как его можно победить. И прошел дальше. А там в конце опять эта сволочь прозрачная. Да еще и закрыл передо мной решетку, гад. 7-й лабиринт — стражники уже сильнее, но после фехтования с толстяком это уже ерунда. А? Что? Выходные?? Блин, придется бросить играть на два дня.

В выходные мы бродили по Рязани, по старым районам с церквями, все было очень интересно. Была осень, красота в парках. Жаль, что не было у меня тогда фотика с собой. Локаций обалденных там куча. Все эти здоровенные дубы, кремль, Успенский собор — красотища, очень впечатлило. В местной звукозаписи добыл «новый» альбом Depeche Mode — 101 Live. На рынке (!) купил плакат с Depeche Mode. Что еще надо для счастья?

Снова «рабочая» неделя, вперед, к спасению Принцессы. В 8-м очень крутой стражник, много крови пролито. Много засад, бежишь сломя голову и не успеваешь к закрывающейся решетке, хоть убейся. Собственно, вариантов убиться по дороге тоже куча. И вот в очередной раз не успел и решетка закрылась. Стою, как будто я сам там стою у этой долбаной решетки и думаю «да елки-палки, ну невозможно уже быстрее! Вы издеваетесь??» и тут появляется…. Блин, автор реально умеет нагнать напряжения и погрузить игрока целиком в эти подземелья.

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

12 лабиринт реально вызывал боязнь высоты при всех этих прыжках по обваливающимся плитам. Все казалось непроходимым, но в итоге было пройдено. И вот снова этот Двойник. Фехтует так себе, легко его забил. И помер сам. Да что за нафиг?? Вот тут я застрял надолго. Непонятно было: то ли что-то не нашел и надо обыскать все закоулки, то ли есть другой путь… А может, что-то надо было взять еще раньше?? Как всегда, все оказалось нестандартно и неожиданно. В очередной раз поразившись фантазии автора, прошел дальше. Финальный бой с Джафаром. Тоже попил крови этот дядя. Прохожу в следующий лабиринт, а там просто дорога без препятствий. Вбегаю в очередную комнату, а там принцесса бросается на шею! Это было прям как реальный финал какого-то фильма )) Принцесса обнимает, музыка играет… Титры появились… Блин, мы смотрели на это впервые и дочитали до конца эти титры. Прямо скажем, игра мощно захватила.

Командировка наша подошла к концу. Принц был пройден — можно было и домой лететь 🙂 Тут нас тоже поджидало приключение. За эти две недели наши финансы подошли к концу (вспоминается обжиралово в ресторане с живым оркестром). Оставалось у нас рублей 15, что ли. На еду в дороге должно было хватить. Билеты у нас были бесплатными. Спросили у народа как нам добраться до аэропорта, нам сообщили, что на наш рейс регистрируют в Центральном Аэровокзале, метро Аэропорт. А потом сразу в автобусе к трапу самолета везут, в Домодедово. Отлично!

Добираемся до Казанского вокзала из Рязани, Москву по-прежнему толком и не видели. Идем в метро, вроде все понятно, едем. Что-то долго едем и станции не те объявляют. Где тут карта? Ага, пилим не туда. Метро «Университет» это ваще не там, где надо. Посыпаем голову пеплом, пересаживаемся, едем, доехали, вышли почти рядом. Квест пока проходит успешно. Времени, правда, уже не так много — до самолета 2 часа,  а регистрация заканчивается за 45 минут. Где ж этот аэровокзал? Вроде одну остановку на трамвае надо проехать. Или на троллейбусе? Уже не помню. Садимся в трамвай/троллейбус, решаем проехать эту остановку зайцами, денег-то кот наплакал. Контролер, чтоб его. Отлично, нас штрафуют на 10 рублей. Сэкономили!

Так, аэровокзал нашли. Денег нет теперь вообще, но билеты же есть, а в  самолете кормят — прорвемся. Ищем табло рейсов, наш рейс 31, вот он на табло, все отлично. Ждем начала регистрации. Ждем. Ждем. Нифига. А время-то поджимает, до отлета час с небольшим. Идем в справочную, спрашиваем когда начнется регистрация на рейс 31? А рейс 31, говорят нам, регистрируют в Домодедово. Нннннннуууууууууу…….. Тэкс, это надо переварить. В Домодедово это, блин, значит видимо нифига мы не успеем на рейс. Некогда думать, надо пилить в Домодедово. Находим аэроэкспресс, как-то впихиваемся в него не смотря на очередь и едем. Едем. Судя по времени, регистрация уже закончилась. Едем. Хмм, самолет уже улетел, судя по времени. Что это означает? Это значит, что билеты наши бесплатные накрылись и улететь мы не сможем. Обратно в Рязань вернуться мы тоже не сможем — денег на поезд уже нет. Да и кто нас там ждет —  суббота, контора эта закрыта. Какие варианты? Звонить родителям и просить перевести денег на билет на самолет, т.к. в выходные и на нашей работе тоже нет никого. Звонить тоже стоит денег, и к тому же в то время сотовых не было, надо было заказывать межгород телеграммой. Да и как родители переведут деньги? Кредитных карт еще нет в природе. Денежный перевод до востребования на Главпочтамт? Где-то надо жить все это время и что-то есть…  Мелькает мысль, что вот так и становятся бомжами ))

Приезжаем в Домодедово, несемся в справочную. Рейс 31 улетел? НЕТ???? НЕЕТТТТ???? Почему не улетел? Самолет не прибыл из Хабаровска?? Боже, какое счастье! А когда прилетит? Хз когда? Ну, это отлично!

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

И вот, самолет прибыл. Все замерли в ожидании. Объявляют посадку в один самолет на оба рейса — 25 и 31. И начался зомби-апокалипсис. Битва за ресурсы. Регистрация проходила, мягко говоря, шумно. Но у нас не было вариантов, мы должны были улететь, ни шагу назад. Пробившись к трапу, я вбежал на него первым, как оказалось. Навстречу мне вышла стюардесса и сказала: «Пойдем вниз, я хоть билет твой проверю». Мы с ней шли вниз по трапу, а перед трапом бушевала толпа народу. Ночь, прожектора отражаются на мокром асфальте… Тоже шикарный кадр был бы 🙂

Самолет долго не выпускали из-за возмущающихся пассажиров. В итоге, мы вылетели с опозданием, но нам было пофиг. Было пофиг, пока мы не приземлились в Хабаровске с опозданием и до отхода поезда оказалось всего полчаса, а добираться до вокзала тоже полчаса, в лучшем случае. Квест не дает расслабиться. Прибежали на вокзал, суем в кассу свои командировочные удостоверения, а нам говорят, что билетов нет, только в общие вагоны. 18 часов в общем вагоне? Фигня какая, дайте два! Прыгаем в поезд на ходу.

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

Такая вот была командировочка 🙂 Под впечатлением от пройденного Принца я начал думать, можно ли сделать ремейк этой игры на БК….

И начал подбивать на это Женю Пашигорова!

 

07
Ноя
2020

12+13 лабиринт

Поделил 12 лабиринт на два, теперь мультики не портят данные. Сделал переход из 12-го в «13-й». Попутно выяснилось, что в наличии два жутких глюка — во-первых, падающая плита при падении на такую же «нестабильную» плиту не уносила ее с собой вниз, как положено, а застревала на ней. Во-вторых, падающие плиты выводились неверно — поверх них выводился задний план. Оба глюка побеждены. И оба они были очень древними 🙂 Ну и еще мелкий глюк со смещением маски верхней части колонн исправлен, но это ерунда.

05
Ноя
2020

Море бумаги

В 90-е у нас не было дома PC, а на работе были, конечно. Разработка принца велась на БК, программа уже состояла из кучи файлов, так как на БК конечно есть ограничения на длину текста исходника. Чтобы вызвать подпрограмму из другого файла, надо было вспомнить какие там передаются параметры в каких регистрах или ячейках памяти, а также какие регистры эта подпрограмма может испортить. Запоминать все было тяжко, а загружать каждый раз другой файл, чтобы посмотреть как там вызывать подпрограмму — лениво.

Потому на работе я периодически печатал исходники принца, чтобы можно было просто посмотреть как там и что. Постепенно исходники стали большими и искать нужный кусок кода в печатном тексте приходилось долго. Чтобы ускорить процесс поиска, я  стал печатать оглавление из таблицы меток и это очень помогло. Потом еще для больших разделов начал печатать метки в виде жирной черной полоски на полях страницы, которые были видны сбоку, а на титульном листе — сноски на эти метки. Таким образом можно было мгновенно перейти к нужному разделу текста. Короче, как только не изголялись, извели кучу бумаги на работе. Судя по тем бумагам, что я нашел в шкафу, печатали мы и на рулонах, и на термобумаге какой-то и фиг пойми на чем еще )) Еще же и спрайты надо было распечатывать…. Бумаги на работе ушло море ))

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

04
Ноя
2020

12 лабиринт

Нашел в чем была проблема с новым 12м лабиринтом. Последние два слова в каждом лабиринте представляют собой адрес в экране, куда вывести принца после входа и слово состояния принца (движение), которое он должен получить при входе. Т.к. в некоторые лабиринты принц «впадает» (как в 7-й), то это первое движение вовсе не везде одинаково. К тому же, после входа принц смотрит в определенную сторону, а вовсе не в одну и ту же. Все это есть в слове состояния принца. И вот это самое слово состояния и адрес вывода при сохранении лабиринта из редактора тупо обнулялись! Видимо тогда нам было лень делать механизм назначения движения и мы решили, что впишем от руки потом, лабиринтов-то всего 12. И вписали, что характерно. А вот я об этом забыл 🙂 Ну, вписал и сейчас, не проблема 🙂

Лабиринт заработал. Заодно проверил возможность пройти череду прыжков в 12-м, это весьма сложное место и в оригинале, с нормальной клавиатурой. А уж на БК с ее «особенностями» и подавно. Мне было интересно, реально ли пропрыгать этот каскад в нашем принце. Оказалось, что реально, по крайней мере на эмуляторе БК. Но и глюк нашелся, куда без этого: если при смене экрана принц бежит по обваливающейся плите, то он сразу падает. Будем исправлять 🙂

P.S. проблему с плитой и провалом пофиксил, но ролик получился эпичный ))