Hytale permite generar mundos de forma procedural, creando entornos, biomas y estructuras dinámicamente mientras los jugadores exploran.
El sistema de generación de mundos se organiza en tres capas interconectadas:
- Zones (Zonas) – Regiones a gran escala que definen la estructura general del mundo.
- Biomes (Biomas) – Características del terreno y el ambiente dentro de cada zona.
- Caves (Cuevas) – Redes y estructuras subterráneas generadas dentro de las zonas.
Estos sistemas trabajan juntos para crear mundos ricos y variados, con transiciones suaves y coherencia regional.
Conceptos Básicos
- Sistema de Zonas – define regiones grandes y diferenciadas.
- Sistema de Biomas – controla terreno, vegetación y clima dentro de cada zona.
- Sistema de Cuevas – genera estructuras subterráneas y redes de cavernas.
Implementación
Obtener Zonas y Biomas
// Generador de zona
ZonePatternGenerator zoneGen = /* world generator */;
ZoneGeneratorResult zoneResult = zoneGen.generate(seed, x, z);
Zone zone = zoneResult.getZone();
// Obtener bioma dentro de la zona
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);
// Verificar cuevas en la zona
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
CaveType[] caveTypes = caveGen.getCaveTypes();
// Generar cuevas según necesidad
}
Crear una Zona Personalizada
// Configuración de descubrimiento
ZoneDiscoveryConfig discovery = new ZoneDiscoveryConfig(
true, // Mostrar notificación
"Custom Zone", // Nombre visible
"zone.forest.discover", // Sonido al descubrir
"icons/forest.png", // Icono
true, // Zona importante
5.0f, 2.0f, 1.5f // Duración, fade in, fade out
);
// Patrón de biomas
IPointGenerator biomePoints;
IWeightedMap<TileBiome> tileBiomes;
CustomBiome[] customBiomes;
BiomePatternGenerator biomeGen = new BiomePatternGenerator(
biomePoints,
tileBiomes,
customBiomes
);
// Configuración de cuevas
CaveType[] caveTypes; // Definiciones de cuevas
CaveGenerator caveGen = new CaveGenerator(caveTypes);
// Ensamblar la zona
Zone customZone = new Zone(
100, // ID único
"new_custom_zone", // Nombre interno
discovery, // Configuración de descubrimiento
caveGen, // Generador de cuevas
biomeGen, // Patrón de biomas
uniquePrefabs // Estructuras únicas
);
Integración de Sistemas
Zonas y Biomas
Cada zona define su propio patrón de biomas:
Zone zone = zoneGen.generate(seed, x, z).getZone();
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);
Zonas y Cuevas
Cada zona define sus patrones de cuevas:
Zone zone = /* ... */;
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
CaveType[] types = caveGen.getCaveTypes();
}
Biomas y Cuevas
Las cuevas utilizan máscaras de bioma para controlar su ubicación:
Int2FlagsCondition biomeMask = caveType.getBiomeMask();
int biomeId = biome.getId();
int flags = biomeMask.eval(biomeId);
// Verificar si la cueva puede generarse en este bioma
if (CaveBiomeMaskFlags.canGenerate(flags)) {
// Generar cueva
}
Transiciones de Bordes
Todos los sistemas respetan los límites de la zona:
ZoneGeneratorResult result = zoneGen.generate(seed, x, z);
double borderDistance = result.getBorderDistance();
// Aplicar fade a biomas personalizados cerca de los bordes
if (borderDistance < customBiome.getFadeContainer().getMaskFadeSum()) {
double factor = customBiome.getFadeContainer().getMaskFactor(result);
// Aplicar efecto de desvanecimiento
}
Conclusión
Esta guía te proporciona una base sólida para crear zonas, biomas y cuevas personalizadas en Hytale, asegurando que cada capa del mundo procedural se integre correctamente y respete las transiciones naturales entre regiones.
