Hytale Modding
Hytale Modding
Server Plugins

Sistema de geração de mundo

Aprenda a criar recursos personalizados de geração de mundo para o seu mod de Hytale.

Escrito por Neil Revin

Visão geral

Esta seção aborda os sistemas de geração procedural de mundo de Hytale que criam ambientes, biomas e estruturas dinamicamente à medida que os jogadores exploram o mundo.

A geração de mundo de Hytale é organizada em três sistemas interconectados:

  • Zonas: regiões em grande escala que definem estruturas em todo o mundo;
  • Biomas: características do terreno e propriedades ambientais dentro das zonas;
  • Cavernas: estruturas e redes subterrâneas dentro das zonas.

Esses sistemas trabalham juntos para criar um mundo rico e variado, com transições suaves e temas regionais coerentes.

Primeiros passos

  1. Sistema de zona — Grandes regiões;
  2. Sistema de bioma — Terreno e ambiente dentro das zonas;
  3. Sistema de caverna — Estruturas e redes subterrâneas dentro das zonas;

Detalhes de implementação

Busca e geração de zona


// Obter zona na posição
ZonePatternGenerator zoneGen = /* gerador de mundo */;
ZoneGeneratorResult zoneResult = zoneGen.generate(seed, x, z);
Zone zone = zoneResult.getZone();

// Obter bioma dentro da zona
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);

// Verificação para as cavernas na zona
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
    CaveType[] caveTypes = caveGen.getCaveTypes();
    // Gerar cavernas conforme necessário
}

Criando uma zona personalizada

// Configurar descobrimento de zona
ZoneDiscoveryConfig discovery = new ZoneDiscoveryConfig(
    true,                           // Mostrar notificação
    "Zona personalizada",                  // Nome de exibição
    "zone.forest.discover",         // Evento sonoro
    "icons/forest.png",             // Ícone
    true,                           // Zona principal
    5.0f, 2.0f, 1.5f                // Duração, Aparecimento, Desaparecimento
);

// Criar bioma padrão
IPointGenerator biomePoints;
IWeightedMap<TileBiome> tileBiomes;
CustomBiome[] customBiomes;

BiomePatternGenerator biomeGen = new BiomePatternGenerator(
    biomePoints,
    tileBiomes,
    customBiomes
);

// Criar configuração de caverna
CaveType[] caveTypes; // Definições de caverna
CaveGenerator caveGen = new CaveGenerator(caveTypes);

// Construir zona
Zone customZone = new Zone(
    100,                    // ID único
    "new_custom_zone",      // Nome interno
    discovery,              // Config. de descobrimento
    caveGen,                // Gerador de caverna
    biomeGen,               // Bioma padrão
    uniquePrefabs           // Estruturas únicas
);

Integração do sistema

Integração de zona e bioma

Cada zona define seu próprio padrão de bioma:

Zone zone = zoneGen.generate(seed, x, z).getZone();
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);

Integração de zona e caverna

Cada zona define seu próprio padrão de caverna:

Zone zone = /* ... */;
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
    // Esta zona tem cavernas
    CaveType[] types = caveGen.getCaveTypes();
}

Integração de bioma e caverna

As cavernas usam máscaras do bioma para controle de posicionamento:

// Tipo de caverna com restrições de bioma
Int2FlagsCondition biomeMask = caveType.getBiomeMask();
int biomeId = biome.getId();
int flags = biomeMask.eval(biomeId);

// Verifica se a caverna pode ser gerada neste bioma
if (CaveBiomeMaskFlags.canGenerate(flags)) {
    // Generate cave
}

Transições de borda

Todos os sistemas respeitam os limites da zona:

ZoneGeneratorResult result = zoneGen.generate(seed, x, z);
double borderDistance = result.getBorderDistance();

// Suaviza os biomas personalizados perto das bordas
if (borderDistance < customBiome.getFadeContainer().getMaskFadeSum()) {
    double factor = customBiome.getFadeContainer().getMaskFactor(result);
    // Aplica a suavização
}