Modding:WorldGen Concept/ru: Difference between revisions
Mirotworez (talk | contribs) (Created page with "Моддинг:Концепция WorldGen") |
Mirotworez (talk | contribs) (Created page with "== Введение == В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в...") |
||
Line 1: | Line 1: | ||
{{GameVersion|1.15}} | {{GameVersion|1.15}} | ||
__FORCETOC__ | __FORCETOC__ | ||
<languages/>== | <languages/>== Введение == | ||
В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в какой степени его можно модифицировать. Он также предназначен в качестве общего введения для моддинга в отношении генерации мира. | |||
=== | === Терминология === | ||
Важная терминология, на которую стоит обратить внимание при чтении этой статьи: | |||
* | * Чанк (область блоков 32x32x32. Следует отметить, что фрагменты не охватывают высоту мира.) | ||
* | * Столбец фрагментов (набор фрагментов, охватывающих вертикальную высоту мира. Учитывая высоту мира 256, столбец фрагментов будет представлять 8 вертикально расположенных фрагментов) | ||
* | * Фрагмент карты (область, охватываемая столбцом чанка, но не относящаяся к чанкам в нем) | ||
* | * Регион (область, охватываемая столбцами фрагментов 16x16) | ||
== | == Концепция == | ||
Генерация мира — это процесс создания необходимых данных о мире, когда это требуется игроку. Генерация мира выполняется на основе региона, фрагмента карты и столбца фрагмента, каждый из которых действует как значимое подразделение мира. Каждый регион, фрагмент карты и столбец фрагментов создаются только один раз и хранят важные данные об этой области. | |||
Генерация мира очень модульная. Почти все сгенерированные части мира, такие как залежи руды, существа или деревья, указываются с помощью модов содержимого JSON. На уровне кодирования каждый этап генерации запускает событие, на которое базовая игра регистрирует обработчики. Обработчики событий можно зарегистрировать или удалить через API, чтобы изменить любую часть генерации. | |||
== | == Модификация контента == | ||
Используя моддинг контента, вот различные вещи, которые можно добавить, изменить или удалить из генерации мира. Свойства, относящиеся к генерации мира, обычно находятся по адресу <code>Vintagestory/assets/survival/worldgen</code>. | |||
=== | === Модифицируемый контент === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Вещь !! Описание | ||
|- | |- | ||
| | | Депозиты || Все, что «откладывается» в земле при генерации, например, руды или участки блоков, таких как гравий и мел. | ||
|- | |- | ||
| | | Структуры || Предопределенные структуры, такие как руины, найденные повсюду. На странице «[[How to use WorldEdit/ru|Как использовать WorldEdit]]» есть инструкции по созданию и экспорту структур. | ||
|- | |- | ||
| | | Деревья || Размещение деревьев и кустарников | ||
|- | |- | ||
| | | Слои блоков || Слои блоков, обнаруженные над слоем породы | ||
|- | |- | ||
| | | Блочные патчи || Патчи блоков, а также растительность | ||
|- | |- | ||
| | | Геологические провинции || Геологические атрибуты и размещение | ||
|- | |- | ||
| | | Рельеф || План местности и общее обустройство местности | ||
|} | |} | ||
Revision as of 08:24, 19 September 2022
Эта страница проверялась в последний раз для версии Vintage Story 1.15.
== Введение ==
В этой статье рассказывается, как обрабатывается генерация мира в истории Vintage, и в какой степени его можно модифицировать. Он также предназначен в качестве общего введения для моддинга в отношении генерации мира.
Терминология
Важная терминология, на которую стоит обратить внимание при чтении этой статьи:
- Чанк (область блоков 32x32x32. Следует отметить, что фрагменты не охватывают высоту мира.)
- Столбец фрагментов (набор фрагментов, охватывающих вертикальную высоту мира. Учитывая высоту мира 256, столбец фрагментов будет представлять 8 вертикально расположенных фрагментов)
- Фрагмент карты (область, охватываемая столбцом чанка, но не относящаяся к чанкам в нем)
- Регион (область, охватываемая столбцами фрагментов 16x16)
Концепция
Генерация мира — это процесс создания необходимых данных о мире, когда это требуется игроку. Генерация мира выполняется на основе региона, фрагмента карты и столбца фрагмента, каждый из которых действует как значимое подразделение мира. Каждый регион, фрагмент карты и столбец фрагментов создаются только один раз и хранят важные данные об этой области. Генерация мира очень модульная. Почти все сгенерированные части мира, такие как залежи руды, существа или деревья, указываются с помощью модов содержимого JSON. На уровне кодирования каждый этап генерации запускает событие, на которое базовая игра регистрирует обработчики. Обработчики событий можно зарегистрировать или удалить через API, чтобы изменить любую часть генерации.
Модификация контента
Используя моддинг контента, вот различные вещи, которые можно добавить, изменить или удалить из генерации мира. Свойства, относящиеся к генерации мира, обычно находятся по адресу Vintagestory/assets/survival/worldgen
.
Модифицируемый контент
Вещь | Описание |
---|---|
Депозиты | Все, что «откладывается» в земле при генерации, например, руды или участки блоков, таких как гравий и мел. |
Структуры | Предопределенные структуры, такие как руины, найденные повсюду. На странице «Как использовать WorldEdit» есть инструкции по созданию и экспорту структур. |
Деревья | Размещение деревьев и кустарников |
Слои блоков | Слои блоков, обнаруженные над слоем породы |
Блочные патчи | Патчи блоков, а также растительность |
Геологические провинции | Геологические атрибуты и размещение |
Рельеф | План местности и общее обустройство местности |
Code modding
Using code modding, it is possible to remove any specific part of world generation from the base game entirely, as well as add new functionality.
World types
There are currently three world types - "standard", "superflat", "empty". World types exist under EnumWorldGenPreset. World type has to be specified when registering event handlers for world generation.
Passes
The chunk column generation event is additionally subdivided into passes. Passes are essentially layers in the generation of a chunk column - first laying down the rock layer in one pass, and doing more general cross-chunk actions in later passes, such as flooding them with light or growing patches of grass. Passes exist under EnumWorldGenPass. The pass has to be specified when registering event handlers for chunk column generation.
Index | Name | Description | Requires neighbor chunks |
---|---|---|---|
0 | None | Nothing generated yet | false |
1 | Terrain | Basic terrain, rock strata, caves, block layers | false |
2 | TerrainFeatures | Deposits, structures, ponds | true |
3 | Vegetation | Block patches, shrubbery and trees, rivulets, sunlight flooding in chunk | true |
4 | NeighbourSunLightFlood | Snow layer, sunlight flooding to nearby chunks | true |
5 | PreDone | Done generating, spawn creatures, neighbor chunks might still generate additional things | true |
6 | Done | Pass is not triggered as an event | - |
Events
The generation of either a region (IMapRegion), map chunk (IMapChunk), or chunks contained in that chunk column (IServerChunk and IWorldChunk), triggers an event (in that order). Each of these interfaces holds some specific data about the given region. It is possible to register handlers to events, wherein access is provided for the given interface. The order in which the handlers are assigned is based on the execute order of their specific mod systems.
Accessing events
class Mod : ModSystem
{
public override double ExecuteOrder()
{
// Make sure all delegates have been assigned
return 10;
}
public override void StartServerSide(ICoreServerAPI api)
{
// Get the handler for interacting with world generation.
IWorldGenHandler handler = api.Event.GetRegisteredWorldGenHandlers("standard");
// Example registering events using a delegate.
api.Event.ChunkColumnGeneration(/* Handler here */, EnumWorldGenPass.None, "standard");
api.Event.MapChunkGeneration(/* Handler here */, "standard");
api.Event.MapRegionGeneration(/* Handler here */, "standard");
// Retrieving registered handlers.
List<MapChunkGeneratorDelegate> onMapChunkGen = handler.OnMapChunkGen;
List<ChunkColumnGenerationDelegate>[] onChunkColGen = handler.OnChunkColumnGen;
List<MapRegionGeneratorDelegate> onMapRegionGen = handler.OnMapRegionGen;
foreach (var deleg in onMapChunkGen)
{
// Printing class name of delegate instance.
// This can be useful for finding and removing any particular event from the list.
api.Server.LogEvent(deleg.Target.ToString());
}
}
}
Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.
Modding | |
---|---|
Modding Introduction | Getting Started • Пакет тем |
Content Modding | Content Mods • Developing a Content Mod • Basic Tutorials • Intermediate Tutorials • Advanced Tutorials • Content Mod Concepts |
Code Modding | Code Mods • Setting up your Development Environment |
Property Overview | Item • Entity • Block • Block Behaviors • Block Classes • Block Entities • Block Entity Behaviors • World properties |
Workflows & Infrastructure | Modding Efficiency Tips • Mod-engine compatibility • Mod Extensibility • VS Engine |
Additional Resources | Community Resources • Modding API Updates • Programming Languages • List of server commands • List of client commands • Client startup parameters • Server startup parameters Example Mods • API Docs • GitHub Repository |