9.4 KiB
title | layout | root | idx | description | redirect_from | ||
---|---|---|---|---|---|---|---|
Основы | default | ../.. | 1.1 | Как создать проект мода, включая init.lua, mod.conf и прочее. |
|
Введение
При создании модов очень важно понимать структуру проекта мода. В этой главе вы узнаете как работает моддинг в Minetest и создадите свой первый мод.
Что такое Игры и что такое Моды?
Сила Minetest — в возможности легко создавать игры без необходимости создания собственной воксельной графики, воксельных алгоритмов или крутого сетевого кода.
В Minetest Игра — это набор модулей, работающих вместе и создающих контент и игровую механику. Модуль (или мод) — это набор скриптов и материалов. Конечно, можно создать игру только из одного мода, но такое встречается редко, ведь так труднее настраивать и заменять отдельные элементы игры, не затрагивая всё остальное.
Кроме того, вы можете распространять свой мод без привязки к конкретной игре. В этом случае он также будет называться модом в традиционном смысле — модификация. Такие моды изменяют или добавляют различные элементы игры.
Как моды в составе игры, так и просто сторонние моды используют один и тот же API.
В этой книге описаны основы Minetest API, и она подходит как для разработчиков игр, так и для моддеров.
Где хранятся моды?
У каждого мода есть своя директория, в которой лежат Lua-код, текстуры, модели и звуки. Minetest ищет моды в нескольких определённых папках. В документации эти папки обозначаются как mod load paths.
Для каждой созданной карты или сохранённой игры Minetest ищет моды в трёх местах в следующем порядке:
- Моды Игры: Эти моды являются неотъемлимой частью Игры.
Папки:
minetest/games/minetest_game/mods/
,/usr/share/minetest/games/minetest/
- Глобальные моды: место куда почти всегда устанавливаются моды.
Если не уверены, кладите их сюда.
Папка:
minetest/mods/
- Моды Мира: эти моды относятся к конкретной созданной карте.
Папка:
minetest/worlds/world/worldmods/
minetest
— это директория для пользовательских фалов. Чтобы её найти,
запустите Minetest и нажмите "Папка данных пользователя" на вкладке
"Подробней".
Во время загрузки модов Minetest проверяет по порядку каждое из перечисленных расположений. Если он обнаружит несколько модов с одинаковым именем, то мод, найденный позже, заменит собой предыдущий. Таким образом можно подменять моды игры, помещая мод с таким же названием в папку Глобальных модов.
Создание первого мода
Директория
Перейдите в глобальную папку модов (Подробней > Папка данных пользователя > mods)
и создайте новую папку под названием "mymod". mymod
— это имя мода.
У каждого мода должно быть уникальное имя, технический идентификатор (id), по которому можно ссылаться на этот мод. Имя мода может состоять из букв, цифр и подчёркиваний. Хорошее имя даёт представление о том, что делает мод. Директория, в которой лежат компоненты мода, должна иметь такое же имя. Моды можно искать по их имени на сайте content.minetest.net.
mymod
├── textures
│ └── mymod_node.png
├── 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!")
core.register_node("mymod:node", {
description = "This is a node",
tiles = {"mymod_node.png"},
groups = {cracky = 1}
})
core.register_craft({
type = "shapeless",
output = "mymod:node 3",
recipe = { "default:dirt", "default:stone" },
})
Файл init.lua запускается при загрузке мода.
Итого
Этот мод носит имя "mymod". Он содержит два текстовых файла: init.lua и mod.conf. Скрипт выводит сообщение, а затем регистрирует новый рецепт крафта (об этом будет написано дальше). У этого мода указана единственная зависимость от мода default, который, обычно, является частью Minetest Game. Также есть текстура для блока в папке textures/.
Зависимости
Зависимости указываются, если перед загрузкой нода необходимо загрузить другой мод. Моду могут потребоваться код, предметы или ещё что-нибудь из другого мода.
Существует два типа зависимостей: жёсткие и необязательные. В обоих случаях требуемый мод загружается первым. Если требуемый мод недоступен, жёсткая зависимость не позволит загрузить мод, в то время как при необязательной зависимости мод всего лишь потеряет часть функций.
Необязательные зависимости полезны в случаях, когда вы хотите добавить поддержку другого мода: например, вы можете добавлять дополнительный контент, если пользователь решит задействовать оба мода одновременно.
Несколько зависимостей перечисляются через запятую в файле mod.conf.
depends = modone, modtwo
optional_depends = modthree
Модпаки
Несколько модов могут быть собраны в модпак, который позволяет распространять эти моды вместе. Модпак позволяет загрузить и установить несколько модов за раз, без необходимости скачивать их по одному.
modpack1
├── modpack.conf (обязательный) — обозначает, что это модпак
├── mod1
│ └── ... файлы мода
└── mymod (optional)
└── ... файлы мода
Не нужно путать модпак и Игру. У Игры есть собственная структура, которая будет описана в главе Игры.