minetest_modding_book/_ru/basics/getting_started.md

9.4 KiB
Raw Blame History

title layout root idx description redirect_from
Основы default ../.. 1.1 Как создать проект мода, включая init.lua, mod.conf и прочее.
/ru/chapters/folders.html
/ru/basics/folders.html

Введение

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

Что такое Игры и что такое Моды?

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

В Minetest Игра — это набор модулей, работающих вместе и создающих контент и игровую механику. Модуль (или мод) — это набор скриптов и материалов. Конечно, можно создать игру только из одного мода, но такое встречается редко, ведь так труднее настраивать и заменять отдельные элементы игры, не затрагивая всё остальное.

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

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

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

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

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

Для каждой созданной карты или сохранённой игры Minetest ищет моды в трёх местах в следующем порядке:

  1. Моды Игры: Эти моды являются неотъемлимой частью Игры. Папки: minetest/games/minetest_game/mods/, /usr/share/minetest/games/minetest/
  2. Глобальные моды: место куда почти всегда устанавливаются моды. Если не уверены, кладите их сюда. Папка: minetest/mods/
  3. Моды Мира: эти моды относятся к конкретной созданной карте. Папка: 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)
    └── ... файлы мода

Не нужно путать модпак и Игру. У Игры есть собственная структура, которая будет описана в главе Игры.