Category: История

21
Сен
2022

Тебе позвонили!

Когда мы рубились в Goonies в школе, эта фраза обязательно звучала, когда оставалось мало жизни 🙂

Добавил этот самый звонок и сам проигрышный финал:

17
Окт
2021

Да не 30 лет мы его писали!

Все почему-то думают, что Принца писали 30 (кто-то уже даже говорит «больше 30») лет. Ну конечно это не так. Что я, по-вашему, с 16 лет его пишу каждый день с утра до ночи? )) Специально прошерстил все исходники, по датам в них можно восстановить хронологию и сроки:

Самые ранние даты, которые мне попались:

; зеркальное копирование 8.4.92

; *** вывод спрайта *** 12.04.92 ;
; ANIMATOR

Само собой, это первые вещи, с которых все началось — без вывода спрайта никуда. Надо учитывать, что начал это все писать Женя, и случилось это после того, как я кучей демок типа «бегущий принц», «горящий факел» убедил его в том, что надо попробовать. Первой был факел, точно. Допустим, недели две я его этим мучал, потом он еще думал о том, с чего начать… значит март 1992 можно считать началом эпопеи.

Дальше видим такую метку:

; обработка клавиатуры 25.07.92 ;

Раз дошло дело до клавиатуры, значит потребовалось управление. Значит это тот период, когда Женя сделал демку с бегающим по экрану принцем. В это время я уже поступил в институт и участие в проекте принимать перестал. Но я нарисовал почти все спрайты, так что было с чем  работать. И дальше дат никаких нет до вот этой:

; таблица управления 01.94

Видимо, Женя решил отдохнуть, пока я учился в институте 🙂 Но через какое-то время отдыхать ему надоело и он взялся за дело (я уже был в армии в 1993-1994 годах). Дальше идут даты:

;редактор лабиринтов дизасс. 15.02.94
;22.02.94

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

Дальше дело пошло:

; определение препятствия 21.06.94 ;
;--------------------------------------11.07.94-;

Насколько я помню, где-то летом я как раз приезжал в отпуск и Женя показал мне, как принц бегает уже не по экрану, а по лабиринту, залезая и слезая во всякие ямы. Это уже было круто.

Потом был какой-то застой, видимо. В ноябре 94-го я вернулся из армии (знатно поучился в институте) и записи пошли кучно:

; GRF Обработка движущихся объектов 18.03.95
; GRF Вывод решеток в текущем положении 19.04.95
; GRF Вывод окна и инициализация массивов для обработки 10.05.95
; движущихся объектов 
; GRF Движение фрез 24.05.95 14:27
; GRF Считываем фон для видимых решеток 31.05
; GRF Дым на кувшинами 5.06.95 14:57
; GRF Нажатие плиты 8.06.95 16:56
; GRF Вывод двери в текущем положении 14.06.95 10:07
; GRF Составление списка видимых шипов 20.06.95 9:55
; GRF Считываем фон для видимых шипов 20.06.95 10:47
; GRF Движение шипов 20.06.95 13:55
; GRF конвертор лабиринтов 29.11.95
; GRF Взятие предмета 21.12.95 ;

Блоки мы помечали, чтобы видеть кто накосячил ))

Потом большой перерыв, аж на два года:

;==== управление стражником ========24.5.97===
; нач.14.02.97

;----------------------------------------------------;
;загрузчик 19.03.97 ;
;----------------------------------------------------;

Не помню, с чем это связано. Видимо как раз интерес к БК угас, появились у всех PC по домам. А в 97-м как раз получили письмо из Сочи, от Григория Останина. Оказывается, наша старая демка докатилась до Сочи. Он спрашивал, когда доделаем Принца. Вот тут энтузиазм снова появился и мы стали доделывать. И стало ясно, что памяти не хватит. Тут уже на одном энтузиазме продолжать было сложно. Я делал стражников и у меня не было места под код их АИ. Я видел, что еще надо научить стражников куче вещей — они должны сами бродить по лабиринту в погоне за Принцем, прыгать в неглубокие ямы и т.д., а не просто махать мечом в пределах одного экрана. Чтобы выбить место под код, приходилось оптимизировать уже написанное, как правило в убыток скорости. Нельзя было делать развернутые циклы, таблицы для скорости вычислений… Принц становился тормозным. Сделали мы и обмен на ходу в памяти неиспользуемых на данный момент спрайтов на другие, подгрузки всякие и при этом никакой музыки на AY еще и подавно не было, и звуков на AY тоже. Даже оцифровки по спикер, которые мы сделали, влезли не все… В итоге снова все заглохло. Аж до 2016 года.

За это время Женя переехал в другой город и еще много чего произошло. В 2016 я достал старые исходники, еще немного их помучал, добился уже полного исчерпания памяти и снова бросил. Потом аж в 2018-19 я вернулся к Принцу уже с вариантом использования СМК, что позволило снять проблему памяти. Циклы развернулись, появились таблицы… В итоге Принц и был доделан.

Так что никаких 30 лет Принца никто не делал долгими вечерами.

 

30
Сен
2021

«Отберите у Теда желтый блокнот!»

Вычеркиваем:

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

Хитрый глюк с игнорированием клавиш обнаружил Алекс Шестипалов, за что ему граненое мерси 🙂 Возникало это только в ситуации, когда Принц с пола вешался на стену, но залезать передумывал и спрыгивал обратно на пол. Причем именно на стену, а не на арку. И если после этого умудриться ни разу не упасть, не спрыгнуть с высоты хотя бы одного кирпича, а затем погибнуть в бою со стражником — вот только тогда не появлялась надпись «Press button to continue» и ожидание клавиши было бесконечным.  Просто при спрыгивании с кирпича (без залезания наверх) высотомер не сбрасывался (ошибочно, конечно). А вот ожидание обнуления высотомера я добавил только недавно, для того, чтобы дождаться полного падения Принца в пропасть, прежде чем перезапускать лабиринт по нажатию клавиши. И тут звезды сошлись… Принц считался летящим и ожидание было вечным.

Заставка теперь пропускается клавишей джойстика. Завтра буду делать новое управление от джойстика, с добавочной кнопкой для прыжков и стрельбы.

 

18
Май
2021

Джойстик

Кстати о джойстиках.

У меня был герконовый джойстик, но на нем были кнопки, а не ручка. Я специально себе такой сделал, после того, как поиграл на Ямахе, где была офигенская клавиатура, позволявшая нажимать несколько клавиш одновременно. Конечно я захотел себе такой девайс управления. Но клавиатура БК не позволяет обрабатывать несколько одновременно нажатых клавиш стандартными средствами.

Мой «джойстик» был секцией клавиш вот от такого калькулятора:

Я отпилил 6 клавиш и запихнул в коробку от советских шашек. Кнопки были идеальные, герконовые, с мягким подпружиненным ходом. Очень жалею, что куда-то его задевал. Небось отдал Жене Пашигорову, а он на чердак закинул. Главное, что можно было нажимать кучу кнопок одновременно, это обеспечивало суперскую точность в играх, в отличие от этой ручки, которую мотылять туда-сюда надо. С ручкой наверное удобно играть в самолеты какие-нибудь, а бродить по лабиринтам с ним и в оригинальном принце задолбишься.

Вот в ролике мучается товарищ:

10
Янв
2021

Немного о стражниках и решетках

Недавно я обнаружил, что некоторые решетки открываются не в том порядке, в каком должны. Точнее, не теми плитами управляются. Загнал нужный лабиринт в редактор и понял, что редактировать привязку решеток к управляющим плитам невозможно. Можно только задать все связи заново. Ошибся — задавай все снова. Почему так сделано и как я умудрился все их связать? Ведь никаких записей на этот счет я не делал, это точно. Видимо, по памяти. И это неудивительно: чтобы перенести лабиринты на БК, мне приходилось заходить в КАЖДЫЙ экран каждого лабиринта. Буквально в каждый. Это означает, что я падал во все пропасти, на лету нажимая паузу и печатая экран на матричном принтере (бжжж…бжжжж..). А если по пути попадались падающие плиты? Надо было выяснить, какие падают, а какие нет. Это тоже добавляло повторных проходов. Конечно у меня все эти решетки отпечатались в памяти, ведь я прошел их по сто раз. Но некоторые связи были неочевидны — если по пути ты нажимал несколько открывающих плит, то уже не был уверен, какая именно плита какую решетку открыла, ведь одна плита может открыть их сразу несколько.

В итоге так и вышло — в нескольких решетках я ошибся. Исправляю теперь их прямо в дампе, так проще 🙂

Распечатанные листы А4 мы склеивали в огромные лабиринты, которые едва помещались на полу комнаты)) Долгое время одна такая распечатка в свернутом виде хранилась у меня. Но сейчас я ее не нашел. Наверное все-таки выкинул, или использовал при ремонте для закрывания пола…

Иногда память играла злую шутку — что-то запоминалось глобально, а какие-то вещи ускользали. Глаз замыливался. Я так привык проходить лабиринты на скорость, что только недавно узнал о том, что принц может и сам повторно доставать меч в бою, если сложил его. Клавишей «вверх». Или что стражник может делать шаг назад, а также может хитро защищаться. Еще стражники теряют жизнь при падении с высоты, так же как принц, и могут помереть от этого, если жизнь была последней. Стражники видят принца сквозь решетку, слышат его шаги и отслеживают где он там бродит. Знают, когда между ними и принцем есть падающие плиты и не наступают на них. Могут гоняться за принцем по лабиринту, прыгая при этом в неглубокие ямы. Но не всегда! Если принц сам сложил меч и сбежал — стражник не будет его догонять. Но если в соседнем окне тоже есть стражник, то второго туда никак не заманишь. Двух стражников на экране в первом принце не бывает, это во втором принце они бегают толпами.
Вот такие детали в поведении стражников придают игре реализма. Враги принца не тупые монстры какие-нибудь)) А я стражников просто лихорадочно убивал и бежал дальше) Но при работе над фехтованием это все всплыло. Делать надо было все, иначе это уже не то…

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

Потом оказалось, что и у принца есть такая фаза…

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

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

 

18
Дек
2020

BAT-файлы

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

Код рос и постепенно перестал помещаться в первые 16К. Придумали, как разместить код в расширенной памяти и вызывать эти подпрограммы из основной.  Где-то в это время линковать проект с помощью micro1103 стало уже невозможно — таблицы меток всех исходников стали слишком большими. Все-таки, micro1103 был написан для БК0010. Тогда Женя написал линковщик, который умел использовать всю память БК11М. И мы продолжили проект.

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

И вот тогда Женя вдруг придумал как заставить монитор БК0010 вместо ввода с клавиатуры принимать текстовые команды из файла. Для этого он исправил сам монитор и написал программу «воспроизведения» таких текстовых файлов. Создали мы такой командный файлик, в котором записали последовательно все команды запуска линковщика, загрузки нужных объектников, сохранения промежуточных таблиц — в общем все, что делали вручную каждый раз. Запустили, увидели как все само собралось без участия человека и без ошибок. Далее были сцены поливания шампанским, запуска салютов, и что там еще в фильмах в случаях большой радости?

 

07
Дек
2020

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

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

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

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

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

 

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М их не так уж нереально вместить. Тут уже пошло активное обсуждение как можно сэкономить память, как можно реализовать вывод на экран немигающих спрайтов… И лед тронулся!