Клонирование игры Lode Runner с первого ПК в СССР «БК-0010» плюс несколько слов о программировании игр в конце 80-х


    Недавно я оказался в не совсем обычной для себя ситуации вынужденного безделья. Пару недель поваляв дурака, я стал чувствовать, что это не такое уж и веселое занятие, которое к тому же еще и стало переходить в скуку. И мне надо было себя занять чем-нибудь относительно полезным. Раньше мне периодически приходили в голову мысли о том, чтобы вернуть к жизни какую-нибудь старую игру из времен моей юности. Но я всегда гнал такие идеи прочь, так как понимал, что "никому это теперь не надо". Но сейчас у меня было свободное время и, главное, было желание. В результате для клонирования я выбрал один из вариантов игры Lode Runner, в который я когда-то играл на первом персональном компьютере времен позднего СССР, который назывался БК-0010. Не думаю, что многие о нем помнят, так как мир «железа» поменялся с тех времен очень сильно. Однако сам Lode Runner с этого БК-0010 был достаточно уникален своими правилами среди других одноименных Lode Runner-ов. Эта версия игры была моей самой любимой, как мне кажется, по объективным причинам, хотя… может быть тут дело просто в ностальгии. В результате я сумел себя мотивировать тем, что "лично мне", а, возможно, и "всему миру", эта игра может быть интересна, и на её восстановление стоит потратить время (ссылка на полученный результат).

    Для начала взглянем на оригинал с БК-0010 (хвала Интернету, в котором можно найти почти всё):
    image

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

    Отличительной особенностью версии игры на БК-0010 было то, что главный герой дырявил кирпичи строго под собой, а не справа или слева, как это происходило, например, на Lode Runner с компьютера ZX-Spectrum. В результате можно было бежать вперед, оставляя за собой продырявленный пол, куда падали преследователи. И эта особенность как раз и выделяла для меня этот Lode Runner из всех других одноименных игр.

    При полном клонировании в разработке есть как плюсы, так и минусы. Безусловным плюсом является то, что есть возможность заранее четко представить себе цель, также можно использовать игровые уровни, которые уже есть в версии для БК-0010. Минусы же заключаются в том, что поведение главного героя и охранников должно быть реализовано максимально близко к оригиналу. И если с главным героем всё более-менее ясно, то у охранников есть что-то наподобие AI, который имеет-таки массу мелких особенностей, требующих повторения в моем коде. Критические отклонения в поведении охранников могут сделать уровни с БК-0010 неинтересными либо вообще непроходимыми. А это убивает весь смысл клонирования.

    Начал я с того, что нашел в Интернете уже кем-то переделанный вариант Lode Runner-а с БК-0010. Однако маленько поиграв в него, я понял, что он похож только с виду. Несмотря на внешнюю схожесть, на мой взгляд, автор не дал себе труда поработать над поведением охранников, поэтому перемещались они не так, как это было в оригинале. А когда я «замуровал» одного из охранников в кирпичах, игра сбилась. Но в этой версии был важный для меня плюс — здесь присутствовал редактор уровней, и эти уровни также были старательно перерисованы из оригинала. А мне эти уровни как раз были очень нужны.

    Несмотря на то, что игра была по современным меркам простенькой, она требовала, чтобы у неё был какой-то интерфейс пользователя, т.е. те же кнопки меню должны были как-то функционировать. Также у меня присутствовала навязчивая идея о том, чтобы игра была легко переносимой на разные платформы. К счастью для меня, я уже делал подобную оболочку для своей классической RTS Земля онимодов (статью о том как я её делал можно найти тут). Оболочка эта имеет важную особенность — она не общается с ОС напрямую, а только через виртуальные функции, которые можно относительно легко заменить. Также оболочка имеет достаточно продвинутый GUI, который с виду может не сильно отличается от интерфейса Windows:

    image

    Запись/чтение файлов, файловые потоки, работа с мышью и клавиатурой, воспроизведение звука, вывод графики и управление режимами экрана — всё это также было предусмотрено в моей оболочке. Поэтому я пошел именно этим путем — решил допрограммировать к оболочке небольшую игру.

    Больше информации по этой оболочке можно найти в моей прошлой статье.

    Игра не требовала каких-то серьезных вычислительных мощностей, поэтому я решил не заморачиваться и рисовать графику процессором. Логика тут очень проста. Создаем поверхность в памяти, выводим туда картинку процессором, потом копируем эту поверхность на текстуру DirectX или OpenGL в видеопамяти и эту текстуру уже выводим на монитор. Такой подход хорош тем, что он максимально упрощает перенос между разными платформами. А так как бороться за быстродействие мне не придется, то я посчитал этот путь единственно правильным, тем более, что оболочка на текущий момент также строит своё изображение процессором.

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

    image

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

    image

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

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

    image

    И через несколько минут он мне выдал нашу «колобчиху» image, которую мы в результате и отправили на поиски сокровищ. На всякий случай уточняю, что Константин рисовал ей «ручки», а не «ушки», но визуально это не совсем очевидно.

    Потом мы старательно переносили все уровни из оригинала в нашу игру. Я их открывал в той не самой удачной версии, о которой я упоминал ранее, затем нажимал PRINTSCREEN, закидывал в Photoshop и оттуда печатал на принтере. Да… перед печатью еще делал инверсию изображения, чтобы не заставлять принтер печатать много-много черного цвета. И, глядя на этот лист, я просто рисовал в своем редакторе уровней то же самое. После того, как все 26 уровней были перенесены, мы с удовольствием дорисовали несколько собственных.

    Лично у меня самые большие сложности были из-за необходимости почти точно повторить алгоритм поведения охранников. Практически, приходилось играть и глазами выискивать в каких-то редких ситуациях неадекватность действий «спецслужбы лабиринта». И не так сложно было исправлять эти ситуации, как сложно было их обнаружить. Но мне очень хотелось сделать поведение аналогичным тому, что было в оригинале и, надеюсь, что это мне удалось.

    Был когда-то в конце существования СССР такой мультфильм, который назывался "Босой ученый". Там один, ну, очень умный восточный мыслитель пошел на рынок за новыми ботинками. И там он увидел, что какой-то художник продает картины, на которых нарисованы всякая живность, в частности, там были и петухи. И мыслитель говорит художнику:
    — У тебя же талант. Зачем ты его тратишь на то, чтобы рисовать петухов? Нарисовал бы лучше что-нибудь великое, например, бога.
    А художник ему и отвечает:
    — Бога нарисовать слишком просто, поэтому мне это неинтересно.
    — Неужели ты считаешь, что бога нарисовать проще, чем какого-то там петуха? (возмутился мыслитель)
    — Конечно, проще (отвечает художник). Бога же никто не видел. Нарисуй я его с рогами или без головы — никто не скажет, что я нарисовал его неправильно. А вот если я нарисую неправильно петуха, то все сразу скажут, что я не умею рисовать.

    (рассказал по памяти — смотрел мультик очень давно, но эта мысль мне определенно показалось дельной)

    В общем саму игру я осилил примерно за недельку, но потом добавляли графику и звук, рисовали уровни и, самое главное, я-таки решил поиграться в кроссплатформенность. До этого момента я никогда не писал приложений под Linux или Mac OS (хотя вру… под Mac OS, iOS, Android и WinPhone я делал примеры работы своего движка спецэффектов, но это были отдельные проекты, а сейчас мне надо было портировать один и тот же продукт везде).

    Я обнаружил, что мир Linux/Unix очень разнообразен и сильно отличается в мелочах, несмотря на общие правила. Разбираться с этим многообразием я для себя посчитал делом немыслимым, но портировать всё же очень хотелось. Поэтому я взял движок SDL, который, к счастью, берет на себя все эти тонкости работы различных юниксообразных ОС. Для портирования на Linux я поставил на виртуальную машину Fedora-64 и в ней установил среду Code::Blocks. Дописал к своей оболочке новые классы, которые через виртуальные функции обращались бы к этому SDL. Создал объекты этих классов, вместо объектов классов, которые взаимодействовали с Windows и… собственно всё. К моему удивлению, виртуальная машина вполне воспроизводила игру в реальном времени, разве что звуки чуть-чуть запаздывали.

    Mac OS сопротивлялся дольше Linux-а, так как я поленился переносить проект на XCode и установил в Mac OS тот же Code::Blocks. И тут я обнаружил, что отладчик-то не работает. Я понимал, что всё дело в какой-то мелочи, так как после Linux-а проект на Mac OS даже сразу собрался, но возможности запустить отладчик у меня всё равно не было, хотя я и попытался установить GDB. (Возможно, что у меня на Mac-е жутко древняя операционка Lion, и отсюда проистекают проблемы с отладчиком). В результате, я просто стал выводить сообщения в консоль. Оказалось, что проблема была в путях к папке с игрой и к папке для сохранения данных. Как только я исправил эти функции, игра запустилась.

    Отдельное время у меня отняла задача по открытию в браузере ссылок. Как это делать в Windows я, конечно, знал:

    void GPlatformWindows::OpenLink(const char* link)
    {
    	ShellExecute(NULL, _T("open"), link, NULL, NULL, SW_MAXIMIZE);
    }

    А вот Linux порядком помотал мне нервы с этими ссылками. В результате я сделал так:
    void GPlatformUnix::OpenLink(const char* link)
    {
    	ToIconic(); // сворачиваем окно с игрой
    
    	#ifdef __APPLE__
    
    	// для MAC OS
    	CMagicString param="open ";
    	param+=link;
    	system(param);
    
    	#else
    
    	// для Linux
    	CMagicString param="xdg-open ";
    	param+=link;
    	param+=" &";
    	system(param);
    	
    	#endif
    }

    Не уверен, что это самое лучшее решение, но оно в моем случае вполне работает.

    Итоги:
    Полученные результаты меня вполне устроили. Я сам с удовольствием поигрался в свое творение и считаю, что качество данного клона вполне приемлемое. Кроме того, я очень редко берусь за проекты, которые по своему объему очень мелкие. А малый объем работы приносит быстрый результат и, соответственно, ощущение «новой звездочки на крыле». Кроме того, мелкие проекты завершаются быстрее, чем они успевают надоесть.

    Если будут желающие «заценить» данное произведение, то я записал небольшое видео на тему того, как правильно играть в мой Lode Runner:

    Совет по игре: чтобы дырявить пол лучше удерживать пробел, а не барабанить по нему.

    Разработчики:
    — Программирование: Алексей Седов (он же Odin_KG, он же студия Astralax)
    — Графика: Константин Иванов
    Платформы: Windows, Linux, Mac OS
    Ссылка на страницу с игрой: Lode Runner

    О программировании игр в стародавние времена (лирический раздел)


    Я начинал интересоваться программированием почти в то же время, когда появлялись эти первые игры на первых компьютерах, доступных простому населению СССР. И эти первые игры произвели на меня гораздо большее впечатление, чем какая-либо современная высокотехнологичная коммерческая игра с огромным бюджетом и мощным пиаром. И тут всё очень понятно. Впервые я увидел компьютерную игру в тот же момент, когда я впервые узнал о существование компьютеров. Т.е. вот представьте себе следующее: человек знает про радио, телевизор и пылесос, но он вообще понятия не имеет, что на свете есть такая штука как компьютер. Узнал я это в «салоне компьютерных игр», куда отправились все мои тогдашние приятели по общему двору, чтобы посмотреть на эту диковинку. (Тогда как раз в стране стали появляться первые кооперативы, и салоны компьютерных игр скоро стали обычным бизнесом). И в этом салоне стояли как раз те самые БК-0010 с черно-белыми маленькими телевизорами.

    Поиграть на этом чуде стоило тогда 1 руб/час. И первое, что я увидел выглядело так:

    image

    Это игра Land, которая показала мне, что изображением на телевизоре, оказывается, можно управлять. И всё это называется «КОМПЬЮТЕР». Сейчас, оглядываясь назад, я предполагаю, что тогда мне было ориентировочно 13 лет.

    Не знаю как бы сложилась моя жизнь, если бы я в своё время вот так вот не познакомился с компьютерными играми. Но тогда я, естественно, и мечтать не мог, что когда-нибудь смогу взять да и запросто сам создать компьютерную игру. К этому этапу я смог перейти только через пару лет, когда у меня появился первый самодельный компьютер Специалист. А вот и он, кстати:

    image

    Потом было несколько вариантов ZX-Spectrum, максимальным по навороченности из которых был ATM-turbo, но это всё растянулось по времени на несколько лет. ATM-turbo я себе смог позволить только уже когда учился на втором курсе (сэкономил 10 стипендий, чтобы купить радиодетали). По образованию, я, кстати, химик-технолог, и я очень рад, что в свое время не пошел учиться на программиста — академическая модель обучения, на мой взгляд, вырабатывает у учащегося жесткое отвращение к получению знаний в этой области.

    Несмотря на то, что сейчас игры типа Lode Runner выглядят примитивными, когда-то они таковыми не являлись. И автору оригинала (насколько мне известно его зовут А.Марков) приходилось не так легко как мне с моим клонированием. В то время разработка велась совсем не такими методами как сейчас. Это станет понятно, если мы просто вспомним технические характеристики того же самого БК-0010.
    Процессор: К1801ВМ1 (щестнадцатиразрядный) с тактовой частотой 3 МГц
    ОЗУ: 16 килобайт
    Видеопамять: 16 килобайт (на деле отдельной видеопамяти раньше не было — это часть того же самого ОЗУ, которая постоянно выводилась на монитор)
    ПЗУ: 32 килобайта (тут были Бейсик или Фокал, а также всякие системные функции)
    Устройство хранения информации: бытовой магнитофон и кассеты (скорость загрузки примерно 10 килобайт в минуту)
    Устройство отображения: телевизор (в редких случаях монитор)

    Визуально БК-0010 представлял из себя толстую клавиатуру, внутри которой находилось сразу всё.

    image

    Стоимость составляла 650 рублей (при зарплате инженера в 120 рублей, фрезеровщика в 200 рублей, а начальника в 300 рублей)

    Я сам на этом БК-0010 никогда не программировал (он был слишком дорогой да и, на мой взгляд, не идеальный), но, по сути, я начинал примерно в то же время. И, я понимаю, что тогда разработчику нужно было, ох, как постараться, чтобы создать на таком железе и, самое главное, с имеющимися программными инструментами, что-то стоящее. Да и сам процессор физически был очень слаб — программист обычно считал такты, за которые выполняется та или иная команда, чтобы оптимизировать код. По-моему, на БК-0010 были еще и какие-то проблемы с ассемблером, так как один мой знакомый программировал на БК-0010 просто "в кодах". На деле, это значит, что забиваешь память цифрами, которые что-то значат для процессора, но визуально мало о чем говорят человеку. (Я этим в начале, кстати, тоже занимался, пока не узнал, что такое ассемблер и не набрал его ручками в виде списка байтов из одного журнала). Например, число 06 означало для процессора команду копирования содержимого регистра B в регистр A, что можно было записать на ассемблере в более понятном человеку виде как MOV A,B (для процессора КР580ВА80) или LD A,B (для процессора Z-80). Но это еще кое-как можно было запомнить, но дела с переходами по адресам обстояли еще хуже. При программировании в кодах нужно вписывать прямой адрес или смещение от текущего адреса до того, куда программа должна перескочить. А если приходилось вставлять в код изменения, то адреса сдвигались и надо было все адреса переходов расставлять заново. Некоторые для этих целей вставляли в код множество команд ассемблера NOP (код 00), которая просто ничего не делает — такие команды потом можно было заменить на что-то другое не трогая адреса.

    Рисовать графику, кстати, тоже было негде. Я, например, в то время отмечал карандашом точки на миллиметровке, а потом переводил эти точки в байты и эти байты вводил в компьютер ручками. И не думаю, что у автора оригинального Lode Runner-а были какие-то сильно отличающиеся от моих возможности.

    Я всё это к тому, что меня всегда удивляло часто пренебрежительное отношение к этим старым играм. Делать всё это было крайне сложно, и не у кого было спросить совета, так как разбирались в этом единицы, а Интернета тогда еще даже в планах не было. Единственный плюс, который, на мой взгляд, тогда присутствовал — это интерес к этой работе со стороны игроков. Людей с компьютерами было мало, но они были, скажем так, благодарными пользователями — появление новой игры вызывало интерес и игра быстро расходилась по тем же салонам компьютерных игр. И я не помню, чтобы кто-то когда-то говорил гадости на тему «какая отстойная игра» или что-то в этом духе. Короче, не было перенасыщения рынка, которое есть сейчас, что лично для меня всегда ставило под сомнение необходимость в создании новых игр. Ведь в реальности все существующие сейчас игры даже пересмотреть невозможно, не то что переиграть.

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

    Закончить я хотел бы словами благодарности в адрес разработчиков той эпохи (речь шла про отрезок времени: конец 80x — начало 90х). А также лично в адрес тов. Маркова, с которым я не знаком, но тем не менее его игра произвела на меня в возрасте 13-14 лет большое впечатление. Как не крути, именно эти энтузиасты стояли у истоков российского игростроя. Но главное, они зародили интерес к теме программирования у тех, кто «шел следом за ними». И я, в отличии от многих, понимаю, сколько это тогда требовало сил и терпения.

    Благодарю за внимание!
    Алексей Седов
    Метки:
    Поделиться публикацией
    Комментарии 146
    • +1
      Лучшая игра того времени — King's Valley от Конами на MSX, на мой взгляд. А Тетрис сам запрограммировал, как увидел :)
      • +2
        King's Valley да хороша — я её когда-то проходил.

        А Тетрис сам запрограммировал, как увидел :)

        Одобряю :-)
        • 0
          А по какому алгоритму, фигурки в тетрисе вертели?
        • +1

          http://krushelnitsky.narod.ru/progs/kv/
          здесь. лабиринты похожи на оригинал, но есть и новые. можно убить несколько часов, а то и день.
          сайт зарекламлен, чистая ссылка на EXE для PC http://krushelnitsky.narod.ru/progs/kv/zip/sk_kings_valley_2k_1_00.zip

          • +1
            Запускается и работает. Надо будет поиграть… :-)
            • +1
              Станислава Крушельницкого, в свое время, портирование игр с БК очень сильно зацепило. Собственно, порт Load Runner-а у него тоже есть. Возможно вы о нем и говорили в соей статье. Также у него есть еще несколько игр с БК 0010:
              Load Runner
              Circler
              King's Valley 2K
              Mars
              А все началось с того, что он увидел мой порт Boulder Dash с БК-шки, связался со мной и попросил помочь ему сделать аналогичную вещь с King's Valley.
              Кстати, для портирования уровней 1 к 1 для этих игрушек мне тогда пришлось написать эмулятор БК, который и сейчас здравствует и продолжает поддерживаться.
              • 0
                Кстати, для портирования уровней 1 к 1 для этих игрушек мне тогда пришлось написать эмулятор БК, который и сейчас здравствует и продолжает поддерживаться.

                Это, кстати, очень круто! У меня есть очень «задняя мысля» тоже когда-нибудь сделать эмулятор. Вроде бы как делать мне понятно, но работа не маленькая, так что пока руки не доходят.

                Собственно, порт Load Runner-а у него тоже есть. Возможно вы о нем и говорили в соей статье.

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

                А все началось с того, что он увидел мой порт Boulder Dash с БК-шки, связался со мной и попросил помочь ему сделать аналогичную вещь с King's Valley.

                Я скачал ваш Boulder Dash. И действительно… вижу, что у вашей программы и у King's Valley похожее меню. Очевидно, что ваш совет помог Станиславу :-)
                • +2
                  Вы извините меня, конечно, но игра-то называется Lode Runner.
                  Это я знаю достоверно, я с этой ошибкой уже больше 10 лет в интернете живу :)
                  • 0
                    :)) ну да, конечно, вы правы. Видимо это профессиональная деформация уже.
          • +1
            Молодец! С удовольствием поиграю.
            • +1
              Приятно слышать. Спасибо!
            • +2
              Получил огромное удовольствие от прочитанной статьи, видно настоящий энтузиазм!
              • +1
                Получил огромное удовольствие от прочитанной статьи, видно настоящий энтузиазм!

                Благодарю за отзыв! Энтузиазм пока еще остался — это да. Не знаю, насколько меня хватит, но пока держусь :-)
              • +4
                Круто, спасибо за статью. Ух, как мила сердцу старая черно-белая пиксельная графика и как отвратно смотреть на весь этот современный мармелад в мобильных сторах :(
                • +1
                  Круто, спасибо за статью.

                  Рад, что вам понравилось!

                  Ух, как мила сердцу старая черно-белая пиксельная графика и как отвратно смотреть на весь этот современный мармелад в мобильных сторах :(

                  Насчет мобилок я согласен — всё же это «попса» для выкачивания денег из подростков. Я вот насчет черно-белости… я не уверен, что оригинал был черно-белым. Просто почти у всех были черно-белые телевизоры :-) Цветные стоили очень дорого и у них всегда красный цвет пропадал в течение года, и в результате они показывали всё в зелено-синем цвете. По крайней мере, цветной вариант этого Lode Runner-а я точно видел, но… на БК-0010 цветность была подстать эпохе — 4 цвета на пиксель. Обычно это выглядело достаточно ядовито.
                  • 0
                    На БК0010 цветной режим (256 пикселов в строку) был аппартно одновременно с чернобелым (512 пикселов в строку), смотря к какому видеовыходу цепляться.
                    • 0
                      У БК два отдельных видеовыхода? Не знал…
                      • 0
                        два 5-штырьковых дин-порта: цветной и ч/б,
                        причём при несложной перепайки (через резисторы) цветного в черно/белый, можно добиться приятной (имхо) 4 градиетной ч/б графики на 256 пикселей на строку
                        • 0
                          Я просто всегда считал, что отдельный чб выход не сильно нужен, так как R, G, B можно объединить в один выход через резисторы. Результатом как раз и был этот чб выход. Хотя… БК-0010 был серийным компом, поэтому, наверное, сделали как фичу заранее.
                • +5

                  Посмотрел. Вы молодец! Однако у всех ностальгия чуть разная… Я играл в Lode Runner на PC как раз в тот, где надо было стрелять по бокам, а провалившиеся в пол преследователи вмуровывались в пол и после этого появлялись в левом верхнем углу, что заметно меняло геймплей. Кстати, стрельба под себя, с моей точки зрения — "читерство" :) потому что позволяет тупо пробиться сквозь пол вниз. В оригинале приходилось снимать слой за слоем и делать лесенку, чтобы добраться до сокровищ, расположенных в толще. Это вносило дополнительный элемент головоломки. Вот в него то я бы поиграл, однако нигде не могу найти… :(

                  • 0

                    Поищите Lode Runner 2 от сиерры — оно было под винду, но уровни 1-в-1 ну и на old games вроде был оригинальный DOS овский…

                    • 0
                      Посмотрел. Вы молодец!

                      Спасибо!

                      Однако у всех ностальгия чуть разная…

                      С этим не поспоришь :-)

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

                      Я, думаю, что могу объяснить, почему на БК-0010 был реализован именно такой вариант. Дело в том, что там, по-моему мнению, просто ужасно была реализована работа клавиатуры. Нельзя было нажимать 2 кнопки одновременно. Сначала надо было обязательно отпустить первую, а потом уже нажать вторую, иначе вторая бы просто проигнорировалась. Эта, на мой взгляд, глупость существовала на аппаратном уровне, и отделаться от нее было невозможно. Поэтому, а предполагаю, что автор оригинала реализовал именно такой вариант. Но меня он вполне устраивает :-)
                      • 0
                        помню после BK-0010 во дворце пионеров на своем спектруме ( когда он появился ) запустил и некоторое время никак не мог понять — что, тут, собственно, происходит !? :)
                        • 0
                          На БК, на мой взгляд, гораздо интереснее вариант был :-)
                    • 0
                      Мне тоже запомнилась версия от Sierra On-Line — в ней можно было прожигать пол, разливать липкий клей (мёд?) и анимация персонажей на то время (1998) казалась очень живой:

                      image

                      Lode Runner: The Legend Returns
                      • 0
                        Мне тоже запомнилась версия от Sierra On-Line

                        Определенно выглядит она значительно красивее, чем оригинал и то, что получилось у меня. Я её тоже видел и по скрину сразу вспоминается.
                    • +1
                      Почему в этой ситуации девочку не сожрали?
                      • +1
                        Почему в этой ситуации девочку не сожрали?

                        Я специально повторил этот нюанс из оригинала, чтобы было одинаково. Должен признать, что, раньше я тоже думал, что это авторский баг. Но когда стал переделывать, то понял, зачем это нужно. Если, например, девочка лезет вверх по лестнице, а привидение ползет за ней, то девочка сможет спрыгнуть и пролететь мимо привидения, которое будет продолжать лезь наверх. Иначе бы привидение спрыгнуло и поймало падающую девочку — а это мне не нравится :-). Именно поэтому я написал отдельную проверку, чтобы вплотную к лестнице можно было стоять.
                        • +1
                          А вот и зря. В той версии, что играл я, монстры как раз прыгали вместе с человечком (но летели медленнее) и было намного сложнее проходить.
                          • 0
                            А вот и зря. В той версии, что играл я, монстры как раз прыгали вместе с человечком (но летели медленнее) и было намного сложнее проходить.

                            Ну, понятно, что могут быть разные варианты. Но я привык к таким правилам и поэтому их и реализовал, как наиболее комфортные для себя.
                            • +1
                              В нашем возрасте пора уже упрощать правила :)
                              • +1
                                В нашем возрасте пора уже упрощать правила :)

                                Ну, не знаю… я себя пока старым не считаю :-) Единственное что меня как-то наводит на мысль о моем среднем возрасте это то, что почти все мои любимые актеры постарели, а многие уже и отошли в мир иной. И все это происходило в то время, пока я жил.
                              • 0
                                В той версии, что играл я, монстры как раз прыгали вместе с человечком (но летели медленнее)


                                Ускорение свободного падения должно действовать на всех одинаково, если конечно ты не одуванчик. Уж монстр-то и герой — точно не принципиально отличаются по парусности.

                                • 0
                                  Ускорение свободного падения должно действовать на всех одинаково, если конечно ты не одуванчик.

                                  Теоретически, конечно, привидение вообще падать не должно :-)
                                  • 0
                                    В оригинале там человечки, а не приведения.
                                    • +1
                                      В оригинале там человечки, а не приведения.

                                      Это, конечно, верно. Но игра просто должна быть игрой и реализм тут иногда бывает излишен. Например, всем известный Counter Strike… в человека попали из калашника, а он бегает себе как ни в чем не бывало с 3% жизни. Логично? Нет, но зато вполне играбильно.
                                • 0
                                  В той версии, что на «Агатах» залипали в детстве мы — суммарная скорость монстров была чуть меньше скорости персонажа. Соотв. если на уровне монстр был один — то это был практически другой уровень, чем если их там было пять — полностью другие тактика и стратегия прохождения, от него убежать очень трудно, но зато он не окружает и почти не срезает.
                                  И да — редактор уровней был в комплекте игры с самого первого оригинального исходника всегда на всех платформах, куда он был боль-менее прилично портирован.

                                  Вообще алгоритм поведения монстров — очень разный на всех платформах что встречал — что очень сильно меняет игру даже на тех же уровнях. Ну и (не)возможность поставить на паузу.
                                  Эххх «где мои 15лет»…
                                  • 0
                                    Добавлю, что некоторые уровни и без монстров очень непросты — и годятся как весьма неплохие головоломки.
                                    • 0
                                      В той версии, что на «Агатах» залипали в детстве мы

                                      Агат не видел, к сожалению.

                                      Вообще алгоритм поведения монстров — очень разный на всех платформах что встречал — что очень сильно меняет игру даже на тех же уровнях.

                                      Естественно. Там от игры одно название остается.

                                      Ну и (не)возможность поставить на паузу. Эххх «где мои 15лет»…

                                      Save/Load — вот что делает игру по настоящему простой :-)
                                      • 0
                                        Агат — это немного изувеченный Apple ][ с дисководом. Со всеми вытекающими…
                                        • 0
                                          Ну, я и Apple 2 тоже не видел :-) Но он был очень успешный, насколько мне известно.
                              • +2
                                Это бага или фича — когда под собой копаешь, то не падаешь в эту яму?
                                Чтоб в неё упасть, надо отойти в сторону и вернуться, тогда упадёшь.
                                • 0
                                  Это бага или фича — когда под собой копаешь, то не падаешь в эту яму?

                                  Это геймплей. Именно так работает оригинал и я, естественно, сделал также. Согласен, что выглядит странновато, но все оригинальные лабиринты заточены именно под этот вариант. К слову говоря, у меня в отличии от оригинала можно резко поменять направление движения на противоположное — я посчитал, что это удобно и не сильно портит правила игры. Но для ситуаций, когда под девочкой пустота я специально отключил эту возможность, т.е. мельтешить вправо-влево в этом случае не получится.
                                • 0
                                  Во-первых, весьма круто! :)
                                  Я в одно время тоже занимался воссозданием на ПК игры с другой платформы (чтобы человек, который любит эту игру, освободил девайс от регулярных баталий длительностью в пол-дня) — так что могу понять, как иногда сложно воспроизвести действия AI, анализируя их шаблоны поведения «на глазок».
                                  А, во-вторых, Вы случайно написали заново Qt :) Он как раз и рождён с задумкой, чтобы дать программисту возможность натыкать кнопочек без забот, как внутри оно реализуется средствами платформы :)
                                  По сути, весь этот кроссплатформенный интерфейс с лёгкостью и долей удовольствия в пол-пинка делается с использованием Qt, а потом также в пол-пинка собирается и везде работает одинаково. Осваивается Qt на уровне «сделать интерфейс» за пару недель не очень активного копания, удобен, вредных привычек не вырабатывает. Как сказал один товарищ, «жизнь слишком коротка, чтобы писать велосипеды».
                                  В третьих, немного удивительный способ рисования содержимого экрана. Можно и так, конечно, но… почему именно так? В объектной парадигме оно нынче как-то привычнее (и, после того, как я попробовал оба варианта, то, ИМХО, удобнее).
                                  • 0
                                    Во-первых, весьма круто! :)

                                    Спасибо на добром слове!

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

                                    Да уж… приходится повозиться :-)

                                    А, во-вторых, Вы случайно написали заново Qt :) Он как раз и рождён с задумкой, чтобы дать программисту возможность натыкать кнопочек без забот, как внутри оно реализуется средствами платформы :)

                                    Честно говоря, я этот Qt в глаза не видел :-) Я предполагал, что смысл там примерно как у меня, но, думаю, что у них всё гораздо более продвинуто. У меня же это пока на уровне «самопользования», хотя… работает и это уже хорошо. Возможно, что со временем я проработаю свой GUI более детально, так как потенциал в нем, на мой взгляд, имеется. По крайней мере, с нуля я бы с этой игрой возился гораздо дольше.

                                    Как сказал один товарищ, «жизнь слишком коротка, чтобы писать велосипеды».

                                    Это понятно, но в моем случае я писал свою оболочку для вот этой игры. И мне был нужен именно свой вариант, так требовался полный контроль. Там к тому же графика 16-битная и всё работает под это. В результате я сделал всё сам, так как присутствовало слишком много тонкостей, включая визуализацию спрайтов ассемблером. А сейчас… ну, просто эта штука у меня уже есть. И мне с ней куда приятнее, чем с Qt, так как она «моя родная» :-)
                                  • 0
                                    У БК0010 не было проблем с ассемблером. Просто архитектура PDP-11 позволяла очень удобно прграммировать сразу в машинных кодах.
                                    • 0
                                      У БК0010 не было проблем с ассемблером. Просто архитектура PDP-11 позволяла очень удобно прграммировать сразу в машинных кодах.

                                      Если вы программировали на БК-0010, то вам, конечно, виднее. Я тут теоретик. Программировал на процессорах КР580ВА80 и Z-80. Но, честно говоря, брать чистые коды против ассемблера я бы не стал. Хотя… может быть тут дело вкуса и привычки.
                                      • 0
                                        Но, честно говоря, брать чистые коды против ассемблера я бы не стал.
                                        Понятно что ассемблер удобнее. Но для PDP-11 действительно несложно писать в кодах. Сложение — 06, вычитание — 16, чего тут сложного? Если писать в восьмеричной системе — всё очень просто.

                                        Но вот кстати не думаю, что у автора оригинального Lode Runner-а были какие-то сильно отличающиеся от моих возможности — тут вы глубооооко ошибаетесь. Свой знаменитый BASIC Билл Гейтс с Алленом писали на PDP-10, а оригинальный Lode Runner — на Prime Computer 550 и VAX'е и использовались для этого вполне (по тем временам) современные FORTRAN и PASCAL.

                                        Да, были умельцы, которые всё делали на персоналках (тот же Мекнер), но я думаю лет через 30-40 люди будут программировать разговаривая со своим телефоном и тоже будут офигевать от того, как можно что-то было сделать на телефонах начала нулевых, когда какой-нибудь Mobile C даже системы сборки приличной не умеет. Здесь — то же самое. Все почему-то считают, что игры начались где-то в 70е с примитивнейшего Pongа в 70е. Да нифига подобного! Посмотрите на Spacewar! — одну из популярйнеших игр 60х! Люди летали по реальному оцифрванному звездному небу до того, как большинство здешних посетителей родились. А потом — потом был регресс с переходом на миникомпьютеры и ещё раз — при мереходе на персоналки и приставки… скоро мы переживём очередной раз подобное с переходом на телефоны…
                                        • 0
                                          Для меня переход с ассемблера К580 на ассемблер К1801 был «вывихом мозга» (хотя на тот момент мне было столько же, сколько и автору статьи).
                                          • 0
                                            Для меня переход с ассемблера К580 на ассемблер К1801 был «вывихом мозга»

                                            Архитектура другая. Регистры другие. Хотя… принцип тот же самый.
                                            • 0
                                              Честные рон в отличии от специализированных К580, ортогональная система команд (все команды по 16 бит), произвольные коды адресации в составе команды, а не отдельными командами, возможность операций память-память. Отличия значительные.
                                              • 0
                                                По-моему, ассемблер везде одинаковый — регистры по разному называются, да и методов адресации может быть больше или меньше. Но сути это не меняет. Я на Intel когда-то с Z-80 перепрыгнул без проблем.
                                                • 0
                                                  Z80 — это просто доработанный Zilog процессор i8080 (К580).
                                          • 0
                                            Понятно что ассемблер удобнее. Но для PDP-11 действительно несложно писать в кодах. Сложение — 06, вычитание — 16, чего тут сложного?

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

                                            тут вы глубооооко ошибаетесь.

                                            Вполне возможно. Я в то время всё делал на том железе, на котором потом это и работало.

                                            я думаю лет через 30-40 люди будут программировать разговаривая со своим телефоном и тоже будут офигевать от того, как можно что-то было сделать на телефонах начала нулевых

                                            Я думаю, что это уже будет не программирование, а что-то другое. Сейчас нечто подобное получилось в области музыки, благодаря появлению синтезаторов, которые, по сути, могут издавать вполне себе приятное музыкальное сопровождение без участия человека. Также появилось много программ, которые помогают писать музыку. Как результат сильно понизился порог входа в данную область — многие что-то там играют не зная нот. И это неплохо, если это не начинает «подниматься на знамена», как признак «продвинутости».

                                            Все почему-то считают, что игры начались где-то в 70е с примитивнейшего Pongа в 70е. Да нифига подобного!

                                            Ну, естественно! Но в СССР этого не было, поэтому я как-то привык к тому, что первые игры появились начиная с БК-0010. Правда, были игровые автоматы типа «Морской бой», но это, скорее, механика.

                                            мы переживём очередной раз подобное с переходом на телефоны…

                                            Ну, пока телефоны — это, скорее, игрушки. Работать на нем нельзя, даже подходящего управления для игр нет — тыканье пальцем в экран не охватывает весь спектр возможностей по управлению. Ну и размеры… мелко всё очень. Т.е. перед таким рывком в сторону телефонов должно еще что-то произойти, например, массовое внедрение голографических мониторов или что-то подобное. Но я согласен, что вектор движения в направлении «мыльниц» присутствует.
                                      • 0
                                        Держитесь подольше, Алексей Павлович. Когда-нибудь не-кто-нибудь тоже напишет: «Лично не знал, но благодарен тов.Седову за пробуждение страсти к созиданию.»
                                        При запуске в Ubuntu 16.04 получил «error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file:». Доустановил libsdl2-2.0-0, libbass. Запускается, чертяка. И затягивает ведь.
                                        • 0
                                          Держитесь подольше, Алексей Павлович. Когда-нибудь не-кто-нибудь тоже напишет: «Лично не знал, но благодарен тов.Седову за пробуждение страсти к созиданию.»

                                          Хорошо, буду ожидать этого знакового для человечества события :-) А если серьезно, то спасибо на добром слове!

                                          При запуске в Ubuntu 16.04 получил «error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file:». Доустановил libsdl2-2.0-0, libbass. Запускается, чертяка. И затягивает ведь.

                                          Я не спец в Unix-ах. Сделал так… нужны либы положил в папку с игрой, положил саму игру в папку resources, а рядом с папкой положил скрипт game.sh, который должен был призапуске устанавливать переменную окружения LD_LIBRARY_PATH, а потом запускать игру. Установка этой переменной окружения должна была заставить ОС искать либы в папке с игрой. Проверял на Fedora — там сработало. Если знаете, как сделать лучше и универсальнее, то всегда готов выслушать.

                                          Запускается, чертяка. И затягивает ведь.

                                          Рад слышать, что играть интересно — я сам игрался, когда закончил.
                                          • 0
                                            Такая же ошибка в Fedora 26: "error while loading shared libraries: libbass.so: cannot open shared object file: No such file or directory".

                                            При этом файл лежит «под ногами», с правами всё в порядке. И не запускается игра… :(
                                            Не дали тряхнуть стариной. :)

                                            Доведёте — пойду свой первый самодельный «Специалист», лет с 30 пылящийся на полке, восстанавливать ради игры! :))
                                            • 0
                                              При этом файл лежит «под ногами», с правами всё в порядке. И не запускается игра… :(
                                              Не дали тряхнуть стариной. :)

                                              На всякий случай напоминаю, что запускать надо game.sh, а не LodeRunner.
                                              Можно еще либы скопировать в папку /lib64, /usr/lib64 или /usr/local/lib64. Уж где-то они должны найтись :-)

                                              Доведёте — пойду свой первый самодельный «Специалист», лет с 30 пылящийся на полке, восстанавливать ради игры! :))

                                              У меня, кстати, Специалист должен работать (по крайней мере, я его пару лет назад включал). Только магнитофона нет :-)
                                              • 0
                                                Можно еще либы скопировать в папку /lib64, /usr/lib64 или /usr/local/lib64. Уж где-то они должны найтись :-)

                                                В /usr/lib64
                                                Странно, что вчера не нашлась… :(
                                                Наверное, по ночам экспериментировать не надо. :))
                                                И ещё странно, что все библиотеки, кроме этой, спокойно берёт из своего каталога, а эту «в упор не видит»…

                                                У меня, кстати, Специалист должен работать (по крайней мере, я его пару лет назад включал). Только магнитофона нет :-)

                                                Есть всё — и «Специалист», который должен заработать после замены «электролитов» на плате и в блоке питания, и магнитофон, и кассеты все «живы». Нет только желания заниматься этим. :)
                                                Сейчас, десятилетия спустя, когда могу и аппаратную, и программную часть таких компьютеров разработать самостоятельно, в голове только один вопрос — «Зачем?!..». :))

                                                А вот на рабочем компьютере под Linux игрушку старую запустить иногда и отвлечься от дел — это годится. :)
                                                • 0
                                                  Странно, что вчера не нашлась… :(
                                                  Наверное, по ночам экспериментировать не надо. :))

                                                  Ну, «магия внутри компьютера» — это дело распространенное :-)

                                                  И ещё странно, что все библиотеки, кроме этой, спокойно берёт из своего каталога, а эту «в упор не видит»…

                                                  Я к сожалению, в этих Unix-ах новичок. Но я уже понял, что здесь как на Windows не прокатывает положить динамическую библиотеку рядом с exe. Надо бы всё в статике пересобрать, но libBASS.so я не вижу на сайте в статическом варианте, по крайней мере, в свободном доступе.

                                                  и кассеты все «живы».

                                                  Вот в жизни кассет я бы не был так уверен. «Загрузочный скрип» издавать-то они будут, а вот прочитает ли это компьютер — это вопрос.

                                                  Сейчас, десятилетия спустя, когда могу и аппаратную, и программную часть таких компьютеров разработать самостоятельно, в голове только один вопрос — «Зачем?!..». :))

                                                  Пожалуй, это самый сложный вопрос в жизни :-) Но себя мне удалось мотивировать на какое-то время.

                                                  А вот на рабочем компьютере под Linux игрушку старую запустить иногда и отвлечься от дел — это годится. :)

                                                  И удобно, и комфортно, и электролиты менять не надо :-)
                                                  • 0
                                                    Но я уже понял, что здесь как на Windows не прокатывает положить динамическую библиотеку рядом с exe
                                                    А бинарник-то к этому готов? По умолчанию считается, что библиотека должна быть частью операционки, а не поставляться с бинарником…
                                                    • 0
                                                      А бинарник-то к этому готов?

                                                      Не вижу препятствий.

                                                      По умолчанию считается, что библиотека должна быть частью операционки, а не поставляться с бинарником…

                                                      Честно говоря, мне правила Linux-ов пока кажутся странными. Библиотеки же частенько обновляются, и программа может работать с одной версией и не работать с другой. Соответственно, самое разумное решение — это позволить класть библиотеку рядом с пусковым файлом. Ну, либо статику линковать, раз уж с динамикой такие проблемы.
                                                      • 0
                                                        Да вот, таки и нет. Программы в Linux пересобираются с той версией библиотеки, которая есть в системе. Иметь туеву хучу версий одной и той же библиотеки в системе, вряд ли можно назвать разумым решением.
                                                        • 0
                                                          Программы в Linux пересобираются с той версией библиотеки, которая есть в системе.

                                                          Так я же про so говорил. Они вообще не собираются.

                                                          Иметь туеву хучу версий одной и той же библиотеки в системе, вряд ли можно назвать разумым решением.

                                                          Ну, это же не в системе, а в папке с собственной программой. На Windows это вполне логично.
                                                          • 0
                                                            На Windows это вполне логично.
                                                            В Windows вообще много «грязи». Если хотите воспроизвести — задайте в rpath просто $ORIGIN без дополнительных уточнений. Хотя обычно полезно складывать библиотеки в подкаталог «lib», чтобы не засорять каталог с бинарниками…
                                                            • 0
                                                              Если хотите воспроизвести — задайте в rpath просто $ORIGIN без дополнительных уточнений.

                                                              Секунду… разве Linux ищет либы по умолчанию в папке с запускаемым файлом? Он же любит искать в lib64 и /usr/lib64, а в папку с пусковым файлом он вообще не ходит по таким делам, насколько я понимаю.
                                                              • 0
                                                                Секунду… разве Linux ищет либы по умолчанию в папке с запускаемым файлом?
                                                                По умолчанию — нет. Но если вам это очень нужно — можно добавить $ORIGIN в rpath. Ссылку на статью я давал.

                                                                Он же любит искать в lib64 и /usr/lib64, а в папку с пусковым файлом он вообще не ходит по таким делам, насколько я понимаю.
                                                                Правильно понимаете. Это сделано специально. Не должны разделяемые библиотеки быть частью бинарника — для этого статические библиотеки есть! Но если вам очень хочется такого поведения — это тоже возможно.
                                                                • 0
                                                                  По умолчанию — нет. Но если вам это очень нужно — можно добавить $ORIGIN в rpath.

                                                                  Всё, дошло до меня, что я никак понять не мог — есть rpath внутри пускового файла.

                                                                  Но если вам очень хочется такого поведения — это тоже возможно.

                                                                  Очень хочется — это решает все проблемы с запуском.
                                                            • 0
                                                              Так я же про so говорил. Они вообще не собираются.

                                                              Э-э-м… А откуда берутся .so? Существуют с начала времён? Этакие протобиблиотеки.
                                                              Ну, это же не в системе, а в папке с собственной программой. На Windows это вполне логично.

                                                              Это не логично нигде. Это костыль проприетарного софта, и только.
                                                              • 0
                                                                Э-э-м… А откуда берутся .so? Существуют с начала времён? Этакие протобиблиотеки.

                                                                Я имел в виду, что они не собираются в состав моего пускового файла.

                                                                Это не логично нигде. Это костыль проприетарного софта, и только.

                                                                Хорошо. Тогда как мне скопировать эти so в нужное место на компьютере пользователя? (мне же их надо поместить в то место, где ОС их найдет). Я так подозреваю, что придется тогда программу оформлять в виде пакета, который будет грузиться из каталогов в интернете. Так?
                                                                • 0
                                                                  Хорошо. Тогда как мне скопировать эти so в нужное место на компьютере пользователя? (мне же их надо поместить в то место, где ОС их найдет). Я так подозреваю, что придется тогда программу оформлять в виде пакета...

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

                                                                    Может быть, но мне казалось, что эта игра слишком мала, чтобы так заморачиваться. Тем более я не знаю, как это делается.

                                                                    Однако, если уж Вам кажется, что лучше или удобнее, когда библиотеки лежат в одном каталоге с программой, то как минимум, надо научить свою программу видеть эти библиотеки именно там.

                                                                    Этот вопрос мне уже удалось решить — версию для Linux на сайте я заменил. По крайней мере, у меня этот вариант работает правильно и находит библиотеки в папке с игрой.
                                                                • 0
                                                                  С тем же успехом костылями можно назвать использование ldd, locate и ln, чтобы foo.bar.so попало в /lib (/lib64) или в /usr/lib (/usr/lib64) из /bin (/usr/bin).
                                                                  А чтобы костылей не было нужно всего лишь следовать правилу: «Не надо тянуть Windows-style программирование в Linux, а Linux-style программирование в Windows».
                                                                  • 0
                                                                    «Не надо тянуть Windows-style программирование в Linux, а Linux-style программирование в Windows».

                                                                    Это понятно, но лучше сделать хоть как -то чем вообще не сделать. Зато потом можно показать и исправить недочеты.
                                                            • 0
                                                              Не вижу препятствий.
                                                              Что значит «не вижу препятствий?»

                                                              Вы при сборке указывали rpath? А если нет — то с какого перепугу библиотеки должны искаться где-то, кроме системных каталогов?

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

                                                                Я не могу собрать тот же libBASS.so самостоятельно, так как на него нет исходников. Иначе бы я сразу всё сделал через статику.

                                                                Ну зачем же мусор-то разводить?

                                                                Не вижу никакого мусора в том, чтобы всё что относится к одной программе лежало в одной папке. С rpath знаком немного по MAC-у и не уловил в нем практического смысла — внутрь либы совать путь, где она может работать — это как-то странно, так как если уж либа нашлась программой, то зачем её еще и проверять на соответствие пути я не очень понимаю. Хотя я понимаю другое, что когда-то были придуманы какие-то стандарты, от которых теперь невозможно отказаться, хотя удобства в них я не вижу. Но может быть это просто взгляд со стороны Windows.
                                                                • 0
                                                                  Вы при сборке указывали rpath? А если нет — то с какого перепугу библиотеки должны искаться где-то, кроме системных каталогов?
                                                                  Я не могу собрать тот же libBASS.so самостоятельно, так как на него нет исходников. Иначе бы я сразу всё сделал через статику.
                                                                  Причём тут сборка libBASS.so? rpath задаётся при сборке бинарника. Прочтите же, наконец, статью. Она — как раз для таких, как вы…

                                                                  Не вижу никакого мусора в том, чтобы всё что относится к одной программе лежало в одной папке.
                                                                  А саму программу как вы при этом найдёте? В Linux принят подход при котором программы живут в /usr/bin и в /usr/local/bin — а вот уж там вашим библиотекам делать точно нечего. Это поведение по умолчанию. То, чего вы хотите — тоже возможно, но это — нестандартное поведение.

                                                                  С rpath знаком немного по MAC-у и не уловил в нем практического смысла — внутрь либы совать путь, где она может работать — это как-то странно, так как если уж либа нашлась программой, то зачем её еще и проверять на соответствие пути я не очень понимаю.
                                                                  rpath суётся не внутрь либы, а внутрь использующего либу бинарника.

                                                                  Хотя я понимаю другое, что когда-то были придуманы какие-то стандарты, от которых теперь невозможно отказаться, хотя удобства в них я не вижу.
                                                                  Они реально удобны — если вы собираете свою программу как «пакет» под соответствующую операционку. А если хотите чего-то другого — ручки соответствующие тоже есть.

                                                                  Но может быть это просто взгляд со стороны Windows.
                                                                  Это попытка придти со своим уставом в чужой монастырь… Обычно это кончается слезьми…
                                                                  • 0
                                                                    До меня наконец-то дошло, что я тупил с rpath, который можно поменять прямо в пусковом файле.
                                                                    Признаю своё поведение ослиным и благодарю за подсказку!

                                                                    Правда, статья всё же не совсем полная — я часа 4 угрохал, чтобы это-таки повторить. Но в результате всё же засунул в этот rpath значение $ORIGIN.

                                                                    Обновил файл linux-версии на сайте и надеюсь, что теперь будет запускаться у всех.
                                                                    • 0
                                                                      До меня наконец-то дошло, что я тупил с rpath, который можно поменять прямо в пусковом файле.
                                                                      А до меня только сейчас дошло что вы вообще пытались сделать. Мдаа… Ну то есть интеллектуально я понимал и понимаю, что rpath можно добавить и в библиотеку тоже — но ситуации, когда это может понадобиться настолько экзотические, что я как-то никогда не осознавал, что это кто-то может реально попробовать сделать!
                                                                      • 0
                                                                        А до меня только сейчас дошло что вы вообще пытались сделать.

                                                                        Главное, что разобрались :-)

                                                                        Ну то есть интеллектуально я понимал и понимаю, что rpath можно добавить и в библиотеку тоже — но ситуации, когда это может понадобиться настолько экзотические, что я как-то никогда не осознавал, что это кто-то может реально попробовать сделать!

                                                                        Дело в том, что Mac OS и его XCode по умолчанию собирают либы так, что их нельзя запустить из папки с проектом. И надо туда вписывать специально @executable_path, иначе Mac покажет большую фигу. И вот про это я как раз и знал.
                                                • 0
                                                  А меня в свое время очень впечатлила игра KLAD на компьютере КОРВЕТ. Это тоже что-то вроде Lode Runner, но немного по другому, мне эта версия гораздо больше нравилась, прошел ее всю. Человечек там пробивает не пол, а стены сбоку, выпуская пульки по ходу движения, а еще там есть вода, если в нее упасть, то человечек утонет, в остальном все похоже.
                                                  Вот даже видео геймплея нашел, если интересно: www.youtube.com/watch?v=7mDifWNj7Nw
                                                  Скрин

                                                  Компьютер КОРВЕТ

                                                  • 0
                                                    А меня в свое время очень впечатлила игра KLAD на компьютере КОРВЕТ.

                                                    Да, это тоже клон с БК-0010. Причем графика с виду такая же, только оттенки цветов изменены.

                                                    Это тоже что-то вроде Lode Runner, но немного по другому, мне эта версия гораздо больше нравилась, прошел ее всю.

                                                    Она скорее не на Lode Runner, а на Land похожа. Некоторые стены простреливаются и через некоторое время зарастают. Но Land, как мне казалось, был поинтереснее — там можно было «воду слить» и она была подвижная, а в Клад вода статичное.
                                                    У этого Клада на БК-0010 было аж 3 части — видимо людям нравилась эта игра.

                                                    в остальном все похоже.

                                                    На Lode Runner не совсем похоже. В Lode Runner охранники постоянно бегают, а в Клад на ту же позицию по X и Y. Практически, они часто находятся в неподвижном положении, ориентируясь на главного героя. Как раз такие правила в Land.
                                                    • 0
                                                      В комментариях пишут, что это клон Rise Out
                                                      • 0
                                                        В комментариях пишут, что это клон Rise Out

                                                        А ведь и правда.
                                                  • 0
                                                    Если я правильно понял, то оригиналом в вашем случае был Lode Runner на БК-0010 от «Markov A» AKA «Action Corp». Над этой игрушкой я тоже поработал — geektimes.ru/post/261074
                                                    • 0
                                                      Если я правильно понял, то оригиналом в вашем случае был Lode Runner на БК-0010 от «Markov A» AKA «Action Corp».

                                                      Вы совершенно правы.

                                                      Над этой игрушкой я тоже поработал — geektimes.ru/post/261074

                                                      Я вашу статью даже читал :-) Единственно что… я не знаком с УКНЦ. Даже не слышал такое название. Но как бы это не важно, а важно, что вы это сделали.
                                                    • 0
                                                      Разве процесс выкапывания ямы и ее исчезновения — были мгновенными?
                                                      • 0
                                                        Разве процесс выкапывания ямы и ее исчезновения — были мгновенными?

                                                        Именно так. Lode Runner на КБ-0010 обладает высоким темпом игры — тут нельзя долго стоять на месте и раздумывать — требуется постоянно движение.
                                                        • 0
                                                          Я имею ввиду — мгновенным с точки зрения главного героя, да. Копаешь на бегу.

                                                          Но с точки зрения анимации в той версии, что я видел — яма исчезала постепенно.
                                                          • 0
                                                            Но с точки зрения анимации в той версии, что я видел — яма исчезала постепенно.

                                                            Я в начале думал над тем, чтобы анимировать яму, но потом решил что и так вполне хорошо. Да и в оригинале также нет анимации.
                                                      • 0
                                                        Хороший повод передать привет всем БКшечникам. :) Привет!

                                                        Я тоже не так давно занимался восстановлением игры с БК 1 в 1.
                                                        Miner Bold на БК-0010 был довольно самобытным, а качество портов на тот момент меня не устроило… Порт писал на Lua, с использованием своего движка INSTEAD.

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

                                                        В общем, в копилку портов. Онлайн версия Bolder Dash Мелентьева А.В. (заставка, выбор уровней и happy end оформлены по другому):
                                                        instead-games.ru/instead-em/instead-em.html?/games/instead-minerbold-1.3.zip
                                                        Язык интерфейса можно выставить внутри игры нажав esc/ настройки…

                                                        Для нативной версии под разные ОС можно скачать INSTEAD: instead.syscall.ru
                                                        И саму игру тут: instead-games.ru/game.php?ID=197
                                                        • 0
                                                          Код оригинала пришлось дизассемблировать, зато алгоритмы удалось повторить 1 в 1. :)

                                                          Очень круто! Я вот ленюсь дизассемблером пользоваться :-)
                                                          Онлайн версия Bolder Dash Мелентьева А.В. (заставка, выбор уровней и happy end оформлены по другому):
                                                          instead-games.ru/instead-em/instead-em.html?/games/instead-minerbold-1.3.zip

                                                          Ну, надо же… Emscripten… интересное применение.

                                                          Поиграл немного. Очень нервно — убивают постоянно. Тут навык нужен :-)
                                                        • 0
                                                          Смущает еще вопрос копирайтов — а законно ли использовать старые карты уровней.
                                                          • 0
                                                            Смущает еще вопрос копирайтов — а законно ли использовать старые карты уровней.

                                                            На мой взгляд, вопрос копирайтов волнует только торгашей (т.е. правообладателей имущественных прав). Авторов этот вопрос никогда особенно не волновал. Например, человек написал книгу — ему важно чтобы кто-то её прочел и даже бесплатно. Вопрос с правами возникает, когда в цепочку между автором и читателем вклиниваются торгаши — вот для них да… важно заработать.
                                                            Оценку дал исходя из собственного мироощущения. Формально может быть вы и правы, но по-человечески, я не вижу, что кого-то обманул или обокрал.
                                                          • 0

                                                            под Маком не работает пробел, или я не знаю, как его использовать

                                                            • 0
                                                              под Маком не работает пробел, или я не знаю, как его использовать

                                                              Хм… сейчас специально проверил еще раз. Всё работает. Надо его применять над желтыми кирпичами.
                                                          • +1

                                                            Вместо этого:


                                                                    // для Linux
                                                                pid_t pid=fork();
                                                                if (pid>=0)
                                                                {
                                                                        if (pid==0)
                                                                    {
                                                                        CMagicString param="xdg-open ";
                                                                        param+=link;
                                                                        system(param);
                                                                        _exit(0);
                                                                    }
                                                                }

                                                            Можно было бы сделать что-то вроде, если просто:


                                                            CMagicString param = "xdg-open ";
                                                            param += link;
                                                            param += " &";
                                                            system(param);

                                                            Или же делать уже правильно через fork/vfork + exec или posix_spawn. Пример первого можно глянуть тут, только ловить сигнал смерти потомка SIGCHLD вместо непосредственного вызова waitpid, что бы не плодить новых "охранников" лабиринта процессы-зомби.

                                                            • 0
                                                              Можно было бы сделать что-то вроде, если просто:

                                                              Я делал также, но без param += " &"; и у меня игра зависала, пока браузер не закроешь. Дело в этом " &"?
                                                              • 0
                                                                • 0
                                                                  Изящное решение, но… самостоятельно никогда не догадаешься.
                                                                  • 0

                                                                    Да собственно как о доброй части магии BAT и CMD файлов :) В Windows, к примеру, что бы не блокировать FAR или просто консоль нужно использовать start в комбинации с /K или /C (пишу по памяти).

                                                                    • 0
                                                                      Да собственно как о доброй части магии BAT и CMD файлов :)

                                                                      да, всё верно :-)
                                                              • 0
                                                                Классный совет, спасибо!
                                                                С это строкой param += " &"; работает правильно и не надо fork() делать. Меня так вполне устраивает.
                                                                • 0

                                                                  Главное, в более серьёзном проекте чуть более детально разберите нюансы, а то может случиться как у меня недавно: в основном приложении открывалась камера /dev/video0, потом делался QProcess::startDetached() для простенькой утилитки, которая про камеру и работу с ней знать не знает… Основное приложение закрывалось, а утилита нет. После чего к камере никто не может получить доступ к камере… пока утилиту не закроют. Всё дело, что устройство открыто без флага CLOEXEC, а я почему-то надеялся, что QProcess об этом как-то позаботится (да и сам забыл про этот нюанс, каюсь). В результате открытый дескриптор оставался в приложении, которому он и нужен не был, а держать оно его продолжало. Как собака на сене.

                                                                  • 0
                                                                    Главное, в более серьёзном проекте чуть более детально разберите нюансы, а то может случиться как у меня недавно

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

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

                                                                    Я понимаю, о чем вы говорите.
                                                              • 0

                                                                В свое время я пытался освоить все игры для ZX Spectrum — тоже было непросто. А вот для 3DO задача оказалась выполнима, но полгода выпало из жизни.

                                                                • 0
                                                                  В свое время я пытался освоить все игры для ZX Spectrum — тоже было непросто.

                                                                  Да их же просто дохрена :-) Играми на Spectrum часто коммерческие компании занимались — там всё серьезно было.
                                                                  • 0

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

                                                                    • 0
                                                                      Думаю, что как минимум тысяч 10 существует. Но реально классных игр, конечно, не так много.
                                                              • 0
                                                                Я в эту игру а так же Land, Клад, Клад2 проиграл все лето 1990 года (мне в мае того года родители купили БК-0010.01, как раз я заканчивал 9-ый класс). За лето разобрался с бейсиком (до этого вообще не знал ни чего о программировании), а осенью сел за ассемблер — вся инфа только из инструкции, что шла с бэкашкой. Потом у знакомого увидел Раио-86РК и там была игра типа Lode Runner, но там человек мог прыгать и перепрыгивать через приведений. Я загорелся и написал аналог на БК. Графику честно стырил с Lode Runner, только вместо приведений у меня были пузыри, которые скакали, при этом при ударе о пол, они немного деформировались. Логика была как в Lode Runner + еще человек мог прыгать. Игру назвал Lode Jumper.
                                                                БК уже давно нет, и игра тоже не сохранилась.
                                                                • 0
                                                                  Я в эту игру а так же Land, Клад, Клад2 проиграл все лето 1990 года (мне в мае того года родители купили БК-0010.01, как раз я заканчивал 9-ый класс).

                                                                  Свой компьютер — это почти как заветная мечта была. Ко мне весь двор ходил играть.

                                                                  За лето разобрался с бейсиком (до этого вообще не знал ни чего о программировании), а осенью сел за ассемблер — вся инфа только из инструкции, что шла с бэкашкой.

                                                                  Я по статьям в журналах пытался разбираться. В журнале «Радио» каждый раз что-нибудь печатали. А с БК… да… там книжка была с перечисленными командами и пояснениями.

                                                                  Потом у знакомого увидел Радио-86РК и там была игра типа Lode Runner,

                                                                  Скорее всего, это не Радио-86РК. Если я ничего не путаю, то Радио-86РК вообще не умел показывать обычную точечную графику — только символы/буквы. Хотя… могу ошибаться, но я всегда был в этом уверен.

                                                                  Я загорелся и написал аналог на БК.

                                                                  Я тем же самым занимался в то время :-)

                                                                  > Игру назвал Lode Jumper. БК уже давно нет, и игра тоже не сохранилась.
                                                                  А у меня может быть что-то и сохранилось — кассеты до сих пор лежат. Но шансов на то, что они прочитаются мало.
                                                                  • 0
                                                                    Нет, точно Радио86РК, там в игре все символами было нарисовано :)
                                                                    • 0
                                                                      Нет, точно Радио86РК, там в игре все символами было нарисовано :)

                                                                      Если символами, то точно Радио86РК :-)
                                                                • 0
                                                                  Отличная теплая ламповая статья, ностальгия по старым добрым временам.
                                                                  Мое первое знакомство с компьютерами началось с «Микроши». )
                                                                  Вспомнился еще набор ручками программ из журналов на Бейсике…
                                                                  Автору большое спасибо и удачи!
                                                                  • 0
                                                                    Отличная теплая ламповая статья, ностальгия по старым добрым временам.

                                                                    Благодарю на добром слове!

                                                                    Мое первое знакомство с компьютерами началось с «Микроши». )

                                                                    Микроша в свое мне очень помог тем, что про него была статья, где были перечислены все команды ассемблера КР580ВА80 — это мне наконец-то позволило «въехать» в этот Ассемблер.

                                                                    Вспомнился еще набор ручками программ из журналов на Бейсике…

                                                                    Точно. Я тоже ассемблер так набрал и пару игр.
                                                                  • 0
                                                                    Обновил на сайте версию для Linux — надеюсь, что теперь она будет нормально запускаться.
                                                                    • 0
                                                                      > По-моему, на БК-0010 были еще и какие-то проблемы с ассемблером, так как один мой знакомый программировал на БК-0010 просто «в кодах».

                                                                      «Проблема» в том, что на PDP-11 всех разновидностей и клонов было настолько легко писать всё прямо в кодах, что ассемблер часто не использовали :)
                                                                      • 0
                                                                        «Проблема» в том, что на PDP-11 всех разновидностей и клонов было настолько легко писать всё прямо в кодах, что ассемблер часто не использовали :)

                                                                        Я, конечно, такое не понимаю, но раз не использовали, то, наверное, действительно эта PDP-11 какой-то божественный продукт :-)
                                                                        • 0
                                                                          Да, до сих пор тысячи людей её вспоминают совершенно ностальгически. Хотя для трезвого взгляда в её дизайне было таки огромное количество ляпов, не говоря уж про общую неэффективность по сравнению с «вылизанными» аналогами — ностальгию это не отменяет :)

                                                                          Из современных приёмов — её следует считать если не зачинателем, то хотя бы очень эффективным популяризатором little endianness, NZVC логики флагов условий…
                                                                          • 0
                                                                            Да, до сих пор тысячи людей её вспоминают совершенно ностальгически.

                                                                            Ностальгия — интересная штука. Часто она заменяет логику. Например, очевидно же, что новые игры гораздо красивее, навороченнее и с кучей прибамбасов. А всё равно часто человека тянет к тому, что понравилось когда-то давно. Я, например, в новые игры вообще не играю. Пробовал, но быстро становится неинтересно. А вот старые… я до сих пор иногда в спектрумовский «UFO» поигрываю. Бесит, что мышь там не работает, а так… отличная игра.
                                                                            • 0
                                                                              Ностальгия — интересная штука. Часто она заменяет логику.


                                                                              Да не так всё просто.
                                                                              Я на «Спектруме» в «Элиту» любил, а когда в начале 90-х обзавёлся первым 286-м и добыл переделанную на AT версию игры, то посмотрел на всю эту красоту, попробовал немного, плюнул — и не стал. Графику нарисовали, а игру — испортили.
                                                                              А это «проволочную» графику-то и на «Спектруме» в первые же минут игры замечать переставали, так игра захватывала…
                                                                              • 0
                                                                                Я на «Спектруме» в «Элиту» любил, а когда в начале 90-х обзавёлся первым 286-м и добыл переделанную на AT версию игры, то посмотрел на всю эту красоту, попробовал немного, плюнул — и не стал.

                                                                                Да, есть такой момент. Меня самого Элита не зацепила, но мой приятель от неё был в полном восторге. Нашел там какое-то супер-оружие (кажется называлось что-то типа «Клоакин Митен» — не помню короче), которое врагов «замораживало» во время боя. И с этой штукой в течение, наверное, года он одерживал славные победы :-) От игры не оторвать было.
                                                                                • 0
                                                                                  Не зря же она в Европе была признана лучшей игрой десятилетия (80-х)… :)
                                                                                  Помню, писали, что многие в неё по 6-8 и более лет играли (sic!). И я их понимаю… :))
                                                                                  • 0
                                                                                    Не зря же она в Европе была признана лучшей игрой десятилетия (80-х)… :)

                                                                                    Да, было дело. Мне, правда, кажется, что разработчики всех надули — в описаниях я читал, что там есть всякие «космические заводы» и необычные корабли, но их, типа, трудно встретить. Но, по-моему, это просто рекламны