Author: grf

14
Ноя
2020

Очень хитрый глюк

Сегодня весь день боролся с одним глюком. В 11м лабиринте есть место с большим количеством падающих плит, они там занимают два экрана. И вот, пробегаю я там для проверки и вижу, что одна плита почему-то не падает. Точнее, в одном экране плита остается висеть вверху, как будто я по ней и не пробегал, а в другом экране почему-то нет на одном месте обломков, хотя плита туда падала и они должны там валяться. Сначала я думал, что дело в том, что принц наступает на плиту, она начинает качаться и тут принц падает в окно ниже. Конечно, думал я, текущее окно сменилось, а фаза плиты, небось, еще не дошла до точки падения и при смене окна фаза обнулилась, что и вызвало застревание плиты. Но в процедуре смены окна вроде бы все было хорошо. Начал отлаживать, вижу, что при смене окна все-таки есть баг, в редком случае плита может еще не успеть упасть и текущее окно у нее не сменится.  Исправил. Вообще ничего не изменилось. Снова сижу в отладчике, вылавливаю эту плиту. Все вроде упало, а плита в лабиринте не стерта! Конечно она там выводится, ведь если код плиты остался на месте, то она и должна вывестись! Смотрю место, где плита должна стереться, когда начинает падать. В отладчике дохожу до этой точки и вижу, что плита стерлась. Но через пару кадров она снова в массиве лабиринта появляется! Как так-то? Ага, ведь есть случай «mcfly», когда падающая плита падает на падающую плиту и тогда в лабиринт снова записывается код 15 (падающая плита). Неужели плита умудряется упасть «сама на себя»? Фиг его знает, может что напутал с координатами при смене окна… Но нет, эта подпрограмма не вызывается при трассировке…

Начинаю отслеживать тот момент, когда же вновь появляется код плиты в лабиринте на старом месте. И вижу, что это происходит при восстановлении фона для стирания плиты с экрана! Вот это поворот! Каким же боком восстановление сохраненного под плитой фона влияет на состояние элементов в лабиринте?? Оказывается, в 90х я не дописал толком эти самые падения плит — нет проверок на высоту спрайта плиты при проваливании плиты за границу экрана! Таким образом, когда плита подлетала к нижней границе экрана, фон для нее запоминался с куском данных ЗА этой границей, через адрес 100000. Со 100000 как раз подключена страница с лабиринтом. Фон запоминался, поверх экрана и лабиринта рисовалась плита (!), потом фон восстанавливался и лабиринт тоже. Поэтому и плиты «возвращались» на место — этот кусок данных возвращался на место.

Вот такой вот мегаглюк. Любимый переход через 100000, чтоб его.

Ну, теперь принц тут бегает спокойно:

 

12
Ноя
2020

А плиты летят, плиты…

Читал у Джордана Мекнера «Сегодня я добавил в игру падающие плиты». Так буднично, как будто он сел такой после обеда,  добавил ВСЕ, что связано с этими плитами и пошел кидаться пивными банками в голубей. Там СТОЛЬКО гемора с этими плитами, что они вызывают у меня уже нервный тик! Они должны качаться, они должны лететь через весь лабиринт и сшибать на своем пути другие плиты. Если плита упала на управляющую решеткой плиту — должны сработать решетки. Если принц наступил на такую плиту с самого правого края, затем сразу вбежал в правое окно — часть плиты видна уже слева, и координаты ее надо поменять на левый край, а то она будет продолжать рисоваться справа…. аааа…. Еще плиты не должны ничего затереть, конечно же. А он, блин, «сегодня я добавил плиты»….

Исправил сегодня три бага с плитами. И еще два есть.

 

 

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 часов в общем вагоне? Фигня какая, дайте два! Прыгаем в поезд на ходу.

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

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

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