Minetest: крафты, игры, моды
Благодаря API Python, Minecraft Pi Edition является прекрасным способом знакомства с программированием, а также азами 3D-геометрии. Но эта версия Minecraft далеко не такая полная, как коммерческая, и к тому же давно не обновлялась. По этому поводу есть даже петиция к разработчикам Minecraft, Mojang. Может быть, еще даже не поздно добавить туда свое имя.
Тем временем, у желающих добавить в свои воксельные приключения немного кода, появилась пара новых вариантов. Это дополнения к официальной (платной) версии Minecraft (например, ComputerCraft в стеке модов Forge), или Minetest — клон Minecraft с открытым исходным кодом, который можно настроить на собственный вкус при помощи простого в освоении языка Lua. Minetest существует с 2012 г., и его последний официальный релиз (0.4.14) вышел в апреле 2016 г. Мы уже рассматривали Minetest; населяющие ее существа и монстры тогда нас впечатлили. Зато не впечатлила ее производительность на Raspberry Pi.
Родной драйвер Pi, VideoCore, использует API OpenGL ES, ориентированный на мобильные приложения; OpenGL ES — это подмножество полнофункционального OpenGL, используемого настольными 3D-приложениями. В движке Irrlicht, на котором работает Minetest, использовался экспериментальный рендерер OpenGL ES, но на Pi он не пошел, поэтому обработка снова стала осуществляться средствами ПО, из-за чего играть стало практически невозможно. Однако стараниями Эрика Анхольта [Eric Anholt], у Raspberry Pi теперь имеется свой качественный драйвер OpenGL с открытым исходным кодом, под названием VC4 и с поддержкой версии API 2.1. Строго говоря, это драйвер экспериментальный, но при нашем тестировании проблем не возникало. Анхольт публикует еженедельный отчет о ходе разработки в своем блоге — http://anholt.livejournal.com.
Установить Minetest на вашем Pi или даже на вашем Linux-ПК легко (см. врезку «Установка Minetest» вверху стр. 97). Затем вы можете запустить игру из меню Raspbian (или его эквивалента на вашем настольном Linux) или из командной строки, если вам это больше по душе. Мы начнем с самого простого. На вкладке Singleplaye [Режим одного игрока] выберите New world [Новый мир] и дайте ему имя. Прочие настройки оставьте без изменения, и нажмите Create [Создать]. Установите флажок Creative Mode [Творческий режим] и уберите флажок Enable Damage [Включить повреждения]. Это предоставит нам доступ ко всем имеющимся блокам и не позволит навредить самим себе.
Нажав Play [Играть], мы погрузимся в причудливый и постепенно создаваемый мир. Вы можете исследовать его с помощью клавиш WASD, прыгать с помощью пробела и уничтожать/собирать предметы с помощью левой кнопки мыши. После нескольких минут игры наступают сумерки. Вы не можете использовать свой надежный смартфон в качестве дополнительного источника света, как это делают городские жители, когда им приходится провести ночь вдали от электричества. Но можно пробудить в себе своего внутреннего Макгайвера [Macguyver — герой американского приключенческого телесериала 1980-х, — прим. пер.] и создать факел. Поскольку мы находимся в творческом режиме, нам незачем беспокоиться о том, как добыть сырье. Все необходимое доступно в меню инвентаря, которое вы можете найти, нажав I. Для изготовления факела нужны палка и кусок угля. Которые, свою очередь, делаются из деревянных досок (любого вида) и угольного блока. Блоки Acacia Planks [Акациевые доски] и Coal Blocks [Угольные блоки] находятся на первой странице вкладки Nodes [Компоненты]; перетащите один из них в слоты инвентаря ниже. Теперь перейдите на вкладку Rafting [Крафт] и поместите Угольный блок в центр. Справа появится девять кусков угля, которые вы также можете перетащить в слот инвентаря.
Азбука крафтинга
Точно так же делаются палки из акациевых досок. Чтобы изготовить факел, надо поместить кусок угля по центру, а палку под ним. Слоты инвентаря, в которых хранится несколько единиц материала (например, наши девять кусков угля) можно разделить, перетаскивая правой кнопкой мыши. Половина останется в исходном слоте, а половина появится в целевом. Из одного куска угля и одной палки получится четыре факела. Однако можно создавать объекты из нескольких составляющих и без отходов: если мы разместим в центре все девять наших кусков угля, а все четыре акациевых доски на квадрат ниже, то сможем взять четыре факела с правой стороны, и у нас всё еще останутся те же восемь кусков угля и три палки. Но довольно арифметики, да и в творческом режиме это даже не имеет значения, поскольку всё не ограничено. Итак, давайте вернемся к главному — а именно, к огню! В игре доступен только верхний ряд инвентаря, поэтому поместите туда несколько воспламеняющихся предметов, прежде чем вернуться в игру. Активный слот инвентаря можно изменить с помощью клавиш 1-8 или колесика мыши — выберите тот, где хранятся факелы. Мы не можем носить факелы с собой, это было бы слишком просто; но можем закрепить их на полу (или на стенах, деревьях и даже на потолке) с помощью правой кнопки мыши. Тогда мы можем смотреть на огонь и наслаждаться собственным бессмертием (мы же отменили повреждения, помните?) до утра.
С восходом можем продолжить изучение мира или попробовать свои силы в крафте (т. е. ремеслах). Например, бревен много, и их можно легко преобразить в доски, подобно тому, как мы превратили угольные блоки в куски угля. Рецепты крафтов бывают либо «бесформенными», либо «наделенными формой». В тех, что имеют заданную форму, важно расположение составляющих внутри крафт-сетки, а в бесформенных — нет. Прочитайте руководство по крафтингу на вики http://wiki.minetest.net/Crafting, чтобы узнать больше. Помимо создания объектов, есть также плавление, при котором компоненты соединяются в печи. О том, как сделать печь, и о возможностях ее использования вы можете также узнать из вики.
Установка Minetest
Последняя версия Minetest доступна в стандартном репозитории Raspbian, поэтому для установки достаточно набрать:
sudo apt update
sudo apt install minetestА вот чтобы активировать экспериментальный драйвер видео, потребуется чуть больше усилий. Если вы пропустите этот шаг, Minetest будет работать, но невыносимо медленно, особенно на одноядерных Raspberry Pi. Начните настройку, используя
$ sudo raspi-configВыберите параметр 7 в «Расширенных настройках», затем прокрутите до номера АС (да-да, это тоже номер), GL Driver и поставьте «Да» напротив драйвера GL. Потребуется перезагрузка, чтобы изменения вступили в силу, что и будет вам предложено при выходе из raspi-config; просто выберите «Да». Несмотря на то, что он назван экспериментальным, в наших тестах новый драйвер проявил себя достаточно стабильным, и навряд ли может навредить Raspbian или другим приложениям, которые вы с ним используете. Но если это случится, можно легко вернуться к старому драйверу через raspi-config.
Пользователям более ранних моделей Pi с 256 или 512 МБ памяти для работы Minetest может также понадобиться увеличить объем,отведенный GPU. Сделать это можно через raspi-config, исключая модели со старой прошивкой, выпущенные ранее октября 2012 г. (если это про вас, читайте о том, как заменить файл start.elf). Как мы выяснили, 64 МБ видеопамяти достаточно, но более старым моделям с 256 МБ ОЗУ этого может не хватить.
Minetest также доступен в репозиториях большинства дистрибутивов (пользователи Ubuntu для установки могут воспользоваться приведенными выше командами), или же вы можете скомпилировать новейшую версию из https://github. com/minetest. О наличии Open GL на настольных системах можно не беспокоиться: сегодня он используется во всех драйверах, как открытых, так и коммерческих.
Запуск сервера
Запуск сервера Minetest в вашей локальной сети очень прост и позволяет разделить радости многопользовательского режима с вашими друзьями и семьей. Самый простой способ — запустить сервер на том же компьютере, на котором вы играете, хотя мы определенно не рекомендуем делать это на одноядерном Pi. Затем пользователи смогут подключиться к нему с других машин Windows и Linux или других Raspberry Pi в вашей сети. Для этого нужно указать машину, которая будет сервером (лучше, чтобы это была самая мощная машина в сети, но поддержка пары-тройки локальных пользователей вполне по силам современному ПК или Pi 2) и установить Minetest на ней и на всех остальных, которые будут ее клиентами. Затем установитесь на сервере и узнайте его локальный IP-адрес. Проще всего — набрав ip a в терминале. Затем запустите Minetest и перейдите на вкладку Сервер. Создайте новый мир либо используйте существующий, выберите имя для своего игрока (слева) и, по желанию, задайте пароль. Чтобы подключиться к своему серверу или подключить других, запустите Minetest на клиентской машине и перейдите на вкладку Клиент. Minetest получит из Прекрасного далека список серверов (или, по крайней мере, попытается: иногда возникают проблемы), но не беспокойтесь на этот счет. Просто введите локальный IP-адрес сервера в поле справа, оставьте порт по умолчанию (30000, если вы не изменили его на сервере), выберите имя и нажмите Подключиться.
Как только все присоединятся к игре, игроки смогут бегать туда-сюда, перепрыгивая друг через друга. Вредить друг другу они не могут — это было бы подло. Хотя отправлять сообщения, чтобы задеть чужие чувства, можно — нажмите t, а затем введите "Hello world" и нажмите Enter. Сообщение отобразится всем игрокам. Доступны и другие команды в стиле IRC — чтобы раздобыть их список, введите /help. Также можно запустить выделенный сервер (без прикрепленного к нему игрока) прямо из командной строки. Таким образом, сервер Minetest можно запускать на машине без монитора или на удаленном VPS. Просто выполните:
$ minetest --serverНа Raspbian (а также Debian, Ubuntu и их производных) есть минимальный пакет minetest-server, у которого нет всех графических зависимостей полного Minetest:
$ sudo apt-get install minetest- serverЗатем мы просто выполним $ minetestserver, отметив, что это не та команда, которая для полного пакета minetest. В этом пакете также поддерживается Systemd, так что сервер Minetest может запускаться автоматически.
Illuna — один из самых впечатляющих серверов Minetest, которые мы накопали. Узнать больше о его удивительном мире можно на https://illuna-minetest.tk
Параметры сервера можно настроить, указав файл с флагом --config. Подробную информацию о его формате см. в файле-образце по адресу http://wiki.minetest.com/wiki/Minetest.conf. Если вы хотите, чтобы ваш сервер был доступен внешнему миру, надо сообщить серверу TCP-порт 30 000 (или тот, что вы укажете в файле настройки либо у параметра -port). Файлы создаваемого мира быстро становятся огромными, и мы не рекомендуем размещать большие объемы данных на Pi. Хранилище SD-карт является узким местом во всех моделях, и сложные конструкции могут съесть всю оперативную память. На солидных серверах Minetest миры хранятся в виде базы данных в ОЗУ.
В целом, все настройки игры, моды и миры управляются сервером. Попробуйте зайти на какой-нибудь из многочисленных серверов, чтобы узнать его возможности в плане модов. Нам очень понравилась Illuna и ее Tower of Madness [Башня Безумия], в духе Лавкрафта, статуей кота и грандиозной ратушей (см. https://illuna-minetest.tk). Имя для входа на сервер будет использоваться и для создания учетной записи, поэтому пароль стоит запомнить. Изменить его можно в главном игровом меню. Многие серверы не позволяют новым игрокам наносить ущерб или что-либо строить до тех пор, пока они не продемонстрируют активность и адекватность на сервере в течение заданного времени. У каждого сервера своя политика по способам взаимодействия, но если вам припала охота всё бездумно крушить, на это есть много тестовых серверов. TNT-подобные моды довольно часто бывают ограничены из-за чрезмерной загрузки ЦП, которую они могут вызвать.
Один из наиболее продвинутых модов называется Mesecons. В нем можно создавать электрические переключатели, сенсоры, поршни и даже цифровые замки
Моды, игры и миры
Стоит уточнить, где заканчивается движок Minetest и начинаются модификации (моды). На вкладке Singleplayer [Режим одного игрока] главного меню вы можете заметить еще два варианта внизу: Minetest Game [Игра Minetest] и Minimal Development Test [Тест минимального развития]. И то, и другое на языке Minetest называется подигрой (или просто «игрой»), работающей поверх основного Minetest Engine [Движка Minetest]. Игры — это всего лишь коллекции модов и миров, представляющие собой постепенно создаваемые ландшафты, где игроки строят, обрабатывают, плавят, торгуют или делают что-либо еще, дозволенное им разрешенными модами. Minetest Game — это песочница со множеством текстур и шумов, но без целей или задач на выживание, так что, по сути, это не вполне игра. Minimal Development Test, как следует из названия, похож на игру еще меньше (состоит целиком из структур и единственного звукового эффекта) и предназначен только для тестирования.
Minetest Engine, представленный в своей классической форме, еще менее интересен с точки зрения игрока. Он обеспечивает все основные игровые элементы и умения — бег, прыжки, сообщения и прочее. Но все ремесла, фермерство, голод, текстуры, звуки, погода или еще что-нибудь экзотическое, с чем вы сталкиваетесь во время игры на некоторых из более известных серверов, делаются модами. Многое из того, что, казалось бы, должно быть частью основной игры, на самом деле является модом. Это дает некоторое представление о том, насколько настраиваемой является игра — всё ограничивается только пределами вашей фантазии (или, возможно, вашими навыками владения кодом Lua). Например, вы найдете онлайн-игры со знакомыми вам целями — выживание (то есть не умереть от голода и не быть съеденными монстрами), захват флага или создание проблем. В репозиториях Raspbian есть несколько модов. Скажем, вы можете раздобыть больше блоков с помощью
$ sudo apt install minetest-mod-moreblocks
Также очень легко добавить моды из других источников. Прекрасной отправной точкой является категоризированный список модов по адресу
https://wiki.minetest.net/List_of_ModsНапример, для установки приведенного на этой странице мода Simple Mobs, который добавляет крыс, овец и пять страшных монстров (подвижных объектов в мобах мало), перейдите по ссылке на его репозиторий GitHub (https://github.comPilzAdam/mobs) и загрузите главный файл ZIP. Создайте каталог модов и разархивируйте его:
$ mkdir -p ~/.minetest/mods
$ cd ~/.minetest/mods
$ unzip ~/Downloads/master.zipКак вариант (если у вас установлен Git), можно просто скопировать репозиторий в каталог с мобами, используя
git clone https://github.com/PilzAdam/mobs.gitТеперь создайте в игре новый мир и нажмите Настроить. Список модов появится справа — все те, что требуются по умолчанию, и наши недавно загруженные мобы. Выделите мобы и установите флажок Включить. Нажмите Сохранить, а затем Играть. Теперь вы видите овец, которые бродят по склону холма, а ночью на вас могут напасть враждебные орки.
Для разработки модов Minetest использует скриптовый язык Lua. Некоторые из наших читателей уже ознакомились с API Python от Minecraft и немного умеют работать с Lua. По словам Пертту Ахолы [Perttu Ahola] (он же celeron55/c55), разработчика оригинала Minetest, «Lua — самый простой в мире быстрый скриптовый движок для интеграции с встроенными программами, и он имеет свободную лицензию. Как только вас перестанет бесить синтаксис и вы добавите необходимые вам инструменты, Lua становится похожим на javascript, но более минималистским».
API Minetest
В Minetest существует три основных класса объектов:
> Компоненты Блоки, из которых состоит мир;
> Инструменты Оружие или другие орудия;
> Материалы Различные предметы (например, палки, бумага, минералы).
Когда вы дойдете до создания собственных модов, все новые объекты вам надо будетуказать в файле с именем init.lua, используя, например, метод minetest.register_node(). Каждый мод должен содержать по крайней мере этот файл инициализации, либо внутри директории ~/.minetest/mods — для пользовательских модов, либо /usr/share/ minetest/mods — для глобальных.
Помимо объектов, вы также можете создавать рецепты крафтов. Добавив следующее условие в файл init.lua мода, мы сможем создать радужный блок Nyan Cat с помощью яблока и блока грязи:
minetest.register_craft({
output = '"default:nyancat_rainbow" 1',
recipe = {
{'default:dirt', 'default:apple',''},
{'', '', ''},
{'', '', ''},
}
})
Вот бы так в реальной жизни...
Знакомьтесь: м-р Minetest
Нам удалось поговорить с Пертту Ахолой, который рассказал нам немного о том, как начинался проект:
«Я открыл для себя Minecraft, когда он был еще на стадии Alpha (в октябре 2010 г.). Тогда не было еще даже многопользовательского режима выживания, и я стал спрашивать некоторых своих друзей из IRC: а насколько трудно сделать такую штуку, и как это делается? Через несколько дней я придумал первую версию Minetest — у меня ее больше нет, но если кто-то захочет увидеть одну из ранних версий, загляните на http://packages.8dromeda.net/minetest/minetest-c55-win32-101010000530.zip. Это сборка для Windows — мне нравится выпускать все в виде пакетов, совместимыхс Wine, поскольку это позволяет охватить максимальную аудиторию всего одной сборкой.
Моих познаний в C++ тогда было достаточно, чтобы создать кое-какие любительские проекты GUI, используя wxWidgets и т.д. Сейчас, оглядываясь назад, я понимаю, что с C++ у меня было слабовато: я еле-еле понимал, что такое исключения... У меня также не было опыта работы с 3D-графикой, я только слегка разбирался в 2D SDL, поэтому мне нужно было нечто [движок] позволяющее быстро создавать индивидуальный контент.
Выбор, по сути, сводился к Ogre или Irrlicht. Основная проблема была в лицензировании, и я выбрал Irrlicht, поскольку Ogre тогда выходил под LGPL. На том этапе я не был уверен, что хочу взяться за создание проекта FOSS. Я просто научился тому, что мне было нужно, переделывая примеры пользовательской геометрии Irrlicht. Мне также требовалась многопоточность, и я выяснил, что здесь мне подойдет JThread. Не помню, чтобы раньше я делал что-то связанное с многопоточностью, просто мне подумалось: "Интересно, насколько это сложно?"
Irrlicht, на самом деле, штука несколько устаревшая — честно говоря, так было даже в 2010 г.; но он работает. И в этом вся его прелесть: в нашем мире слишком много вещей, которые на самом деле сопротивляются, когда вы пытаетесь их употребить. Итак, я использовал Vim, C ++, Irrlicht и JThread около двух месяцев. Затем добавил zlib для сжатия данных Миров и Cmake, чтобы сделать удобнее процесс создания объектов. Это были основные компоненты Minetest примерно года два — только самые базовые инструменты и несколько надежных библиотек — вот всё реально необходимое, чтобы что-то создать. Ну и немало решимости. Когда сформировалось сообщество и люди начали присылать заплатки, я решил сделать Minetest проектом FOSS, и теперь всё выпущено под LGPL.»