Книга по моддингу Minetest: 1. Приступая к работе

Материал из Wiki Luanti
Версия от 15:30, 13 августа 2024; N0m (обсуждение | вклад) (→‎Пакеты модов)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Понимание базовой структуры папки с модами - важный навык при создании модов. В этой главе вы узнаете о том, как работает моддинг в Minetest, и создадите свой первый мод.

Что такое игры и моды?

Преимущество Minetest заключается в возможности легко разрабатывать игры без необходимости создавать собственную воксельную графику, воксельные алгоритмы или сложный сетевой код.

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

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

Как моды, содержащиеся в игре, так и моды сторонних разработчиков используют один и тот же API.

В этой книге будут рассмотрены основные части Minetest API, и она применима как для разработчиков игр, так и для моддеров.

Где хранятся моды?

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

Для данного мира/сохранения игры отмечены три локации с модами. Они указаны по порядку:

1 .Игровые моды. Это моды, которые формируют игру, в которой работает мир. Напр.:

minetest/games/minetest_game/mods/, /usr/share/minetest/games/minetest/

2. Globalmods - это место, куда почти всегда устанавливаются моды. Если вы сомневаетесь, разместите их здесь. Напр.:

minetest/mods/

3. World mods - это место для хранения модов, которые относятся к определенному миру. Напр.:

minetest/worlds/world/worldmods/


minetest - это каталог пользовательских данных. Вы можете найти местоположение каталога пользовательских данных, открыв Minetest и нажав “Open User Data Directory” на вкладке "Credits". При загрузке модов Minetest проверит каждое из указанных выше местоположений по порядку. Если он обнаружит мод с таким же названием, как и у найденного ранее, вместо предыдущего мода будет загружен более поздний мод. Это означает, что вы можете переопределить игровые моды, поместив мод с таким же названием в глобальное расположение модов.

Создаем свой первый мод

Каталог модов

Перейдите в глобальный каталог модов (About > Open user data directory > mods) и создайте новую папку под названием “mymod”.  mymod - это название мода.

У каждого мода должно быть уникальное название - технический идентификатор (id), используемый для обозначения мода. Названия модов могут содержать буквы, цифры и символы подчеркивания. Подходящее название должно описывать, что делает мод, а каталог, содержащий компоненты мода, должен иметь то же имя, что и название мода. Чтобы узнать, доступно ли название мода, попробуйте поискать его на странице content.minetest.net.

mymod

├── textures

│   └── mymod_node.png files

├── init.lua

└── mod.conf

Для модов требуется только файл init.lua; однако рекомендуется использовать mod.conf, и могут потребоваться другие компоненты в зависимости от функциональности мода.

mod.conf

Создайте файл mod.conf со следующим содержимым:


name = mymod

description = Adds foo, bar, and bo.

depends = default


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

init.lua

Создайте файл init.lua со следующим содержимым:


print("This file will be run at load time!")

minetest.register_node("mymod:node", {

description = "This is a node",

tiles = {"mymod_node.png"},

groups = {cracky = 1}

})

minetest.register_craft({

type = "shapeless",

output = "mymod:node 3",

recipe = { "default:dirt", "default:stone" },

})


Файл init.lua является точкой входа в мод и запускается при загрузке мода.

Резюме

Этот мод называется “mymod”. Он содержит два текстовых файла: init.lua и mod.conf. Скрипт печатает сообщение, а затем регистрирует узел и рецепт создания – это будет объяснено позже. Существует единственная зависимость, мод по умолчанию, который обычно можно найти в игре Minetest. В разделе textures/ Также есть текстура для узла.

Зависимости

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

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

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

Зависимости указаны в списке, разделенном запятыми, в файле mod.conf.


depends = modone, modtwo

optional_depends = modthree

Пакеты модов

Моды могут быть сгруппированы в пакеты модов, которые позволяют упаковывать и перемещать несколько модов вместе. Они полезны, если вы хотите предоставить игроку несколько модов, но не хотите заставлять его загружать каждый из них по отдельности.


modpack1

├── modpack.conf (required) - сигнализирует о том, что это пакет модов

├── mod1 │  

└── ... mod files

└── mymod (optional)   

└── ... mod files

Пожалуйста, обратите внимание, что модпак - это не игра. Игры имеют свою собственную организационную структуру, которая будет описана в главе, посвященной играм.


<<< Оглавление