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
- Sistema de zona — Grandes regiões;
- Sistema de bioma — Terreno e ambiente dentro das zonas;
- 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
}